1. .dockerignore
- docker 이미지 빌드시 무시할 파일들을 입력합니다.
.gitignore
와 유사합니다.
2. FROM
- 어떤 이미지를 기반으로 생성할지 기록합니다. 부모이미지가 됩니다.
- 이미지 이름만 입력할 수도, 태그와 함께 입력할 수도 있습니다.
- FROM은 항상 설정해야하고, 맨 첫 줄에 설정해야합니다.
- FROM에 설정한 이미지가 로컬에 있으면 로컬을 우선 적용하고, 없으면 Docker Hub에서 받아 옵니다.
- FROM은 여러개 설정할 수 있습니다.
FROM ubuntu
FROM ubuntu:14.07
3. MAINTAINER
- MAINTAINER는 Dockerfile 작성자를 입력합니다. 생략 가능
MAINTAINER Suwoni <[email protected]>
4. WORKDIR
- WORKDIR은 RUN과 CMD등의 Dockerfile에 사용되는 이미지 내부에서 실행할 명령어의 실행 디렉터리를 설정합니다.
WORKDIR /app/src
5. ADD
- ADD는 파일을 이미지에 추가
- 압축파일인 경우 해제 후 추가(tar.gz의 경우 gz만 해제하고 추가합니다.)
- 인터넷 경로를 입력할 수 있습니다.
ADD test.sh /entrypoint.sh
ADD . /src-dir
ADD test.zip /test
ADD http://blog.news.com/a.txt /b.txt
6. COPY
- ADD 와 비슷하게 파일을 이미지에 추가
- 압축파일을 해제 하지 않음
- URL 사용할 수 없음
7. RUN
- FROM에서 설정한 이미지 위에서 스크립트 혹은 명령을 실행
- 쉘로 실행하기(이미지에 /bin/sh 실행파일이 있는 경우)
RUN apt-get install -y nginx
RUN git clone https://github.com/docker/docker.git
- 쉘없이 바로 실행하기(이미지에 /bin/sh 실행파일이 없는 경우)
RUN ["apt-get", "install", "-y", "nginx"]
RUN ["git", "clone", "https://github.com/docker/docker.git"]
8. CMD
- 이미지가 컨테이너로 실행이 시작될 때 실행(docker run 또는 docker start 시)
-
Dockerfile에서 한번 만 사용할 수 있음
- 쉘로 실행하기(이미지에 /bin/sh 실행파일이 있는 경우)
CMD git clone https://github.com/docker/docker.git
- 쉘없이 바로 실행하기(이미지에 /bin/sh 실행파일이 없는 경우)
CMD ["git", "clone", "https://github.com/docker/docker.git"]
9. ENTRYPOINT
- CMD 와 마찬가지로 이미지가 컨테이너로 실행이 시작될 때 실행(docker run 또는 docker start 시)
- Dockerfile에서 한번 만 사용할 수 있음
- 실행 형식은 CMD와 동일
10. ENTRYPOINT와 CMD가 동시에 사용되는 경우
- CMD는 ENTRYPOINT에 매개 변수만 전달하는 역할을 합니다.
ENTRYPOINT ["echo"]
CMD ["hello docker"]
11. CMD와 ENTRYPOINT 차이
- CMD는
docker run
실행 시 바로 명령어를 입력하는 경우 Dockerfile에 CMD는 무시됩니다.
FROM ubuntu
CMD ["echo", "Hello, Docker"]
$ docker run ubuntuimage echo world
world
- ENTRYPOINT의 경우 실행시
--entrypoint
옵션을 줄 경우 무시됩니다.
$ docker run --entrypoint="cat" 이미지명
12. EXPOSE
- 노출시킬 port를 설정
docker run
명령어의--expose
옵션과 동일 - 한꺼번에 작성 또는 여러줄 작성 가능
EXPOSE 80 443 21
EXPOSE 80
EXPOSE 443
EXPOSE 21
13. ENV
- 환경변수 설정
- 환경변수는 RUN, CMD, ENTRYPOINT에서도 적용가능
ENV ENV_VARIABLE aaaa
CMD echo $ENV_VARIABLE
- ENV 에서 설정한 값을
docker run
시에 변경할 수 있습니다.
$ docker run -e ENV_VARIABLE=bbbb 이미지명
bbbb
- VOLUME
- 디렉터리 내용을 컨테이너에 저장하지 않고 호스트에 저장하도록 설정
VOLUME /data
VOLUME ["data", "/var/log/hello"]
-
위 처럼 설정할 경우 호스트(이미지를 실행한 os환경)에서
/var/lib/docker/volumes
아래의 임의의 난수로 저장된 디렉토리 안에 데이터가 들어가므로 좋은 방법이 아니다. -
docker run -v <호스트디렉토리>:<컨테이너디렉토리>
형식으로 이미지 내부디렉토리를 호스트 디렉토리로 연결할 수 있다.
- ONBUILD
- 생성한 이미지를 기반으로 다른 이미지가 생성될 때 명령을 실행