일일 정리

Dockerfile

mysecurity 2025. 6. 2. 17:26

목차

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