목차
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 |