Step3 [ entrypoint 파일사용]
ex02에 있는 걸 다 복사해서 ex03으로
이미지도 다 지우고 깔끔하게 세팅하자.
도커파일 세팅
일단 이렇게 세팅하고 시작한다.
entrypoint.sh 생성!
deploy 폴더 삭제
이따가 Git Clone받을 주소
openjdk11은 git이 설치가 되어있을까??? 그래야지 git clone할 수 있음!
// 실행
docker run -dit openjdk:11-jdk-slim
JavaScript
복사
인터렉션 모드로 jdk에 git이 설치가 되어있는지 확인할려고 한다.
그래서 일단 jdk부터 실행하기 위해 다운받는다.
docker ps 로
container ID 확인
docker exec -it 46fc bash 로
열린 컨테이너에 bash로 열어본다.
git —version 을 실행해보았더니 없단다.
jdk에는 git이 없으니까 설치해야된다.
git 설치하기
apt-get update로 메뉴판을 업데이트
apt-get install git 로 깃 설치
-y :
설치 중간에 물어보는 행위에 모두 yes처리
1>:
표준 출력(stdout)을 리다이렉션하는 연산자. 숫자 1은 표준 출력을 의미
dev/null :
모든 입력을 무시하고 아무런 출력도 생성하지 않는 특별한 파일. 출력 내용을 버리는 데 사용됩니다. 배포시에는 로그를 안띄우는 것이 좋다.
entrypoint.sh 작성
sh파일에는 그냥 리눅스 명령어를 넣어도 잘 이해한다.
apt-get은 동기적으로 처리된다고 하셔서 괜찮은데
git clone은 동기적인지 비동기적인지 잘 모른다. 알아봐야 되는데, 그냥 확실하게 할려면 CPU를 재워도 된다.
sleep으로 1초 재울껀데, 만약 이게 비동기적으로 처리가 되어서 sleep없이 내려가면
cd blog-last에서 없는 폴더에 접근할려하니 터지겠지, 한번 알아보자.
빌드된 앱 내부에 gradlew에 실행권한을 준다.
이렇게 entrypoint.sh에서 리눅스 명령어로 다 작성하고,
Dockerfile에서 이 파일만 걸어주면된다.
git 프로젝트에 들어가서 application-dev.yml을 확인해보면 8080포트를 받고 있는 것이 확인된다. 그래서 포트포워딩으로 8080을 받을 것이다.
백그라운드 실행하고 포트포워딩으로 bash에 접근하게 한다.
entrypoint.sh 전체 스크립트
docker 전체 스크립트
Docker 로그 보기
//세팅 순서
1. 빌드
2. 실행 : docker run -d -p 8080:8080 step3
3. 실행되었다가 꺼진 것들은 로그가 남는다.
4. 그럼 docker ps -a 하면 모든 로그가 남는다.
JavaScript
복사
이전 단계에서 docker ps해도 아무것도 나오지 않아서 로그을 확인해볼려 한다.
docker ps -a 로 로그확인
앱에 들어가서 Logs를 확인 하는 방법으로도 가능하다.
docker logs 컨테이너ID
으로도 콘솔에서 확인 가능하다.
ENTRYPOINT에서 ‘’/bin/bash” 설정을 해야된다고 한다.
왜 그런지 확인해보니,
Dockerfile에서 ‘ENTRYPOINT’ 지시문을 사용할 때 이를 명시하는 것은 일반적인 실행파일이 없을 때의 대안이라고 한다.
즉, 컨테이너가 시작될 때 ‘/bin/bash’ 셀을 실행하여 명령을 실행한다. 그래서 ‘/bin/bash’ 를 명시하지 않으면 Docker는 해당 명령이 존재하는지 확인하고, 그렇지 않으면 컨테이너가 시작되지 않는 다고 한다.
마지막 진짜로 굽기
//여기까지 순서
1. docker build -t step3 . // 빌드
2. docker run -d -p 8080:8080 step3 // 포트포워딩및 실행
JavaScript
복사
// 사진 내용 구성
2. docker ps // 컨테이너 ID확인
3. docker exec -it 컨테이너ID bash // 명령어로 컨테이너 bash 열기
JavaScript
복사
git clone이 잘 된 것을 확인할 수 있다.
jar파일이 생성이 되었는지 확인 완료
마지막 웹으로 접속까지 확인한다.