1. Dockerfile 작성
FROM openjdk:11-jdk-slim
WORKDIR /app
COPY build/aws-v3-0.0.3.jar ./application.jar
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]
#CMD ["--server.port=8080"]
WORKDIR
- 모든 작업이 해당 디렉토리에서 진행되도록 처음 시작 디렉토리를 지정.
- 사용자가 터미널로 접근 했을 때도 /app 디렉토리로 바로 접근된다. (docker attach, docer exec -it ~ bash)
- COPY와 같이 상대경로로 설정되어있다면 처음 시작지점이 WORKDIR에서 지정한 폴더가 된다.
( ./application.jar === /app/application.jar)
COPY (vs ADD)
- build/aws-v3.0.0.3.jar를 복사하는데 파일명은 application.jar로 변경
- ADD와의 차이점 : ADD는 압축도 풀린다고함. ADD 압축파일.zip ./ #이렇게 하면 압축풀림
ENTRYPOINT
- 명령어를 실행해주는 것.
- CMD와 비슷하다.
- 파라미터로 넘겨받은 것들을 합쳐서 컨테이너 실행 시 실행시켜 준다.
- Dockerfile을 빌드해서 컨테이너가 실행되면 java -jar -Dspring.profiles.active=dev application.jar 명령어가 자동으로 실행된다. (물론 /app 디렉토리에서)
ENTRYPOINT vs CMD
- ENTRYPOINT는 컨테이너가 실행될 때 무조건 실행되는 명령어
- CMD도 컨테이너가 실행될 때 실행되는 명령어 이지만 외부의 값에 따라서 대체가 가능하다. (옵셔널) CMD는 ENTRYPOINT의 파라미터로 넘겨지기도 한다.
CMD ["--server.port=3000"]
이렇게 해놓아도
docker run -d -p 9097:5000 java-server --server.port=5000
컨테이너를 실행할 때 위와 같이 실행시키면 --server.port=5000 으로 실행된다. (Dockerfile에 있는 CMD 대체)
정리하자면 무조건 대체제없이 실행되어야할 것들은 ENTRYPOINT로 실행하면될거같고, 내가 run할 때마다 바꿀수도있는 값은 CMD로 설정해두면 될거같다.
2. 실습에 필요한 jar 파일 다운로드
https://github.com/codingspecialist/aws-v3/tree/release
GitHub - codingspecialist/aws-v3: elastic bean stalk
elastic bean stalk. Contribute to codingspecialist/aws-v3 development by creating an account on GitHub.
github.com
spring project가 jar로 압축되어있는 파일이다.
해당 파일을 build디렉토리에 넣어주자. (Dockerfile에 COPY build/aws-v3.0.0.3.jar 로 해놨으니까.)
2. Dockerfile build
docker build -t java-server:1.0 ./
docker build -t [생성할이미지명][생성할태그] [Dockerfile 위치]
3. Docker image확인
docker images
빌드 결과가 제대로 생성되었는지 이미지를 확인해주자.
4. 컨테이너 실행
docker run -d -p 9097:8081 java-server:1.0
현재는 Dockerfile의 CMD 명령어가 없어서 spring.profiles.active=dev가 실행되어 8081이 기본포트로 잡힌다.
(ENTRYPOINT로 -Dspring.profiles.active=dev 를 설정하였기 때문에.)
만약에 Dockerfile에 CMD를 추가한다면?
FROM openjdk:11-jdk-slim
WORKDIR /app
COPY build/aws-v3-0.0.3.jar ./application.jar
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]
CMD ["--server.port=8080"]
이렇게 되면 8080 포트가 잡힌다. java -jar -Dspring.profiles.active=dev application.jar --server.port=8080 이라는 명령어가 실행된 것과 같기 때문에.
근데 Dockerfile에도 추가하고 run 옵션으로도 추가하면? run옵션으로 추가한 것이 Dockerfile의 CMD 명령어를 대체한다.
docker run -d -p 9097:8800 java-server:1.0 --server.port=8800
이렇게 되면 spring의 내장 tomcat은 8800으로 실행된다.

5. 컨테이너 로그 확인
컨테이너 내부의 로그를 보기 위해서는 아래와 같은 명령어로 확인한다.
docker logs [CONTAINER ID]

'코딩이야기 > Docker' 카테고리의 다른 글
도커 입문 16강 - docker file step4 - nginx 내부구성 알아보기 (0) | 2024.06.28 |
---|---|
도커 입문 15강 - docker file step3 - RUN 명령어 (0) | 2024.06.26 |
도커 입문 13강 - docker file step1 - 기본기 (1) | 2024.06.18 |
도커 입문 12강 - docker commit 이미지 굽기와 docker hub업로드 (0) | 2024.06.17 |
도커 입문 11강 docker volume 옵션으로 폴더 연결하기 (0) | 2024.06.14 |