본문 바로가기
Docker

Dockerfile

by 유코_ 2024. 2. 15.

Dockerfile

Docker 이미지를 생성하기 위한 텍스트 파일로, 이미지 생성 과정에서 실행할 명령어들을 포함하고 있습니다.

Dockerfile을 통해 어떤 베이스 이미지를 사용할지, 어떤 파일이나 디렉토리를 이미지에 추가할지, 어떤 명령을 실행할지, 어떤 환경 변수를 설정할지 등을 명시할 수 있습니다.

구성요소

  • 베이스이미지 : FROM
    • 모든 Dockerfile은 FROM 지시자로 시작해야 합니다.
    • 베이스 이미지는 이미지 생성의 기반이 되는 이미지로, 보통 운영체제나 언어 런타임 등을 포함하고 있습니다.
    • FROM openjdk:17-alpine
  • 작업 디렉토리 : WORKDIR
    • 이후의 RUN, CMD, ENTRYPOINT, COPY, ADD 명령들이 실행되는 기본 디렉토리가 됩니다.
    • WORKDIR /app
  • 파일 추가 : COPY, ADD
    • 호스트 시스템의 파일이나 디렉토리를 이미지에 추가할 수 있습니다.
    • COPY . /app
  • 명령 실행 : RUN
    • 이미지 생성 과정에서 명령을 실행할 수 있습니다.
    • 주로 패키지 설치, 빌드 과정 등을 수행하는 데 사용됩니다.
    • RUN apt-get update && apt-get install -y curl
  • 환경 변수 설정 : ENV
    • 환경변수를 설정할 수 있습니다.
    • ENV MY_ENV_VAR=my_value
  • 실행 명령 지정: CMD, ENTRYPOINT
    • 컨테이너가 시잘될 때 실행 할 명령을 지정할 수 있습니다.
    • CMD ["java", "-jar", "my_app.jar"]

Dockerfile 작성

  • 프로젝트의 루트 디렉토리에 Dockerfile을 작성합니다.
FROM openjdk:17-alpine
VOLUME /tmp
COPY apiKey.jks apiKey.jks
COPY build/libs/config-server-1.0.jar ConfigService.jar
ENV DOCKERIZE_VERSION v0.7.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
ENTRYPOINT ["dockerize", "-wait", "tcp://mariadb-service:3306", "-wait", "http://discovery-service:8761", "-timeout", "20s", "java","-jar","ConfigService.jar"]

Docker 이미지 생성

  • Dockerfile을 작성한 후, docker build 명령어를 이용해 Docker 이미지를 생성할 수 있습니다.
docker build -t my_image .
  • 현재 디렉토리의 Dockerfile을 기반으로 my_image라는 이름의 Docker 이미지가 생성됩니다.