文章目录
0. 示例
# 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. 指令
- FROM 指定所创建镜像的基础镜像
- MAINTAINER 指定维护者信息
- RUN 运行命令
- CMD 指定启动容器时默认执行的命令
- LABEL 指定生成镜像的元数据标签信息
- EXPOSE 声明镜像内服务所监听的端口
- ENV 指定环境变量
- ADD 复制文件到容器中,tar会自动解压
- COPY 复制文件到容器中,tar会自动解压
- ENTRYPOINT 指定镜像的默认入口
- VOLUME 创建数据卷挂载点
- USER 指定运行容器时的用户名或UID
- WORKDIR 配置工作目录
- ARG 指定镜像内使用的参数(例如版本号信息等)
- ONBUILD 配置所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作命令
- STOPSINGAL 容器退出的信号值
- HEALTHCHECK 如何进行健康检查
- SHELL 指定使用shell时的默认shell类型
1.1. FROM
FROM ubuntu
指定创建镜像的基础镜像,如果本地不存在,默认去仓库下载
格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像
1.2. MAINTAINER
MAINTAINER image_creator@docker.com
指定维护者信息,该信息会写入镜像Author属性域中
1.3. RUN
RUN命令支持两种格式
RUN <command>
RUN ["executable","param1","param2"]
1.3.1. RUN <command>
RUN apt-get update \
&& apt-get install -y inotify-tools nginx apache2 openssh-server
该格式默认在shell终端中运行命令,即 /bin/sh -c
1.3.2. RUN ["executable","param1","param2"]
RUN ["/bin/bash","-c","echo hello"]
该格式使用exec执行
该指令会被解析成json数组,所以必须使用双引号
1.4. CMD
CMD支持三种格式,每个 Dockerfile 只能有一条CMD命令。如果有多条,只有最后一条会被执行。
CMD ["EXECUTABLE","param1","param2"]
CMD command param1 param2
CMD ["param1","param2"]
1.4.1.CMD ["EXECUTABLE","param1","param2"]
使用exec执行,推荐使用
1.4.2. CMD command param1 param2
在/bin/sh
中执行,提供给需要交互的应用
1.4.3. CMD ["param1","param2"]
提供给ENTRYPOINT的默认参数
1.5. LABEL
LABEL用来生成镜像的元数据标签信息,可以使用多个
LABEL version="1.0"
1.6. EXPOSE
用于声明容器内服务监听的端口,只声明不会完成端口映射
EXPOSE 80 443 60808
1.7. ENV
指定环境变量,在镜像生成过程中会被RUN指令使用,在镜像启动的容器中也会存在。
ENV JAVA_HOME /usr/local/java
1.8. ADD
该名命令用于将指定目录中的内容复制到容器中的路径下。
ADD <src> <dest>
- 可以是相对于dockerFile所在目录的相对路径,目录不存在时会自动创建
- 可以是镜像内的绝对路径,或者相对于工作目录的相对路径
- 路径支持正则表达式
1.9. COPY
该名命令用于将指定目录中的内容复制到容器中的路径下。
COPY <src> <dest>
- 可以是相对于dockerFile所在目录的相对路径,也可以是URL,还可以是tar文件(会自动解压)
- 可以是镜像内的绝对路径,或者相对于工作目录的相对路径
- 路径支持正则表达式
1.10. ENTRYPOINT
指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有传入值作为该命令的参数。
支持两种格式
- ENTRYPOINT [“executable” ,“param1”, “param2”] (exec调用执行)
- ENTRYPOINT command param1 param2 (shell中执行)
每个DockerFile中只能有一个ENTRYPOINT,当指定多个时,只有最后一个有效
且会被 --entrypoint参数覆盖掉
1.11. VOLUME
创建一个数据卷挂载点
VOLUME ["/data"]
1.12. USER
指定运行容器时的用户名或UID,后续的RUN指令也会使用该用户。
USER daemon
1.13. WORKDIR
为 RUN CMD ENTRYPOINT配置工作目录
WORKDIR /path/to/workdir
1.14. ARG
指定一些镜像内使用的参数(例如版本号等信息),这些参数在执行docker build命令时才会以 --build-arg=的方式传入。
ARG<name>[=<default value>]
1.15. ONBUILD
配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作,所执行的创建操作指令
ONBUILD ADD ./app/src
当我们基于当前镜像作为基础 FROM的时候会执行ONBUILD的命令
1.16. STOPSIGNAL
指定所创建镜像启动的容器接收退出的信号值
STOPSIGNAL signal
1.17. HEALTHCHECK
配置所启动容器如何进行健康检查。
HEALTHCHECK [OPTIONS] CMD command
如果返回0为不健康否则为健康
HEALTHCHECK NONE
禁止进行健康检查
OPTIONS
--interval=DURATION
默认30s 多久检查一次 单位秒--timeout=DURATION
默认30s 检查等待超时时间--retries=N
默认3 如果失败了,重试几次才最终确定失败
1.18. SHELL
指定其他命令使用shell时的默认shell类型
SHELL ["executable","parameters"]
默认值为["/bin/sh","-c"]
2. 构建镜像
去执行 docker build吧