[Docker] Dockerfile 관련 명령어

Ogu·2024년 8월 31일
1

Docker

목록 보기
3/3
post-thumbnail

Docker 이미지 명령어

명령어용도
FROM생성할 이미지의 베이스가 될 이미지
WORKDIR명령어를 실행할 작업 디렉터리를 설정한다.
RUN이미지 빌드 시 내부적으로 실행할 커맨드
ENTRYPOINT이미지 실행 시 항상 실행되야 하는 커맨드 설정
CMD이미지가 실행될 때마다 실행할 명령어. Dockerfile 내에서 한 번만 사용할 수 있다.
EXPOSE이미지에서 노출할 포트 및 프로토콜 설정
COPY/ADD이미지의 파일 시스템으로 파일 또는 디렉터리 복사
ENV환경 변수 설정
ARG빌드 시 넘어올 수 있는 인자 설정

Dockerfile 작성 예시

application.yml, application-dev.yml 구성

application.yml

현재 저희 프로젝트의 application.yml 구성은 다음과 같습니다.

jasypt:
  encryptor:
    bean: jasyptStringEncryptor

spring:
  profiles:
    active:
      - local
    group:
      local:
        - db-local
      dev:
        - db-dev
    include:
      - db
  mail:
    host: smtp.gmail.com
    port: 587
    username: 
   ...
   
   
  # Redis
  data:
    redis:
      ...

email.send: ENC(kGXTSlfxUWNbRoGuBwNRTJBETjMz04AChYMrwDeY3Cs=)

...

application-db.yml


# 공통 설정
mybatis:
  mapper-locations: classpath:/mappers/**.xml
  config-location: classpath:/config/mybatis-config.xml

logging:
  level:
    'org.springframework.jdbc': debug
    'org.springframework.security': debug
    'org.store.clothstar': debug

jwt:
  secret_key: ...
  accessTokenValidTimeMillis: 1200000
  refreshTokenValidTimeMillis: 12000000

spring:
  jpa:
    properties:
      hibernate:
        default_batch_fetch_size: 100

--- # local 설정
spring:
  config:
    activate:
      on-profile: "db-local"
  datasource:
    url: jdbc:mysql://localhost:3306/clothstar82
    username: ...
    password: ...
    p6spy:
      enabled: true
      appender: com.p6spy.engine.spy.appender.Slf4JLogger
      logMessageFormat:
        p6spy: "%(currentTime)|%(executionTime)|%(category)|%(sqlSingleLine)"
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQLDialect
        format_sql: true

--- # dev 설정
spring:
  config:
    activate:
      on-profile: "db-dev"
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ...
    username: ...
    password: ...
  jpa:
    hibernate:
      ddl-auto: update
    database-platform: org.hibernate.dialect.MySQLDialect
    properties:
      hibernate:
        format_sql: true
        show_sql: true
        

application-db.yml은

  1. 공통 설정
  2. dev 설정
  3. local 설정

으로 나누어져 있으며, 공통은 기본적으로 설정되는 내용입니다.

공통 설정 이후 --- 을 통해 설정을 분리하고,spring:config:active:on-profile 을 통해 해당 설정의 이름을 지정합니다.

application.yml은 spring.profiles 의 내용과 같이 include: -db 를 통해 application-db.yml 의 내용을 포함하도록 되어 있습니다.

application.yml의 group 은 local, dev로 나눠져 있으며 각각의 group에 포함시킬 on-profile 이름을 포함하고 있습니다.

Dockerfile 작성

FROM openjdk:17-alpine

ARG JAR_FILE=/build/libs/clothstar-0.0.1-SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-Dspring.profiles.active=dev","-jar","/app.jar"]
  • FROM : openjdk:17 베이스 이미지에서 레이어를 생성한다.

  • ARG : 변수 선언

  • COPY : 실행할 .jar 파일을 도커 컨테이너 내부에 app.jar이라는 이름으로 복사

  • ENTRYPOINT : 컨테이너가 실행될 때 java -Dspring.profiles.active=dev -jar /app.jar 명령을 실행한다.

-Dspring.profiles.active=dev로 실행되면 local 대신 dev 프로파일이 활성화되고 group: dev 가 활성화되는 것이 됩니다.

profile
Hello! I am Ogu, a developer who loves learning and sharing! 🐤🐤 <br> こんにちは!学ぶことと共有することが好きな開発者のOguです!🐤

0개의 댓글