현재 도커 설정은 상당 부분이 변경 업데이트 되고 있으며, 이로 인하여 기존의 많은 부분이 변경되어 사용이 불가능 하다.
최신 문서는 도커 공식 사이트 docs.docker.com/reference/builder 에서 확인해야 한다.
도커 파일은 # 주석으로 시작하면 된다.
도커 파일은 도커 이미지를 생성하기 위한 일련의 절차들을 담고 있는 텍스트 파일이다.
다음은 컨텍스트 파일을 만드는 작업이다.
[root@localhost ~]# mkdir context [root@localhost ~]# cd context/ [root@localhost context]# touch dockerfile [root@localhost context]# ll 합계 0 -rw-r--r-- 1 root root 0 2월 23 17:21 dockerfile
다음 내용을 Dockerfile 로 저장한다.
FROM ubuntu:14.04 RUN yum install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx VOLUME ["/data", "/etc/nginx/site-enabled", "/var/log/nginx"] WORKDIR /etc/nginx CMD ["nginx"] EXPOSE 80 EXPOSE 443
우분투 14.04 기반으로 nginx 서버를 설치한 Docker 이미지를 생성하는 Dockerfile 이다.
- FROM: 어떤 이미지를 기반으로 할지 설정. Docker 이미지는 기존에 만들어진 이미지를 기반으로 생성
<이미지 이름>:<태그>
형식으로 설정 - MAINTAINER: 메인테이너 정보. → 카피라이트
- RUN: 셸 스크립트 혹은 명령을 실행
- 이미지 생성 중에는 사용자 입력을 받을 수 없으므로 apt-get install 명령에서
-y
옵션을 사용. (yum install도 동일). - 나머지는 nginx 설정.
- VOLUME: 호스트와 공유할 디렉터리 목록.
docker run
명령에서-v
옵션으로 설정할 수 있음.
예)-v /root/data:/data
는 호스트의 /root/data 디렉터리를 Docker 컨테이너의 /data 디렉터리에 연결.
- 이미지 생성 중에는 사용자 입력을 받을 수 없으므로 apt-get install 명령에서
- CMD: 컨테이너가 시작되었을 때 실행할 실행 파일 또는 셸 스크립트.
- WORKDIR: CMD에서 설정한 실행 파일이 실행될 디렉터리..
- EXPOSE: 호스트와 연결할 포트 번호.
각 옵션 및 속성들을 아래 자주 사용하는 순으로 정렬했다.
FROM
도커파일의 기본 이미지를 설정하며, 그 뒤의 설정들은 해당 이미지 위에 만들어 진다.
기본 이미지는 IMAGE:TAG 로 명시된다. (예를들어 debian:wheezy)
만약 태그가 생략되면 latest가 사용된것으로 간주, 항상 태그의 특정 버전을 설정하는 것을 권장한다.
MAINTAINER
여기에 주어진 문자열은 이미지의 Author 메타데이터로 설정된다.
docker inspect -f .Author IMAGE를 실행하면 해당 정보를 읽어온다.
이미지의 유지관리자 이름과 연락처등 상세 정보들을 설정하는데 사용된다.
ADD
빌드 컨텍스트나 원격주소에서 이미지로 파일을 복사한다.
ADD 에서 지원되는 범위가 큼으로 비굑적 간단한 COPY 명령을 이용하여 빌드 컨텍스트에 있는 파일들과
디렉토리를 복사하고 RUN설정을 cutl 또는 wget과 같이 이용하여
원격 자원 같은 설정안에서 다운로드 처리하고 삭제가 가능한 다운로드 방법을 선호 한다.
RUN
주어진 설정을 컨테이너 내부에서 실행하고 결과를 반영한다.
ENV
이미지 내부의 환경변수들을 설정한다.
해당 환변 변수들은 그 다음에 오는 설정에 사용된다.
...
ENV MY_VERSION 1.3
...
EXPOSE
컨테이너가 지정된 포트들을 통하여 수신을 하는 프로세스를 가지고 있음을 도커에게 알려주는 역할을 한다.
컨테이너를 연결하거나 docker run을 실행하면서 -P 인자를 주어서 포트를 게시할 때 도커에 의해서 해당 정보가 사용된다.
EXPOSE 설정만으로는 네트워크에 영향을 미치지 않는다.
CMD
컨테이너가 시작되는 시점에 해당 설정이 실행된다.
CMD의 설정은 docker run이 이미지 이름 다음에 오는 인자에 의해 재정의 된다.
마지막 CMD 설정만이 유효하면 이전의 모든 CMD설정은 모두 재정의 된다.
COPY
빌드 컨텍스트에서 이미지로 파일을 복사하는데 사용된다.
COPY src dest_와 COPY ["src", "dest"] 형식으로 사용된다.
빌드 컨텍스트 외부의 경로를 사용할 수 없다.
예를들어 /another_dir/myfile 같은 경로는 동작하지 않는다.
ENTRYPOINT
컨테이너가 시작될때 실행되어야 하는 실행 파일을 설정한다.
docker run 의 이미지 이름 다음에 오는 모든 CMD 설정 또는 인자들은 실행파일의 매개변수로 전달된다.
ENTRYPOINT 설정은 주어진 모든 인자들을 해석하기 전에 변수와 서비스들을 초기화 하는 "시작" 스크립트를 제공하기 위해 사용된다.
ONBUILD
이미지가 다른 이미지의 기본 계층으로 사용될떄 향 후 실행되는 설정을 지정하기 위해서 사용된다.
하위이미지가 추가되는 데이터를 처리하는데 유용하게 사용될 수 있다.
USER
RUN, CMD, ENTRYPOINT 설정에서 사용될 사용자를 설정한다.
호스트와 컨테이너 간의 UID 는 동일하지만 사용자 이름은 서로 다른UID가 할당된다.
이로인해 권한 설정이 복잡해지기도 한다.
VOLUME
볼륨으로 사용될 특정 파일이나 디렉토리를 선언하는데 사용된다.
이미지에 이미 해당 파일이나 디렉토리가 있으면 컨테이너가 시작 될때 볼륨으로 해당 파일이 나 디렉토리가 복사된다.
WORKDIR
RUN, CMD, ENTRYPOINT, ADD, COPY 설정에서 사용될 작업 디렉토리를 설정한다.
여러차례 사용될 수 있으며 상대 경로의 사용도 가능한데 앞서 명시된 WORLDIR의 상대 경로로 해석된다.