Dockerfile 속성
- WORKDIR : 컨테이너 내 작업할 공간(폴더)
- COPY : 파일 이름을 바꿔서 복사 가능
- RUN : docker가 build될 때 실행할 명령어
- CMD : 이미지를 직접 실행할 때 실행할 명령어
- ENTRYPOINT : 이미지를 직접 실행할 때 실행할 고정 명령어 (override X)
- EXPOSE : 사람들에게 노출시킬 정보 (힌트)
CMD vs ENTRYPOINT

.jar 파일 굽기
- 실제 서버 파일로 사용할 .jar 파일을 컨테이너에 옮긴 후 설치
- jar 파일 다운로드 : 예제 파일 활용
- ex04 폴더 안에 build 폴더 생성 후 aws-v3-0.0.1.jar 파일 옮기기

- Dockerfile 작성
- -Dspring.profiles.active=dev : dev 모드로 jar 파일 실행 (8081 포트)
- 기본값은 prod (5000 포트)
from openjdk:21-jdk-slim
workdir /app
copy ./build/aws-v3-0.0.1.jar ./application.jar
run chmod +x ./application.jar
expose 8081
entrypoint ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]
- 이미지 build

- 실행 시 정상적으로 접근 가능
- 80 포트 : http 기본 포트 (생략 가능)
- /aws/v3 : health check


MySQL 실행 (환경 변수 설정)
- docker run 시 -e로 환경 변수 지정 가능
- Dockerfile에서 env 지정을 통한 환경 변수 지정 가능
- Dockerfile로 환경 변수 설정
from mysql:8.0
env MYSQL_ROOT_PASSWORD=root1234!
env MYSQL_DATABASE=metadb
- build 후 실행 및 mysql에 연결
- 로그인 성공

- 로그인 성공 (mysql workbench)
- 포트를 3307로 개방했기 때문에 3307로 변경 후 로그인


volume + Dockerfile
- Dockerfile을 사용해도 내부 데이터는 컨테이너를 끄면 다 사라짐
- 이때는 volume을 같이 활용하여 내부 데이터도 외부 저장소를 끌어와서 사용하는 것이 좋음
- 값 계속 저장 가능 및 동기화 가능
- Dockerfile : 자동으로 실행시킬 SQL 파일을 initdb.d 폴더 내에 복사
- 폴더명 뒤에 /만 적으면 파일 이름 그대로 복사
from mysql:8.0
copy ./db/init.sql /docker-entrypoint-initdb.d/
- build 후 다음 명령어 입력
- 백틱을 통해 다음 줄로 명령 넘기기 가능
- bash는 역슬래시로 가능
docker run `
-d `
-p 3307:3306 `
-e MYSQL_ROOT_PASSWORD=cos1234! `
-v mydb2-data:/var/lib/mysql `
mydb2

- 실행 결과 : DB에 데이터 정상적으로 삽입

- 볼륨, 이미지, 컨테이너 정상 생성 및 작동
- 이후에 데이터 백업이 필요하면 볼륨만 살려서 백업하면 됨



Share article