hahn

[docker] docker file 본문

가상화/Docker

[docker] docker file

hahn 2024. 8. 7. 04:38
728x90
반응형

구성 요소

Dockerfile은 도커 이미지를 생성하기 위한 스크립트 파일입니다. Dockerfile은 일련의 명령어(instruction)로 구성되며, 각 명령어는 이미지를 빌드하는 과정에서 특정 작업을 수행합니다.

 

주요 명령어 (Instructions)

 

FROM

 

기본(base) 이미지를 지정합니다. 주로 OS 이미지나 런타임 이미지를 사용합니다.

FROM ubuntu:20.04

 

RUN

 

이미지를 빌드할 때 실행할 명령어를 지정합니다. 주로 패키지를 설치하거나 설정을 변경하는 데 사용됩니다.

RUN apt-get update && apt-get install -y python3

 

ADD

 

이미지에 호스트의 파일이나 폴더를 추가합니다.

복사하려는 디렉토리가 존재하지 않으면 자동으로 생성됩니다.

URL을 지정하거나 압축 파일을 자동으로 해제하는 기능이 있습니다.

ADD app.tar.gz /app

 

COPY

 

호스트의 파일이나 이미지를 복사합니다.

ADD와 가장 큰 차이점은 URL을 지정하거나, 압축 파일을 자동으로 해제하지 않는다는 점입니다.

COPY ./app /app

 

EXPOSE

 

컨테이너가 수신 대기할 포트를 지정합니다.

이 명령어는 실제 포트를 열지는 않지만, 이 포트가 외부 연결에 사용된다는 정보를 제공합니다.

EXPOSE 80

 

ENV

 

환경 변수를 설정합니다. 컨테이너 내에서 실행되는 애플리케이션이 이 환경 변수를 참조할 수 있습니다

$name, ${name}의 형태로 사용할 수도 있습니다.

추가적으로 ${name:-else}와 같이 name이 정의가 되지 않았을 때 else를 사용과 같은 문법도 사용가능합니다.

ENV APP_ENV=production

 

CMD

 

컨테이너가 시작될 때 실행할 기본 명령을 지정합니다.

Dockerfile에서 한 번만 사용할 수 있으며, 컨테이너 실행 시 다른 명령을 지정하면 덮어쓰여집니다.

CMD ["python3", "app.py"]

 

ENTRYPOINT

 

컨테이너가 시작될 때 실행할 명령을 지정합니다.

CMD와 다르게, ENTRYPOINT는 기본 실행 파일을 지정하며, CMD나 Docker 실행 명령의 인수로 전달됩니다.

ENTRYPOINT ["python3"]

 

VOLUME

 

호스트와 컨테이너 간의 디렉토리를 공유할 수 있도록 마운트 포인트를 설정합니다

이 명령어는 데이터가 컨테이너의 수명 주기와 독립적으로 지속되도록 합니다.

VOLUME ["/data"]

 

WORKDIR

 

작업 디렉토리를 설정합니다.

이 디렉토리는 이후의 RUN, CMD, ENTRYPOINT, COPY, ADD 명령어가 실행될 디렉토리입니다.

WORKDIR /app

 

예제 Dockerfile

# 베이스 이미지 설정
FROM ubuntu:20.04

# 패키지 설치
RUN apt-get update && apt-get install -y python3

# 애플리케이션 파일 복사
COPY ./app /app

# 작업 디렉토리 설정
WORKDIR /app

# 환경 변수 설정
ENV APP_ENV=production

# 데이터 저장소 설정
VOLUME ["/data"]

# 컨테이너가 수신 대기할 포트
EXPOSE 80

# 애플리케이션 실행 명령 설정
ENTRYPOINT ["python3"]
CMD ["app.py"]

 

 

  • FROM: Ubuntu 20.04 이미지를 기반으로 합니다.
  • RUN: apt-get을 사용하여 Python3을 설치합니다.
  • COPY: 호스트의 ./app 디렉토리를 컨테이너의 /app 디렉토리에 복사합니다.
  • WORKDIR: 작업 디렉토리를 /app으로 설정합니다.
  • ENV: APP_ENV 환경 변수를 production으로 설정합니다.
  • VOLUME: /data 디렉토리를 호스트와 공유하여 데이터가 지속되도록 설정합니다.
  • EXPOSE: 컨테이너가 포트 80을 수신 대기하도록 지정합니다.
  • ENTRYPOINT: 컨테이너가 시작될 때 python3 명령어를 실행하도록 지정합니다.
  • CMD: python3 명령어에 인수로 app.py를 전달하여 애플리케이션을 실행합니다.

 

728x90
반응형