렴소네 블로그

docker file 작성법 본문

Docker

docker file 작성법

렴소 2016. 12. 19. 18:44

이미지 생성할때는 Dockerfile이 있는 디렉터리에서 docker build 명령을 사용.

Dockerfile은 <명령> <매개 변수> 형식으로 작성.

#은 주석, 명령은 대소문자 구분하지 않지만 보통 대문자로 작성. 각 명령은 독립적으로 실행.

--tag 또는 -t 옵션으로 이미지 이름을 설정할수 있고, Docker Hub에 이미지를 올리려면 /shin/image 처럼 /앞에 사용자명을 붙이면 된다.

이미지 이름을 설정하지 않아도 이미지는 설정되지만, 이때 이미지를 사용하려면 이미지ID를 이용해야한다. 


명령

  1. .dockerignore
    Dockerfile과 같은 디렉터리에 있는 모든 파일을 Context라고 하는데 그중 이미지를 생성할때 필요없는 파일들은 .dockerignore파일에 작성하면 된다.
    Docker는 Go언어로 작성되어있기때문에 Go문법에 따라 작성.
  2. FROM
    어떤 이미지를 기반으로 이미지를 생성할지 결정. Dockerfile은 이미지를 생성할 때 기존의 이미지를 기반으로 하기때문에 반드시 작성해줘야한다.
    이미지 이름만 작성하거나 이미지 이름과 태그를 설정할 수 있는데 태그를 제외하면 lates를 사용
    FROM은 생략할 수 없고 맨 처음에 와야한다. 이미지를 생성할때 FROM에 설정한 이미지가 로컬에 있으면 바로 사용하고, 없으면 Docker Hub에서 받아온다.
    FROM <이미지> , FROM <이미지>:<태그>
  3. MAINTAINER
    이미지를 생성한 사람의 정보이며, 형식은 자유
    MAINTAINER <작성자 정보>
  4. RUN
    FROM 에서 설정한 이미지 위에 스크립트 혹은 명령 실행하다.
    RUN으로 실행한 결과가 새 이미지로 생성되고 실행내역을 이미지의 히스토리에 기록한다.
    RUN <명령> 형식으로 셸 스크립트 구문을 사용할 수 있고 FROM으로 설정한 이미지에 포함된 /bin/sh 실행 파일을 사용하며 /bin/sh 실행파일이 없으면 사용불가
    RUN ["<실행 파일>", "<매개 변수1>", 
    "<매개 변수2>"] 형식으로 사용하면 셸 없이 바로 실행하며 배열형태로 설정한다.
    RUN으로 실행한 결과는 캐시되며 다음 빌드때 재사용, 캐시된 결과를 사용하지 않으려면 docker build 명령에서 --no-cache 옵션을 사용한다.
  5. CMD
    컨테이너가 시작 되었을때 스크립트 혹은 명령 실행된다.(docker run이나 docker start 명령 실행될때 실행)
    CMD는 dockerfile에서 한번만 사용가능하다.
    CMD <명령> 셸(/bin/sh( 명령,
    CMD ["<실행 파일>", "<매개 변수1>", "<매개 변수2>"]
    ENTRYPOINT를 사용하는 경우
    ENTRYPOINT ["echo"]
    CMD ["hello"]
    CMD ["<매개 변수1>", "<매개 변수2>"] 형식이며 Dockerfile에 ENTRYPOINT가 있으면 CMD는 매개변수만 전달하는 역할만 하게되어 독자적으로 파일을 실행 할 수 없게된다.
  6. ENTRYPOINT
     기본적으로 CMD와 기능과 동일하다 하지만 docker run 명령에서 동작하는 방식이 다르다.
    docker run 명령에서 실행할 파일을 설정하면 ENTRYPOINT는 무시되는게 아니고 실행할 파일 설정 자체를 매개변수로 받아서 처리한다. 
    docker run 명령에서 --entrypoint 옵션을 사용할 경우 Dockerfile에서 설정한 ENTRYPOINT는 무시된다.
  7. EXPOSE
    호스트와 연결할 포트 번호를 설정한다
    EXPOSE <포트 번호> 이며 동시에 두개 이상 설정 가능하다.
    포트를 외부에 노출하려면 docker run 명령의 -p 옵션을 사용해야한다.
  8. ENV
    환경 변수를 설정한다.
    ENV로 설정한 환경 변수는 RUN, CMD, ENTRYPOINT에 적용된다.
    ENV <환경 변수> <값> 형식이고 $를 이용해서 환경변수를 사용한다.
    docker run 에서 -e <환경 변수>=<값> 형식으로 사용할 수 있고 여러번 사용할 수 있다.
  9. ADD
    파일에 이미지를 추가한다.
    ADD <복사할 파일 경로> <이미지에서 파일이 위치할 경로>
    <복사할 파일 경로> 규칙
    컨텍스트 아래를 기준으로 하며 컨텍스트 바깥의 파일, 디렉터리나 절대경로는 사용할 수 없다.
    파일뿐만 아니라 디렉터리도 설정할 수 있고, 디렉터리를 지정하면 디렉터리의 모든파일을 복사한다. 와일드 카드를 사용하여 특정 파일만 복사할 수 있다.
    인터넷에 있는 파일의 URL을 설정 할 수 있다.
    <이미지에서 파일이 위치할 경로>의 마지막에 /가 있으면 디레ㄱ터리가 생성되고 파일은 그 아래에 복사된다.
    로컬에 있는 압축 파일(tar.gz, tar.bz2, tar.xz)은 압축을 해제하고 tar를 풀어서 추가된다. 하지만 인터넷 파일 URL은 압축만 해제한 뒤 tar 파일이 그대로 추가된다.
    <이미지에서 파일이 위치할 경로는 항상 절대 경로로 설정해야한다.
    .dockerignore 파일에서 설정한 파일과 디렉터리는 제외된다.
    ADD로 추가되는 파일은 소유자(UID) 0, 그룹(GID) 0으로 설정되고 권한은 기존 파일의 권하을 따르며 URL로 추가하면 권한은 600으로 설정된다.
  10. COPY
    ADD와 마찬가지로 파일을 이미지에 추가한다.
    하지만 ADD와 달리 COPY는 압축파일을 추가할때 압축을 해제하지 않고 파일URL을 사용할 수 없다.
  11. VOLUME
    디렉터리의 내용을 컨테이너에 저장하지 않고 호스트에 저장한다.
    VOLUME <컨테이너 디렉터리> 또는 VOLUME ["<컨테이너 디렉터리1>","<컨테이너 디렉터리2>"]처럼 배열형식으로 지정가능하다.
    데이터 볼륨을 호스트의 특정 볼륨과 연결하려면 docker run 명령에서 -v 옵션을 사용한다
    -v <호스트 디렉터리>:<컨테이너 디렉터리>
  12. USER
    명령을 실행할 사용자 계정을 설정한다. RUN, CMD, ENTRYPOINT에 적용된다.
    중간에 다른 사용자를 설정하여 사용자를 바꿀 수 있다.
    USER <계정 사용자명>
  13. WORKDIR
    RUN, CMD, ENTRYPOINT의 명령이 실행될 디렉터리를 설정한다.
    WORKDIR 뒤에 오는 모든 RUN, CMD, ENTRYPOINT에 적용되며, 중간에 다른 디렉터리로 변경 가능
    WORKDIR 은 절대경로, 상대경로 둘다 사용가능하다.
    WORKDIR <경로>
  14. ONBUILD
    생성한 이미지를 기반으로 다른 이미지가 생성될 때 명령을 실행한다. 최초의 ONBUILD에서는 아무런 명령도 실행하지 않고 다음번에 이미지가 FROM 으로 사용될 때 실행할 명령을 예약하는 기능.
    ONBILD <Dockerfile 명령> <Dockerfile 명령의 매개 변수>


'Docker' 카테고리의 다른 글

Docker 활용을 위해 추가적으로 공부할 것들  (0) 2016.12.27
Docker 환경 변수  (0) 2016.12.22
Docker 옵션과 명령어  (0) 2016.12.22
Docker란  (0) 2016.12.21