
[명령] [인자]
FROM
베이스 이미지 지정 명령 (ex. FROM httpd:alpine)
LABEL
작성자, 버전 정보와 같은 이미지의 설명을 작성하기 위한 명령 (LABEL version="1.0.0")
CMD
docker 컨테이너가 시작할 때 실행하는 쉘 명령을 지정하는 명령.
Run은 이미지 작성시 실행하는 명령이지만, CMD는 컨테이너를 시작할 때 실행하는 명령이다.
RUN
쉘 명령을 실행하는 명령어. RUN은 이미지 작성 시 실행되며 새로운 이미지 layer를 만드는 역할.
ex. RUN ["apt-get", "install", "nginx"]
ENTRYPOINT
docker 컨테이너가 시작할 때, 실행하는 쉘 명령을 지정하는 명령. docker run 커멘드를 실행 할 때 별도 명령어를 넣을 시, 해당 명령어로 CMD 명령은 덮어씌워진다.
하지만 ENTRYPOINT로 지정한 명령은 docker run 커멘드 실행시 별도로 작성된 명령어가 존재하더라도 덮어씌워지지 않고 실행된다.
EXPOSE
docker 컨테이너 외부에 열어놓을 포트 설정 (ex. EXPORT 8080)
ENV
docker 컨테이너 내부에서 사용할 환경 변수 지정 (ex. ENV PATH /usr/bin:$PATH)
WORKDIR
docker 컨테이너에서의 작업 디렉토리 설정
COPY
파일 또는 디렉토리를 docker 컨테이너에 복사. ADD와 달리 URL은 지정할 수 없으며, 압축 파일을 자동으로 풀어주지 않는다.
ADD
파일, 디렉토리, 특정 URL의 데이터를 docker 이미지에 추가 (ex. ADD file/var/www/html).
추가할 파일이 tar 압축 파일일 경우, 자동으로 압축을 풀어준다.
동일한 이름의 파일 또는 디렉토리가 이미 docker 이미지에 있을 시에는 덮어 씌우지 않는다.
SHELL
쉘프로그램 지정 명령어이다. (ex. SHELL['/bin/bash','-c'])
ARG
dockerfile 내에서 필요한 변수를 설정한다. docker 이미지/컨테이너에서 사용하는 환경 변수를 설정하는 ENV와 달리, dockerfile 스크립트 작성을 위해 필요한 변수를 설정하는 것이다.
USER
docker 이미지 및 컨테이너에서 작업을 하는 사용자 ID를 지정한다. (USER kim)
ONBUILD
생성한 이미지를 기반으로, 새로운 이미지를 생성시 실행하는 명령을 지정 (ex. ONBUILD ADD myweb.tar/var/www/html)
VOLUME
이미지를 위한 볼륨 생성.
cf.
# : Dockerfile 내에서 주석 작성
cf. mv [파일명] [변경할 파일명] : 파일명 변경
FROM alpine
docker build [옵션] Dokcerfile_경로
주요 옵션
-t / -tag
이미지 이름 설정, '저장소(DockerHub ID)/이미지이름:태그'와 같이 작성할 수 있다.
docker build --tag test .
cf. cd ~ : 홈으로 이동
-f
이미지 빌드시 디폴트로 Dockerfile 파일명으로 된 파일을 찾아 이미지를 빌드한다. 그 외의 파일명으로 이미지를 빌드할 경우 해당 옵션을 사용해 파일명을 지정해줄 수있다.
- -f 옵션 활용
cp dockerfile test_dockerfile # dockerfile의 내용을 test_dockerfile로 복사
docker build --tag test2 -f test_dockerfile . # 현재 폴더의 test_dockerfile로 test2 이미지 빌드
--pull
FROM으로 지정된이미지는 초기 한번만 다운로드 받고, 이후에는 다운을 받지 않고 기존의 이미지를 사용한다. 해당 옵션은 --pull=true와 같이 사용하며, 이미지 생성시마다 새로 다운로드를 받도록 한다.
LABEL maintainer="~"
LABEL version="~"
LABEL description="~"
COPY [기존 파일 경로] [새로운 파일 경로]
기존 파일의 내용을 다른 파일에 복사한다.
custom 파일에 있는 내용을 아파치 서버 실행시 기본 실행 경로인 /usr/local/apach2/htdocs에 붙여넣어 서버 실행시 custom 파일에 있는 내용을 실행하게 한다.COPY ./custom /usr/local/apach2/htdocs
cf. docker inspect [컨테이너 / 이미지] : 컨테이너/이미지의 상세 정보 확인하기.
다음과 같이 세가지 형태로 작성할 수 있다.
명령어, 인자를 리스트 처럼 작성하는 형태 (Docker 추천)
CMD ["executable", "param1", "param2", ...]
ex. CMD ["/bin/sh", "-c", "echo", "Hello"]
-> bin 디렉토리에 있는 sh(기본 쉘 프로그램)을 실행 하되, 쉘 명령을 터미널상에서 받지 않고 해당 인자들("echo", "Hello")을 바로 쉘 상에서 실행 시킨다. (-c 옵션)
cf. 인자들은 쌍따옴표로 적어주어야 한다.
cf. echo : 인자의 내용들을 출력. 또한 echo의 실행 파일은 bin내에 존재하여 /bin/echo와 같이 사용할 수 있다.
ENTRYPOINT 명령어에 인자를 리스트처럼 작성하여 넘겨주는 형태
CMD ["param1", "param2", ...]
쉘 명령처럼 작성하는 형태
CMD [command] [param1] [param2] ...
CMD는 하나의 Dockerfile에서 한가지만 설정되며, 만약 CMD 설정이 여러개일 경우, 맨 마지막에 설정된 CMD설정만 적용된다.
Dockerfile 작성 예시
FROM httpd:alpine
LABEL maintainer="qlql7748@gmail.com"
LABEL version="1.0.0"
LABEL description="A test docker image to understand Docker"
COPY ./2021_DEV /usr/local/apachweb2/htdocs
CMD ["/bin/sh", "-c", "httpd-foreground"]
이미지 빌드
docker build --tag [생성될 이미지 이름]
컨테이너 생성 (백그라운드 실행 및 포트 오픈)
docker run -d -p 9999:80 --name [컨테이너 이름] --rm [빌드한 이미지 이름]
참고 Docker 명령
컨테이너 에러 또는 출력 결과 확인하기
docker logs [컨테이너ID/컨테이너 이름]
컨테이너 즉시 중지하기
docker kill [컨테이너ID/컨테이너 이름]
docker stop은 현재 컨테이너가 실행중인 단계 까지는 기다린 후 중지한다.
CMD 명령 덮어씌우기
ex. docker run -dit -p 9999:80 --name [컨테이너 이름] --rm
[빌드한 이미지 이름] /bin/sh -c httpd-foreground
docker inspect [컨테이너 이름/이미지 이름]