文章目录
  1. 1. 使用
  2. 2. 格式
    1. 2.1. 注释
    2. 2.2. .dockerignore file
    3. 2.3. FROM
    4. 2.4. MAINTAINER
    5. 2.5. RUN
    6. 2.6. CMD
    7. 2.7. EXPOSE
    8. 2.8. ENV
    9. 2.9. ADD
    10. 2.10. COPY
    11. 2.11. ENTRYPOINT
    12. 2.12. VOLUME
    13. 2.13. USER
    14. 2.14. WORKDIR
    15. 2.15. ONBUILD
  3. 3. 例子

Docker可以通过读取Dockerfile文件中的指令来创建images。Dockerfile是一个包含所有构建一个images所需要的指令,通过调用docker build来创建Dockerfile。

使用

调用docker build 指令并加上Dockerfile的文件路径(比如 . )来构建image

sudo docker build .

还可以为images指定tag和repository

sudo docker build -t shykes/myapp .

格式

所有的 Dockerfile 命令格式都是:

INSTRUCTION arguments

虽然指令忽略大小写,但是建议使用大写。

注释

# Comment

.dockerignore file

如果在repository中存在.dockerignore文件,可以再构建的时候忽略一些文件。比如:

$ sudo docker build .
Uploading context 18.829 MB
Uploading context
Step 0 : FROM busybox
 ---> 769b9341d937
Step 1 : CMD echo Hello World
 ---> Using cache
 ---> 99cc1ad10469
Successfully built 99cc1ad10469
$ echo ".git" > .dockerignore
$ sudo docker build .
Uploading context  6.76 MB
Uploading context
Step 0 : FROM busybox
 ---> 769b9341d937
Step 1 : CMD echo Hello World
 ---> Using cache
 ---> 99cc1ad10469
Successfully built 99cc1ad10469

可以发现前后image大小的变化。

FROM

FROM <image>

OR

FROM <image>:<tag>

设置基本的镜像,为后续的命令使用,所以必须作为Dockerfile的第一条非注释指令。

如果没有指定 tag ,则默认tag是latest

MAINTAINER

MAINTAINER <name>

指定镜像创建者。

RUN

RUN <command> (the command is run in a shell - /bin/sh -c - shell form)
RUN ["executable", "param1", "param2"] (exec form)

RUN指令执行的时候是在现有image的基础上加一层,然后再commit结果,作为新的image。

RUN指令会有缓存,下次build的时候会直接使用缓存。除非在build的时候使用–no-cache,比如:

docker build --no-cache.

但是缓存会被ADD指令清除。

CMD

三种形式:

CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

只能有一个CMD指令,多个只有最后一个有效。

CMD主要用于container时启动指定的服务,当docker run command的命令匹配到CMD command时,会替换CMD执行的命令。

CMD在build的时候什么都不会做做,它只是指定image需要执行的命令。

EXPOSE

EXPOSE <port> [<port>...]

通知container监听特定的端口,这个端口主要用在不同的container之间link,如果主机想要访问,需要使用-p来暴露接口给host。

ENV

ENV <key> <value>

用于设置环境变量,设置了后,后续的RUN命令都可以使用。

可以使用

docker inspect

指令查看环境变量。也可以使用指令

docker run --env <key>=<value>

来改变环境变量。

ADD

ADD <src>... <dest>

<src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url,路径也可以有通配符
<dest> 是container中的绝对路径

将文件拷贝到container的文件系统对应的路径

COPY

COPY <src>... <dest>

类似于ADD,区别在于当文档时压缩文档,ADD会帮忙解压,但是COPY不会。

ENTRYPOINT

ENTRYPOINT ["executable", "param1", "param2"] (exec form, the preferred form)
ENTRYPOINT command param1 param2 (shell form)

container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条

ENTRYPOINT没有CMD的可替换特性

VOLUME

VOLUME ["/data"]

创建一个挂载点用于共享目录

USER

USER daemon

指定运行image或者任何RUN指令的用户

WORKDIR

WORKDIR /path/to/workdir

配置RUN, CMD, ENTRYPOINT 命令设置当前工作路径。

可以设置多次,如果是相对路径,则相对前一个 WORKDIR 命令。比如

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

是在/a/b/c下执行pwd。

ONBUILD

ONBUILD [INSTRUCTION]

ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

例子

# 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

# Install vnc, xvfb in order to create a 'fake' display and firefox
RUN apt-get update && apt-get install -y x11vnc xvfb firefox
RUN mkdir /.vnc
# Setup a password
RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
# Autostart firefox (might not be the best way, but it does the trick)
RUN bash -c 'echo "firefox" >> /.bashrc'

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

# Multiple images example
#
# VERSION               0.1

FROM ubuntu
RUN echo foo > bar
# Will output something like ===> 907ad6c2736f

FROM ubuntu
RUN echo moo > oink
# Will output something like ===> 695d7793cbe4

# You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
# /oink.
文章目录
  1. 1. 使用
  2. 2. 格式
    1. 2.1. 注释
    2. 2.2. .dockerignore file
    3. 2.3. FROM
    4. 2.4. MAINTAINER
    5. 2.5. RUN
    6. 2.6. CMD
    7. 2.7. EXPOSE
    8. 2.8. ENV
    9. 2.9. ADD
    10. 2.10. COPY
    11. 2.11. ENTRYPOINT
    12. 2.12. VOLUME
    13. 2.13. USER
    14. 2.14. WORKDIR
    15. 2.15. ONBUILD
  3. 3. 例子