본문 바로가기

About/Docker

[Docker] Dockerfile이란

Dockerfile

Docker에서 인프라 구성을 기술한 파일을 'Dockerfile'이라고 함.


Docker 이미지를 작성하기 위해서는 다음과 같은 내용들이 필요합니다.

  • 베이스가 될 Docker 이미지
  • Docker 컨테이너 안에서 수행한 조작(명령)
  • 환경변수 등의 설정
  • Docker 컨테이너 안에서 작동시켜둘 데몬 실행

Dockerfile은 이와 같이 Docker 상에서 작동시킬 컨테이너 구성 정보를 기술하기 위한 파일입니다.

 

Docker의 build 명령은 Dockerfile에 기술된 구성 정보(Dockerfile)를 바탕으로 Docker 이미지를 작성합니다.

 


Dockerfile의 기본 구문

Dockerfile은 텍스트 형식의 파일로, 에디터 등을 사용하여 작성합니다. 확장자는 필요 없으며, 'Dockerfile' 이라는 이름의 파일에 인프라 구성 정보를 작성합니다. Dockerfile 이외의 파일로 이미지를 작성할 시 이미지를 빌드할 때 파일명을 명시적으로 지정해야 합니다.

 

Dockerfile의 기본 구문은 다음과 같습니다.

명령어 인수 #주석

 

명령어는 대문자든 소문자든 상관없지만 관례적으로 대문자로 통일하여 사용합니다. 주석을 사용할 경우 #을 붙입니다.

 

 

Dockerfile에서 사용하는 주요 명령은 다음과 같습니다.

명령 설명
FROM 베이스 이미지 지정
RUN 명령 실행
CMD 컨테이너 실행 명령
LABEL 라벨 설정
EXPOSE 개방할 포트 번호
ENV 환경변수 
ADD 파일/디렉토리 추가
COPY 파일 복사
ENTRYPOINT 컨테이너 실행 명령
명령 설명
VOLUME 볼륨 마운트
USER 사용자 지정
WORKDIR 작업 디렉토리
ARG Dockerfile 안의 변수
ONBUILD 빌드 완료 후 실행되는 명령어
STOPSIGNAL 시스템 콜 시그널 설정
HEALTHCHECK 컨테이너의 헬스 체크
SHELL 기본 쉘 설정

Dockerfile로부터 Docker 이미지 생성

Dockerfile로부터 이미지를 생성하려면 docker build 명령어를 사용합니다.

 

docker build 명령어 서식

docker build -t [생성할 이미지명]:[태그명] [Dockerfile의 위치]

 

예시

- Dockerfile 생성

mkdir centos_test && cd centos_test
touch Dockerfile

- Dockerfile 작성

#베이스 이미지 설정
FROM centos:centos7

이 Dockerfile로부터 sample이라는 이미지를 작성하려면 다음과 같이 명령어를 실행합니다.

cd [Dockerfile 위치]
docker build -t sample:1.0 .

sample 이미지의 태그는 1.0으로 지정하였으며 Dockerfile의 위치를 . 으로 지정하여 현재 폴더의 Dockerfile을 사용하였습니다(상대경로). Dockerfile의 저장위치는 절대경로로도 설정가능합니다.

 

- 실행결과

root@wlfnwelkn:/home/docker/centos_test# docker build -t sample:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/1 : FROM centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
 ---> 8652b9f0cb4c
Successfully built 8652b9f0cb4c
Successfully tagged sample:1.0

-생성된 이미지 확인

docker image ls

centos:centos:7이 다운로드 되어져있고, sample:1.0 이미지가 생성된 것을 확인할 수 있습니다.

 

 

- 생성한 이미지 실행

docker run -it centos:centos7 bash
//컨테이너 내부
$cat /etc/os-release


NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

생성한 이미지가 잘 실행되는 것을 확인할 수 있습니다.