일일 정리

Dockerfile : 기타 명령어

mysecurity 2025. 6. 4. 11:09

목차

1. Dockerfile : 기타 명령어

1-1 ONBUILD

1-2 ENV

1-3 기타 명령어

 

 

1. Dockerfile : 기타 명령

1-1 ONBUILD

현재 생성한 이미지를 기반으로 자식 이미지 생성 시 실행할 명령을 기술한다. 손자에게는 적용되지 않는다.

FROM, ONBUILD, MAINTAINER 제외 모든 Dockerfile 명령 사용이 가능하다.

 

다음과 같이 Dockerfile을 작성하여  parents 이미지를 생성한다.

FROM centos:8
ONBUILD RUN touch /child.txt

- parents 이미지로 생성한 컨테이너에는 child.txt가 존재하지 않는다.

 

다음과 같이 Dockerfile을 작성하여  child 이미지를 생성한다.

FROM parents

- child 이미지로 생성한 컨테이너에는 child.txt가 존재한다.

 

1-2 ENV

환경 변수를 설정한다. container run 문장에서 -e(--env)로 변경 가능하다.

 

● 지정 방식 1: key value

단일 환경 변수를 지정한다.

key 다음 첫 번째 공백 다음을 모두 문자열로 취급한다.( :, 인용부호, 공백 모두 포함 )

ENV NAME "MSG"
ENV DEP itclass

 

● 지정 방식 2: key=value

여러 변수 지정이 가능하다.

\를 이스케이프 문자로 처리 가능하다.

ENV NAME="MSG" DEP=itclass

 

 

다음과 같이 Dockerfile을 작성하여 mysql에 접속한다.

FROM mysql
ENV MYSQL_ROOT_PASSWORD=asd123
ENV MYSQL_DATABASE=te
ENV MYSQL_USER=te
ENV MYSQL_PASSWORD=asd123

 . . .

- 환경 변수를 통한 접속이 가능하다.

 

위의 Dockerfile의 설정값은 docker run 문장에서 별도의 지정이 없을 시 기본적으로 적용되는 설정으로, 다른 설정값을 원하는 경우 다음과 같이 직접 환경 변수를 지정할 수도 있다.

 $ docker run -d --rm -e MYSQL_ROOT_PASSWORD=asd123 -e MYSQL_DATABASE=te -e MYSQL_USER=te -e MYSQL_PASSWORD=asd123 --name mysql1 mysql

 

이 경우 설정값은 직접 docker run 문장에서 설정한 값으로 지정된다. 

ENV는 이와 같이 주로 기본 설정값을 지정하는 용도로 사용된다.

 

1-3 기타 명령어

● WORKDIR

작업 디렉토리를 지정하는 것으로, RUN, CMD, ENTRIPOINT, COPY, ADD 명령이 실행되는 디렉토리이다.

- 지정한 디렉토리가 없다면 생성한다.

- 절대/상대 경로 지정이 가능하다.

 

다음과 같이 여러 번 지정 가능하다.

WORKDIR /a_dir
WORKDIR b_dir
WORKDIR c_dir
. . .

 

다음과 같이 ENV 명령으로 지정한 환경 변수를 이용할 수도 있다.

ENV PATH1 /a_dir
ENV PATH2 b_dir
WORKDIR $PATH1/$PATH2

 

다음과 같이 WORKDIR을 여러 번 지정하는 경우 작업이 매우 복잡해지므로 작업 시 절대 경로 사용을 권장한다.

FROM centos:8
ENV PATH1 /a_dir
WORKDIR $PATH1
RUN echo a > a.txt
WORKDIR $PATH1/b_dir
RUN echo b > b.txt

 

● USER

RUN, CMD, ENTRYPOINT 명령을 수행할 계정을 지정한다. 계정은 미리 생성해야 한다.

FROM centos:8
RUN ["adduser", "st01"]  // 계정 생성
WORKDIR /st01
RUN chown st01 /st01
USER st01
RUN echo 1 > st01.txt

 

● LABEL

작성자, 버전, 코멘트 등 이미지에 대한 정보를 제공할 때 사용한다.

docker container inspect 명령으로 확인 가능하다.

LABEL key=value
================

FROM centos:8
LABEL name="ITCLASS"
LABEL version=0.9
LABEL description="test 입니다."

 

● EXPOSE

컨테이너의 포트번호를 지정한다.

docker container run 문장의 -P(-p와 다르다.)에 사용될 포트를 지정한다.

필수가 아닌 권고 사항 정도이다.

EXPOSE 8080

 

● SHELL

기본 쉘을 지정한다.

RUN, CMD, ENTRYPOINT 명령에 유효하다.

SHELL ["쉘", "option"]
======================

SHELL ["/bin/bash", "-c"]     // 리눅스
SHELL ["cmd" "/S", "/C"]      // Windows

 

● ARG

Dockerfile 내부에서만 사용할 변수를 지정한다. (ENV는 컨테이너에서 사용할 환경 변수이다.)

- ARG로 선언된 변수는 build시에 --build-arg 옵션을 이용해 수정 가능하다.

$ docker build --build-argvar=itclass

 

다음과 같이 Dockerfile을 작성하여 변수 값을 확인할 수 있다.

ARG 변수=값
===========

FROM centos:8
ENV path=/tmp
ARG name="ITCLASS"
RUN echo $name > $path/a.txt

- $path 값은 컨테이너에 저장되어있으나 $name 값은 컨테이너에 저장되어 있지 않다.

- Dockerfile 내부에서 $name를 이용해 작성한 내용은 컨테이너에 저장되어 있다.

 

● ADD

호스트의 파일이나 디렉토리를 이미지에 추가할 때 사용한다.

호스트 파일은 Dockerfile이 위치한 디렉토리에 위치해야 한다.

ADD host_file image_path
========================

ADD a.txt /temp/           
ADD st*.txt /school/
ADD st?.txt /school/

 

다음과 같이 WORKDIR이 지정되어 있으면 이를 기점으로 경로를 지정한다.

WORKDIR /usr/share/nginx/
ADD index.html html/

- /usr/share/nginx/html/ 경로에 저장된다.

 

다음과 같이 원격지 파일 지정 또한 가능하다.

ADD http://www.itclass.co.kr/index.html /mydir/

 

다음과 같이 압축 파일인 경우 지정된 디렉토리에 압축이 풀린다.

ADD aa.tar /mydir/

 

● COPY

ADD와 비슷하지만 ADD와 달리 파일만을 복사한다.

COPY host_file image_path

 

● VOLUME

컨테이너 종료 시에도 데이터를 유지하기 위해 사용한다.

지정된 디렉토리는 호스트의 /var/lib/docker/volumes/hash_code/_data에 마운트 된다.

컨테이너 생성 시 --rm 을 이용하면 컨테이너 종료(삭제) 시 volume으로 만들어진 /var/lib/docker/volumes/hash_code 디렉토리도 삭제된다.

VOLUME ["container_dir", " container_dir", ......]

'일일 정리' 카테고리의 다른 글

[Final-Project] Sophos UTM을 활용한 방화벽 구축  (1) 2025.06.18
Dockerfile : CMD, ENTRYPOINT  (0) 2025.06.03
Dockerfile  (0) 2025.06.02
Docker image  (0) 2025.05.28
Data와 Volume  (1) 2025.05.26