ggoggo
[Docker] Dockerfile 본문
Dockerfile이란
Docker Image를 생성하기 위한 설정 파일이다. 파일 내 작성된 구문으로 Docker Image가 만들어진다.
Dockerfile 문법
FROM
FROM <image>:<tag>
FROM ubuntu:16.04
- 베이스 이미지를 지정한다.
- 반드시 지정해야 하며 어떤 이미지도 베이스 이미지가 될 수 있다
- tag는 될 수 있으면 latest(기본값)보다는 구체적인 버전(16.04 등)을 지정하는 것이 좋다
MAINTAINER
MAINTAINER <name>
MAINTAINER chaechae01@gmail.com
- Dockerfile을 관리하는 사람의 이름 또는 이메일 정보를 적는다.
- 빌드에 영향을 주지는 않는다.
COPY
COPY <src>... <dest>
COPY . /usr/src/app
- 파일이나 디렉토리를 이미지로 복사한다.
- 일반적으로 소스를 복사하는데 사용한다.
- target 디렉토리가 없다면 자동으로 생성한다.
ADD
ADD <src>... <dest>
ADD . /usr/src/app
- COPY 명령어와 매우 유사하자 추가 기능이 있다.
- src에 파일 대신 URL을 입력할 수 있고 src에 압축 파일을 입력하는 경우 자동으로 압축을 해제하면서 복사된다.
RUN
RUN <command>
RUN ["executable", "param1", "param2"]
RUN bundle install
- 가장 많이 사용하는 구문이다.
- 명령어를 그대로 실행한다.
- 내부적으로 /bin/sh -c 뒤에 명령어를 실행하는 방식이다.
CMD
CMD ["executable","param1","param2"]
CMD command param1 param2
CMD bundle exec ruby app.rb
- 도커 컨테이너가 실행되었을 때 실행되는 명령어를 정의한다.
- 빌드할 때는 실행되지 않으며 여러개의 CMD가 존재할 경우 가장 마지막 CMD만 실행한다.
- 한꺼번에 여러개의 프로그램을 실행하고 싶은 경우에는 run.sh 파일을 작성하여 데몬으로 실행하거나 supervisord나 forego와 같ㅇ느 여러개의 프로그램을 실행하는 프로그램을 사용한다.
WORKDIR
WORKDIR /path/to/workdir
- RUN, CMD, ADD, COPY 등이 이루어질 기본 디렉토리를 설정한다.
- 각 명령어의 현재 디렉토리는 한 줄 한 줄마다 초기화되기 때문에 RUN cd /path를 하더라도 다음 명령어에선 다시 위치가 초기화된다.
- 같은 디렉토리에서 계속 작업하기 위해서 WORKDIR을 사용한다.
EXPOSE
EXPOSE <port> [<port>...]
EXPOSE 4567
- 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는 (Listen) 포트를 지정한다.
- 여러개 지정 가능
VOLUME
VOLUME ["/data"]
- 컨테이너 외부에 파일 시스템을 마운트 할 때 사용한다.
- 반드시 지정하지 않아도 마운트할 수 있지만, 기본적으로 지정하는 것이 좋다.
ENV
ENV <key> <value>
ENV <key>=<value> ...
ENV DB_URL mysql
- 컨테이너에서 사용할 환경변수를 지정한다.
- 컨테이너를 실행할 때 -e 옵션을 사용하면 기존 값을 오버라이딩 하게 된다.
구문 | 설명 |
# | 코멘트 |
FROM | 베이스 이미지(Base Image) 지정 |
MAINTAINER | 이미지를 생성한 사람의 이름 및 정보 |
LABEL | Key-value 형식으로 작성된 메타 데이터 |
RUN | 컨테이너 빌드를 위한 실행 Commands |
COPY | 컨테이너 빌드시 호스트 파일을 복사 |
ADD | 컨테이너 빌드시 호스트의 (tar,url)을 복사 |
WORKDIR | 컨테이너 빌드시 명령이 실행될 작업 디렉토리 |
ENV | 환경 변수 |
USER | 명령 및 컨테이너 실행시 적용할 유저설정 ( 기본: root ) |
VOLUME | 컨테이너 내의 특정 디렉토리를 컨테이너 외부 경로에 마운트 |
EXPOSE | 컨테이너 동작 시 외부에서 사용할 포트 지정 |
CMD | 컨테이너 동작 시 자동으로 실행할 서비스 및 스크립트 지정 |
ENTRYPOINT | CMD와 함께 사용하면서 Command 지정 시 사용 |
'Infra > Docker' 카테고리의 다른 글
[Docker Compose] Docker Compose 작성법 (1) | 2023.12.03 |
---|---|
[Docker Compose] Docker Compose란? & 명령어 (0) | 2023.12.03 |
[Docker] 이미지 만들고 배포하기 (1) | 2023.12.03 |
[Docker] 설치하고 컨테이너 실행하기 (1) | 2023.12.03 |
[Docker] Docker란 무엇인가? (1) | 2023.12.03 |