목차
1. Dockerfile
1-1 Dockerfile
1. Dockerfile
1-1 Dockerfile
Dockerfile이란 도커 상에서 구현될 컨테이너의 구성 정보를 기술한 파일로, Dockerfile을 읽어 이미지 파일을 생성할 수 있으며 다음과 같은 정보가 들어갈 수 있다.
- Base image
- 컨테이너 내에서 실행할 명령
- 환경변수
- 컨테이너에서 구동할 데몬 등
기초적인 IaC(Infrastructure as Code)를 구현한다.
* IaC : 코드로 구성하는 인프라
● 명령
FROM | base image |
RUN | 명령 실행 |
CMD | 컨테이너 명령 |
LABEL | 라벨 설정 |
ENV | 환경변수 |
ADD | 파일/디렉토리 추가 |
COPY | 파일 복사 |
ENTRYPOINT | 컨테이너 명령 |
EXPOSE | port expose |
VOLUME | 볼륨 마운트 |
USER | 사용자 |
WORKDIR | 작업 디렉토리 |
ARG | Dockerfile 내부 변수 |
ONBUILD | 자식 이미지 빌드에 실행 명령 |
SHELL | 기본 쉘 |
HEALTHCHECK | 컨테이너 health check |
Dockerfile 파일을 만들기 위해서는 base image가 필요하며, 이는 본래 이미지를 배포하는 곳에서 제공받아야 한다.
RUN 명령어는 이미지를 생성할 때 사용하며, CMD 명령어는 컨테이너를 올릴 때 사용하는 명령어를 지정한다..
docker build [option] path | URL
- 지정한 경로에 Dockerfile을 빌드하여 이미지를 생성한다.
- 경로 미지정 시 현재 디렉토리에서 Dockerfile을 찾는다.
※ 옵션
-t, --tag | Name, tag (name:tag) |
-f | Dockerfile 이름 지정 (별도의 파일명 이용) |
● 명령과 주석
명령은 대소문자를 구별하지 않으나 보통 대문자를 사용한다.
주석은 #으로 시작하며, 문장의 중간에서 시작 가능하다.
# 주석
명령 ...
명령 인수 # 주석
● Dockerfile : Build
FROM centos:8
- dfile 디렉토리 생성 후 위의 내용을 작성한 Dockerfile 파일을 생성한다.
- centos:8 을 베이스 이미지로 testimage를 생성한 것을 확인할 수 있다.
1-2 Dockerfile Shell과 Exec
● RUN, CMD, ENTRYPOINT 명령 서술 방식
※ Shell 형식
RUN yum install -y nginx
- 기본 쉘을 호출하여 실행한다.
- 쉘을 변경할 때는 SHELL 명령을 이용한다.
- 자유도가 높다.
※ Exec 형식
RUN ["/bin/bash", "-c", "yum install -y nginx"]
- 컨테이너 프로세스에서 직접 실행한다. 즉, $HOME 같은 환경 변수를 사용할 수 없다.
- 문자열을 인수로 지정하는 경우 ' '을 이용한다.
● 권고 사항
RUN : Shell 형식
: Exec 형식을 사용하는 경우 shell을 지정해준다.
CMD, ENTRYPOINT : Exec 형식
1-3 Dockerfile Run
이미지를 작성하기 위해 실행하는 명령, Layer를 구성한다.
FROM centos:8
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' \
/etc/yum.repos.d/CentOS-*
RUN dnf install -y nginx
- 'sed -i'는 파일의 내용을 고친 후 저장하는 명령어이다.
- 현재는 centos에 dnf가 있는 레파지토리가 없어져 dnf를 사용할 수 없으므로 레파지토리 주소를 수정한 후 nginx를 인스톨한다.
- myenginx1을 실행하더라도 nginx가 설치된 centos를 실행한 것이지 nginx를 실행한 것은 아님에 주의한다.
FROM centos:8
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' \
/etc/yum.repos.d/CentOS-* && \
dnf install -y nginx
- 앞서 작성한 Dockerfile 파일과 같이 RUN을 명령마다 붙일 수도, 이와 같이 한 번만 붙일 수도 있다.
- 전자의 경우 레이어가 3개 쌓이며, 후자의 경우 레이어가 1개 쌓인다.
- 일반적으로 후자를 권장한다.
-위와 같이 두 이미지의 레이어의 차이를 확인할 수 있다.
'일일 정리' 카테고리의 다른 글
Dockerfile : 기타 명령어 (2) | 2025.06.04 |
---|---|
Dockerfile : CMD, ENTRYPOINT (0) | 2025.06.03 |
Docker image (0) | 2025.05.28 |
Data와 Volume (1) | 2025.05.26 |
Docker Network (0) | 2025.05.23 |