# escape=\ (backslash) # This dockerfile uses 七he ubuntu:xeniel image # VERS工ON 2 - EDITION 1 # Author: docker_user # Command format: Ins七ruction [arguments / command] ? # Base image to use, this must be set as the first line FROM ubuntu:xeniel ? # Maintainer: docker_user <docker_user at email.com> ( @docker_user ) LABEL maintainer docker user<docker user@email.com> # Commands to upda七e the image RUN echo "deb http://archive.ubuntu.com/ubuntu/ xeniel main universe" apt/sources.list >> /etc/apt/sources.list ? RUN apt-getupdate && apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf # Commands when creating a new container CMD /usr/sbin/nginx
首行可以通过注释来指定解析器命令,后续通过注释说明镜像的相关信息。主体部分首先使用FROM指令说明所基于的镜像名称,接下来一般是使用LABEL指令说明维护者信息。后面则是镜像操作指令,例如RUN指令将对镜像执行跟随的命令。每运行一条RUN指令,镜像添加新的一层,并提交。最后是CMD指令,来指定运行容器时的操作命令。
例如:
FROM debain:jessie ? LABEL maintainer docker_user<docker_user@email.com> ? ENV NGINX_VERSION 1.10.1-1-jessie ? RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ && echo "deb http://ngix.org/packages/debian/ jessie ngix" >> /etc/apt/sources.list && apt-get update && apt-get install --no-install-recommends --no-install-suggest -y ca-certificates nginx=${NGINX_VERSION} nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-perl nginx-module-njs gettext-base && rm -rf /var/lib/apt/lists/* ? # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log ? EXPOSE 80 443 CMD ["nginx","-g","daemon off;"]
ARG
定义创建镜像过程中使用的变量
FROM
指定所创建镜像的基础镜像
LABEL
为生成的镜像添加元数据标签信息
EXPOSE
声明镜像内服务监听的端口
ENV
指定环境变量
ENTRYPOINT
指定镜像的默认入口命令
VOLUME
创建一个数据卷挂载点
USER
指定运行容器时的用户名或UID
WORKDIR
配置工作目录
ONBUILD
创建子镜像时指定自动执行的操作指令
STOPSIGNAL
指定退出的信号值
HEALTHCHECK
配置所启动容器如何进行健康检查
SHELL
指定默认shell类型
RUN
运行指定命令
CMD
启动容器时指定默认执行的命令
ADD
添加内容到镜像
COPY
复制内容到镜像
ARG
定义创建镜像过程中使用的变量。
格式:ARG <name>[=<default value>]
在执行docker build
时,可以通过-build-arg[=]
来为变量赋值。当镜像编译成功后,ARG指令的变量将不再存在(ENV指定的变量将在镜像中保留)。
Docker内置了一些镜像创建变量,用户可以直接使用而无须声明,包括(不区分大小写)HTTP_PROXY、HTTPS_PROXY、FTP_PROXY、NO_PROXY。
FROM
指定所创建镜像的基础镜像。
格式:FROM <image> [AS <name>]
或 FROM <image>:<tag> [AS <name>]
或 FROM <image>@<digest> [AS <name>]
。
任何Dockerfile中的第一条指令必须为FROM
指令。并且。如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM
指令(每个镜像一次)
为了保证镜像精简,可以选用体积较小的镜像如Alpine
或Debian
作为基础镜像,例如:
ARG VERSION=9.3
FROM debian:${VERSION}
LABEL
LABEL指令可以为生成的镜像添加元数据标签信息。这些信息可以用来辅助过滤出特定镜像。
格式:LABEL <key>=<value> <key>=<value>...
。
例如:
LABEL version="1.0.0-rc3"
LABEL author="yeasy@github" date="2020-01-01"
LABEL description="This text illustrates\
that label-value can span multiple lines."
EXPOSE
声明镜像内服务监听的端口。
格式为:EXPOSE <port> [<port>/<protocol>...]
例如:
EXPOSE 22 80 8443
注意该指令只是起到声明作用,并不会自动完成端口映射。
如果要映射端口出来,在启动容器时可以使用-P
参数(Docker主机会自动分配一个宿主主机的临时端口)或-p HOST_PORT:CONTAINER_PORT
参数(具体指定所映射的本地端口)。
ENV
指定环境变量,在镜像生成过程中会被后续RUN指令使用,在镜像启动的容器中也会存在。、
ENTRYPOINT
VOLUME
USER
WORKDIR
ONBUILD
STOPSIGNAL
HEALTHCHECK
SHELL
原文:https://www.cnblogs.com/ZSMblog/p/10684226.html