inblog logo
|
sxias
    Docker

    [Docker] 7. Dockerfile 2

    문정준's avatar
    문정준
    Jul 31, 2025
    [Docker] 7. Dockerfile 2
    Contents
    Dockerfile 속성CMD vs ENTRYPOINT.jar 파일 굽기MySQL 실행 (환경 변수 설정)volume + Dockerfile

    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
    Contents
    Dockerfile 속성CMD vs ENTRYPOINT.jar 파일 굽기MySQL 실행 (환경 변수 설정)volume + Dockerfile

    Sxias ㆍ a32176740@gmail.com

    RSS·Powered by Inblog