[Dockerfile] 도커 파일

dockerfile
허원일's avatar
Aug 05, 2024
[Dockerfile] 도커 파일
💡
base image를 바탕으로 image를 커스터마이징한 것을 기록해 놓은 문서
Dockerfile을 준비한 후, docker build 명령어를 통해 이미지를 빌드할 수 있다. 이때, Dockerfile 내의 지시어들이 순서대로 실행되어 최종 이미지가 생성됨. Dockerfile 은 애플리케이션의 빌드와 배포 과정을 표준화하고 자동화할 수 있으며, 이는 개발의 효율성을 높이는 데 기여할 수 있다.
  • 장점
    • 좋은 재현성
      • 동일한 도커파일로부터 동일한 환경을 반복적으로 생성하는데 유리
    • 버전 관리에 용이
      • 수동으로 이미지를 설정하는 것보다 버전 관리에 용이
    • 협업에 유리
      • 팀원들과 쉽게 동일한 이미지를 공유

명령어

FROM

base image(기반 이미지)를 지정하며, 모든 `Dockerfile`은 `FROM` 명령어로 시작해야 하며, 이는 빌드 과정의 기점이 되는 이미지(base image)를 정의한다.
FROM base image # FROM ubuntu:18.04

LABEL

이미지에 컨테이너의 메타데이터를 추가한다.
LABEL maintainer = "name@example.com"

RUN

이미지 빌드 과정 중에 명령어를 실행하며, 주로 패키지 설치나 설정 파일 변경에 사용된다.
notion image
[출처: 얄팍한 코딩사전 유튜브]
RUN apt-get update && apt-get install -y python

COPY

컨테이너 빌드시, 호스트(로컬)의 파일이나 디렉토리를 이미지(도커) 내부로 복사하며, 애플리케이션의 소스 코드를 이미지에 추가할 때 주로 사용된다.
notion image
[출처: 얄팍한 코딩사전 유튜브]
COPY . /app

ADD

COPY 명령어와 유사하지만, 원격 URL에서 파일을 추가하거나 로컬의 압축 파일을 압축 해제하며 파일을 추가할 수 있다.
ADD https://example.com/big.tar.xz /usr/src/things/

CMD

컨테이너가 시작될 때 실행할 기본 명령어를 정의하며,  Dockerfile 내에서 한 번만 사용할 수 있다.
  • 특징
    • /bin/sh 기반 실행
    • /bin/sh 없이 처리할 떄는 배열 형태로 작성
notion image
[출처: 얄팍한 코딩사전 유튜브]
CMD ["python", "./app/app.py"] # 배열 형태

ENTRYPOINT

CMD와 함께 사용하며, 명령어 지정시 사용한다.
CMD vs ENTRYPOINT
컨테이너 실행시 넘기는 인자를 CMD는 덮어쓰기, ENTRYPOINT는 인자로 전달
동일한 이미지로 테스트, 운영 환경 각각의 엔트리포인트를 다르게 주어 초기에 읽는 스크립트를 다르게 하여 서로 다른 동작을 지정할 수 있다.

EXPOSE

컨테이너가 리스닝할 포트를 지정한다.
EXPOSE 80

ENV

환경 변수를 설정하며, 애플리케이션 설정에 사용됨
ENV API_KEY="YOUR_API_KEY"

WORKDIR

RUNCMDENTRYPOINTCOPYADD 명령어가 실행될 작업 디렉토리를 설정함
WORKDIR /app

ENTRYPOINT

컨테이너가 시작될 때 실행할 명령어를 설정하며, CMD와 함께 사용되어 애플리케이션의 실행 방식을 정의할 수 있음
ENTRYPOINT ["python"] CMD ["app.py"]
 
Share article

원일이의 블로그