ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dockerfile 구조
    Cloud 2015. 1. 28. 09:00
    반응형
    Dockerfile 이라는 파일에 docker에서 필요한 설정들을 해서 컨테이너를 원하는대로 설정할 수 있다.
    Dockerfile을 생성한 후 아래처럼 소스경로를 포함해서 빌드명령을 내리면 해당 경로를 기준으로 빌드가 실행된다.
    docker build /your/source/path
    빌드에서 제외할 파일들은 .dockerignore 파일에 명시해서 제외할 수 있다.
    Dockfile안의 명령어들은 독립적으로 실행되어서 다음에 실행되는 명령에 영향을 미치지 않는다.

    Dockfile 구조
    #을 이용해서 주석처리
    "명령어 인자”의 형식
    명령어는 대소문자를 구분하지는 않으나 가급적 대문자를 이용하는것이 보기 좋음.
    각 명령어는 위에서부터 순서대로 실행됨
    첫번째 명령어는 반드시 ‘FROM'이어야 함. 

    ENV 명령어로 환경변수를 선언해서 사용할 수 있음.
    사용할때는 ‘$변수명’, ‘${변수명}’ 형식으로 사용함.
    예제
    FROM busybox
    ENV foo /bar
    WORKDIR ${foo} # WORKDIR /bar
    ADD . $foo # ADD . /bar
    COPY \$foo /quux # COPY $foo /quux

    환경변수를 이용가능한 명령어들
    ENV, ADD, COPY, WORKDIR, EXPOSE, VOLUME, USER

    명령어 설명
    FROM <image>
    FROM <image>:<tag>
    Dockerfile에서 사용되는 기본 이미지를 설정함.
    항상 Dockerfile의 가장 처음에 와야함.
    tag가 없으면 기본으로 latest를 이용함.

    MAINTAINER <name>
    이미지를 만든 사람을 명시함.

    RUN <command>
    RUN [“executable”, “param1”, “param2”]
    현재 이미지의 최상단 레이어에서 명령어(command)를 실행하고 결과를 커밋(commit)함.
    커밋된 이미지는 Dockerfile의 다음 단계에 이용됨.

    CMD ["executable","param1","param2"]
    CMD ["param1","param2"]
    CMD command param1 param2
    컨테이너에서 실행할 명령어. 
    하나의 Dockerfile에서 한번만 사용할 수 있는 명령이고, 여러개가 있을 경우에는 가장 마지막에 있는 CMD만 실행됨.

    EXPOSE <port> [<port>...]
    컨테이너가 실행중에 열리는 포트를 명시

    ENV <key> <value>
    ENV <key>=<value>
    환경부 <key>에 값인 <value>를 할당.

    ADD <src>... <dest>
    <src>에 있는 파일, 디렉토리, 원격 URL를 <dest>에 명시된 컨테이너의 파일시스템으로 복사한다.
    <src>는 docker build 에서 명시한 경로의 하위여야 함. 
    <dest>는 절대경로여야 함.

    COPY <src>... <dest>
    <src>에 있는 파일이나 디렉토리를 컨테이너의 <dest> 경로에 복사한다.
    <src>는 docker build 에서 명시한 경로의 하위여야 함. 
    <dest>는 절대경로여야 함.

    ENTRYPOINT ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2
    ENTRYPOINT를 이용해서 컨테이너를 실행가능한 형태로 만들수 있다.

    VOLUME ["/data"]
    지정된 이름으로 마운트 지점을 생성한다.

    USER daemon
    이미지를 실행할때 사용할 사용자명이나 UID를 지정한다.

    WORKDIR /path/to/workdir
    RUN, CMD, ENTRYPOINT 명령어가 실행되는 작업 디렉토리를 설정한다.

    ONBUILD [INSTRUCTION]
    현재 이미지가 나중에 다른 빌드의 기본 이미지로 사용될때, 그때 이 이미지에 실행될 트리거 명령을 추가한다. 

    Dockerfile 예제

    # Nginx
    #
    # VERSION 0.0.1

    FROM ubuntu
    MAINTAINER Victor Vieux <victor@docker.com>

    RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

    # Firefox over VNC
    #
    # VERSION 0.3

    FROM ubuntu

    # ‘fake’ 디스플레이와 파이어폭스를 만들기위해 vnc, xvfb 설치
    RUN apt-get update && apt-get install -y x11vnc xvfb firefox
    RUN mkdir ~/.vnc
    # 패스워드 설정
    RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
    # 파이어폭스 자동시작
    RUN bash -c 'echo "firefox" >> /.bashrc'

    EXPOSE 5900
    CMD ["x11vnc", "-forever", "-usepw", "-create"]

    # 다중 이미지 예제
    #
    # VERSION 0.1

    FROM ubuntu
    RUN echo foo > bar
    # 출력은 다음과 같다. ===> 907ad6c2736f

    FROM ubuntu
    RUN echo moo > oink
    # 출력은 다음과 같다.===> 695d7793cbe4

    # /bar를 가진 907ad6c2736f, /olink를 가진 695d7793cbe4 2개의 이미지가 생성됨.


    참고



    반응형

    'Cloud' 카테고리의 다른 글

    trove 개념 잡기  (0) 2015.02.25
    openstack 개념잡기  (0) 2015.02.23
    내가 만든 소스를 포함해서 docker 이미지 빌드하기  (0) 2015.01.30
    간단한 docker 명령어들  (0) 2015.01.26
    맥 os x에 docker 설치하기  (0) 2015.01.23

    댓글

Designed by Tistory.