logoStephen's 기술블로그

포스트 검색

제목, 태그로 포스트를 검색해보세요

#005 #GitClone/Entrypoint

#005 #GitClone/Entrypoint
Docker
성훈 김
2024년 6월 11일
목차

👉 Step3 [ entrypoint 파일사용]

notion image
ex02에 있는 걸 다 복사해서 ex03으로
ex02에 있는 걸 다 복사해서 ex03으로
notion image
이미지도 다 지우고 깔끔하게 세팅하자.
이미지도 다 지우고 깔끔하게 세팅하자.
 

🔹 도커파일 세팅

notion image
일단 이렇게 세팅하고 시작한다.
일단 이렇게 세팅하고 시작한다.
notion image
notion image
deploy 폴더 삭제
deploy 폴더 삭제
이따가 Git Clone받을 주소
이따가 Git Clone받을 주소
blog-last
busanuvUpdated Nov 24, 2023
 

🔹 openjdk11은 git이 설치가 되어있을까??? 그래야지 git clone할 수 있음!

notion image
JavaScript
// 실행
docker run -dit openjdk:11-jdk-slim 
인터렉션 모드로 jdk에 git이 설치가 되어있는지 확인할려고 한다. 
그래서 일단 jdk부터 실행하기 위해 다운받는다.
인터렉션 모드로 jdk에 git이 설치가 되어있는지 확인할려고 한다. 그래서 일단 jdk부터 실행하기 위해 다운받는다.
 
notion image
docker ps 로
container ID 확인
docker ps 로 container ID 확인
 
notion image
docker exec -it 46fc bash 로
열린 컨테이너에 bash로 열어본다.
docker exec -it 46fc bash 로 열린 컨테이너에 bash로 열어본다.
 
notion image
git —version 을 실행해보았더니 없단다.
jdk에는 git이 없으니까 설치해야된다.
git —version 을 실행해보았더니 없단다. jdk에는 git이 없으니까 설치해야된다.
 

🔹 git 설치하기

notion image
apt-get update로 메뉴판을 업데이트
apt-get update로 메뉴판을 업데이트
notion image
apt-get install git 로 깃 설치
apt-get install git 로 깃 설치
 
notion image
-y :
설치 중간에 물어보는 행위에 모두 yes처리

1>:
표준 출력(stdout)을 리다이렉션하는 연산자.  숫자 1은 표준 출력을 의미
-y : 설치 중간에 물어보는 행위에 모두 yes처리 1>: 표준 출력(stdout)을 리다이렉션하는 연산자. 숫자 1은 표준 출력을 의미
 
dev/null :
모든 입력을 무시하고 아무런 출력도 생성하지 않는 특별한 파일. 출력 내용을 버리는 데 사용됩니다. 배포시에는 로그를 안띄우는 것이 좋다.
 

👉 entrypoint.sh 작성

notion image
sh파일에는 그냥 리눅스 명령어를 넣어도 잘 이해한다.

apt-get은 동기적으로 처리된다고 하셔서 괜찮은데
git clone은 동기적인지 비동기적인지 잘 모른다. 알아봐야 되는데, 그냥 확실하게 할려면 CPU를 재워도 된다.
sh파일에는 그냥 리눅스 명령어를 넣어도 잘 이해한다. apt-get은 동기적으로 처리된다고 하셔서 괜찮은데 git clone은 동기적인지 비동기적인지 잘 모른다. 알아봐야 되는데, 그냥 확실하게 할려면 CPU를 재워도 된다.
 
notion image
sleep으로 1초 재울껀데, 만약 이게 비동기적으로 처리가 되어서 sleep없이 내려가면
cd blog-last에서 없는 폴더에 접근할려하니 터지겠지, 한번 알아보자.
sleep으로 1초 재울껀데, 만약 이게 비동기적으로 처리가 되어서 sleep없이 내려가면 cd blog-last에서 없는 폴더에 접근할려하니 터지겠지, 한번 알아보자.
notion image
빌드된 앱 내부에 gradlew에 실행권한을 준다.
빌드된 앱 내부에 gradlew에 실행권한을 준다.
 
notion image
이렇게 entrypoint.sh에서 리눅스 명령어로 다 작성하고,
Dockerfile에서 이 파일만 걸어주면된다.
이렇게 entrypoint.sh에서 리눅스 명령어로 다 작성하고, Dockerfile에서 이 파일만 걸어주면된다.
 
notion image
git 프로젝트에 들어가서 application-dev.yml을 확인해보면 8080포트를 받고 있는 것이 확인된다. 그래서 포트포워딩으로 8080을 받을 것이다.
git 프로젝트에 들어가서 application-dev.yml을 확인해보면 8080포트를 받고 있는 것이 확인된다. 그래서 포트포워딩으로 8080을 받을 것이다.
notion image
백그라운드 실행하고 포트포워딩으로 bash에 접근하게 한다.
백그라운드 실행하고 포트포워딩으로 bash에 접근하게 한다.
 

entrypoint.sh 전체 스크립트

JavaScript
apt-get update
apt-get install -y git 1>/dev/null
git clone https://github.com/busanuv/blog-last.git
sleep 3s
cd blog-last
chmod +x gradlew
./gradlew build
java -jar -Dspring.profiles.active=dev build/libs/blog-last-0.0.1-SNAPSHOT.jar
 

docker 전체 스크립트

JavaScript
apt-get update
apt-get insatall -y git 1>/dev/null
git clone https://github.com/busanuv/blog-last.git
sleep 3s
cd blog-last
chmod +x gradlew
./gradlew build
java -jar -Dspring.profile.active=dev build/libs/blog-last-0.0.1-SNAPSHOT.jar
 
 

👉 Docker 로그 보기

JavaScript
//세팅 순서
1. 빌드
2. 실행 : docker run -d -p 8080:8080 step3
3. 실행되었다가 꺼진 것들은 로그가 남는다. 
4. 그럼 docker ps -a 하면 모든 로그가 남는다. 
notion image
이전 단계에서 docker ps해도 아무것도 나오지 않아서 로그을 확인해볼려 한다. 
docker ps -a 로 로그확인
이전 단계에서 docker ps해도 아무것도 나오지 않아서 로그을 확인해볼려 한다. docker ps -a 로 로그확인
notion image
앱에 들어가서 Logs를 확인 하는 방법으로도 가능하다.
앱에 들어가서 Logs를 확인 하는 방법으로도 가능하다.
notion image
docker logs 컨테이너ID
으로도 콘솔에서 확인 가능하다.
docker logs 컨테이너ID 으로도 콘솔에서 확인 가능하다.
 
notion image
ENTRYPOINT에서 ‘’/bin/bash” 설정을 해야된다고 한다. 

왜 그런지 확인해보니, 
Dockerfile에서 ‘ENTRYPOINT’ 지시문을 사용할 때 이를 명시하는 것은 일반적인 실행파일이 없을 때의 대안이라고 한다. 
즉, 컨테이너가 시작될 때 ‘/bin/bash’ 셀을 실행하여 명령을 실행한다. 그래서 ‘/bin/bash’ 를 명시하지 않으면 Docker는 해당 명령이 존재하는지 확인하고, 그렇지 않으면 컨테이너가 시작되지 않는 다고 한다.
ENTRYPOINT에서 ‘’/bin/bash” 설정을 해야된다고 한다. 왜 그런지 확인해보니, Dockerfile에서 ‘ENTRYPOINT’ 지시문을 사용할 때 이를 명시하는 것은 일반적인 실행파일이 없을 때의 대안이라고 한다. 즉, 컨테이너가 시작될 때 ‘/bin/bash’ 셀을 실행하여 명령을 실행한다. 그래서 ‘/bin/bash’ 를 명시하지 않으면 Docker는 해당 명령이 존재하는지 확인하고, 그렇지 않으면 컨테이너가 시작되지 않는 다고 한다.

👉 마지막 진짜로 굽기

JavaScript
//여기까지 순서
1. docker build -t step3 .     // 빌드
2. docker run -d -p 8080:8080 step3  // 포트포워딩및 실행
notion image
JavaScript
// 사진 내용 구성
2. docker ps  // 컨테이너 ID확인
3. docker exec -it 컨테이너ID bash  // 명령어로 컨테이너 bash 열기
notion image
git clone이 잘 된 것을 확인할 수 있다.
git clone이 잘 된 것을 확인할 수 있다.
notion image
jar파일이 생성이 되었는지 확인 완료
jar파일이 생성이 되었는지 확인 완료
 
notion image
마지막 웹으로 접속까지 확인한다.
마지막 웹으로 접속까지 확인한다.