[Docker] 7. Dockerfile 2

문정준's avatar
Jul 31, 2025
[Docker] 7. Dockerfile 2

Dockerfile 속성

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

CMD vs ENTRYPOINT

notion image
 
 

.jar 파일 굽기

  • 실제 서버 파일로 사용할 .jar 파일을 컨테이너에 옮긴 후 설치
 
  • jar 파일 다운로드 : 예제 파일 활용
 
  • ex04 폴더 안에 build 폴더 생성 후 aws-v3-0.0.1.jar 파일 옮기기
notion image
 
  • 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
notion image
 
  • 실행 시 정상적으로 접근 가능
    • 80 포트 : http 기본 포트 (생략 가능)
    • /aws/v3 : health check
notion image
notion image
 

MySQL 실행 (환경 변수 설정)

  • docker run 시 -e로 환경 변수 지정 가능
  • Dockerfile에서 env 지정을 통한 환경 변수 지정 가능
 
  • Dockerfile로 환경 변수 설정
from mysql:8.0 env MYSQL_ROOT_PASSWORD=root1234! env MYSQL_DATABASE=metadb
 
  • build 후 실행 및 mysql에 연결
    • 로그인 성공
notion image
 
  • 로그인 성공 (mysql workbench)
    • 포트를 3307로 개방했기 때문에 3307로 변경 후 로그인
notion image
notion image
 

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
notion image
 
  • 실행 결과 : DB에 데이터 정상적으로 삽입
notion image
 
  • 볼륨, 이미지, 컨테이너 정상 생성 및 작동
    • 이후에 데이터 백업이 필요하면 볼륨만 살려서 백업하면 됨
notion image
notion image
notion image
 
Share article

sxias