Dockerfile¶
Dockerfile包含创建镜像所需要的全部指令。基于在Dockerfile中的指令,我们可以使用Docker build命令来创建镜像。通过减少镜像和容器的创建过程来简化部署。
Dockerfile支持的语法命令如下:
INSTRUCTION argument指令不区分大小写,但是命名约定为全部大写。
FROM¶
所有Dockerfile必须以
FROM
命令开始。FROM
命令指定镜像基于哪个基础镜像创建。接下来的命令也会基于这个基础镜像。可以使用多次FROM命令,表示会创建多个镜像。FROM <image> FROM <image>:<tag> FROM <image>@<digest>例如
FROM ubuntu
这样的指令告诉我们,新的镜像将基于Ubuntu的景象来构建。
MAINTAINER¶
设置该镜像的作者:
MAINTAINER <author name>
RUN¶
在shell或exec环境下执行的命令。会在新创建的镜像上添加新的层面,接下来提交的镜像用在Dockerfile的下一条指令中。
RUN <command> shell form RUN ["executable", "param1", "param2"] exec formexec形式没有变量扩展,如
RUN ["echo", "$HOME"]
不会展开 $HOME,需要改成RUN ["sh", "-c", "echo", "$HOME"]
ADD¶
复制文件指令,将URL或者启动配置上下文中的一个文件复制到容器内的位置:
ADD <src> <destination>
CMD¶
提供了容器默认的执行命令。Dockerfile只允许使用一次CMD指令,使用多个CMD会抵消之前所有的指令,只有最后一个指令失效:
CMD ["executable", "param1", "param2"] CMD ["param1", "param2"] CMD command param1 param2
Note
CMD [“executable”, “param1”, “param2”] 是推荐使用的格式。exec form被解析成JSON数组,因此不能使用单引号,要使用双引号。
EXPOSE¶
指定容器在运行时监听的端口
EXPOSE <port>
ENTRYPOINT¶
配置给容器一个可执行的命令,这意味着每次使用镜像创建容器时一个特定的应用程序可以被设置为默认程序。类似与CMD,Docker只允许一个ENTRYPOINT,多个ENTRYPOINT会抵消之前所有的指令。
ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2
WORKDIR¶
指定RUN、CMD和ENTRYPOINT命令的工作目录。
WORKDIR /path/to/workdir
ENV¶
设置环境变量,使用键值对,增加运行程序的灵活性。
ENV <key> <value>
USER¶
镜像正在运行时设置一个UID。
USER <uid>
VOLUME¶
授权容器访问主机上的目录。
VOLUME ["/data"]
example¶
# Nginx
#
# VERSION 0.0.1
FROM ubuntu
MAINTAINER Victor Vieux <victor@docker.com>
LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
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.
See also