인프라

[Docker] Dockerfile 명령어 및 작성예시

EBEL 2024. 12. 17. 17:13

Dockerfile Command

Command Description Example
FROM image/scratch 빌드하는 베이스 이미지 FROM ubuntu:latest
LABEL name=”text” 메타데이터 추가 LABEL email=”abce@gmail.com”
LABEL name=”Kang”
COPY path dst 로컬 경로의 파일(path)을 container 내부 경로(dst)로 복사 COPY app.js /usr/src/app/app.js
ADD src dst COPY와 동일하지만 untar를 적용하고 http 경로 허용 ADD https://example.com/file.tar.gz /usr/src/
RUN args.. 컨테이너 내부에서 임의로 실행하는 명령어 RUN apt-get update && apt-get install -y curl
USER name 기본 username 설정 USER appuser
WORKDIR path 후속 명령어를 실행할 working directory 설정 WORKDIR /usr/src/app
CMD args 컨테이너가 실행될 때 수행할 명령어
* 만약 docker run시 command 입력하면 기존의 명령어는 입력된 명령어로 대체된다.
CMD [”npm”, “start”]
ENTRYPOINT args Configures a container to run as an executable
* container 실행 시 무조건 실행되는 명령어.
ENTRYPOINT [”python”, “app.py”]
ARG name value docker build 명령어에서 빌드타임에 사용할 변수명 정의 ARG VERSION=1.0
ENV name value 컨테이너 내부에서 사용할 환경변수 설정 ENV NODE_ENV=production
EXPOSE 런타임 시 개방할 포트 번호 EXPOSE 80/tcp
HEALTHCHECK docker container 상태 확인(테스트) 할지 설정한다.
예시) 5분마다 가동중인 웹서버의 메인페이지를 3초안에 표시할 수 있는지 확인하는 명령어 →
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1

 

Dockerfile 작성 예시

FROM openjdk:17-jdk
ARG jar_file=spring_app-1.0.jar
COPY ${jar_file} application.jar
EXPOSE 9009
ENTRYPOINT ["java", "-jar", "application.jar"]

 

위는 spring boot로 개발한 백엔드 어플리케이션을 위한 docker image를 빌드하는 dockerfile 예시이다.

먼저 spring application이 실행될 수 있도록 base image를 적어주어야 한다. (FROM openjdk:17-jdk)

그 후 build한 jar file 경로를 ARG로 설정한 후 컨테이너 내부에 application.jar라는 이름으로 COPY를 한다.

이후 컨테이너 내부에서 사용할 포트를 개방한 뒤(EXPOSE 9009) 컨테이너가 실행될 때 자동으로 spring application이 실행되도록 entrypoint를 설정하면 된다.