网站建设工作室图片,怎么阻止网站,优设网介绍,创造自己的网站docker commit 也可以用来构建镜像#xff0c;但是并不推荐。相反#xff0c;更推荐使用dockerfile与docker build命令来构建镜像#xff0c;Dockerfile使用基本的基于DSL(Domain Specific Language)语法的指令来构建Docker镜像。Dockerfile构建镜像更具备可重复性、透明性以…
docker commit 也可以用来构建镜像但是并不推荐。相反更推荐使用dockerfile与docker build命令来构建镜像Dockerfile使用基本的基于DSL(Domain Specific Language)语法的指令来构建Docker镜像。Dockerfile构建镜像更具备可重复性、透明性以及幂等性。
指令介绍
FROM
MAINTAINER
介绍镜像作者
MAINTAINER Sajor sajorfoxmail.com
RUN
每条RUN指令都会创建一个新的镜像层如果该指令执行成功就会将此镜像层提交之后继续执行Dockerfile中的下一条指令。
默认情况下RUN指令会在shell里使用命令包装器 /bin/sh -c 来执行。如果是不支持shell的平台也可以使用exec格式的RUN指令
# 默认
RUN apt-get update apt-get install -y nginx
# exec格式
RUN [apt-get, install, -y, nginx]CMD
类似RUNRUN指令是指定镜像被构建时要运行的命令而CMD是指定容器被启动时要运行的命令。和docker run命令类似该指令会被docker run命令覆盖多条CMD指令也只会执行最后一条。
# 和RUN指令一样推荐用数组方式
CMD [/bin/bash]# 会被此命令中的/bin/ps覆盖
docker run -it sajor/test /bin/ps ENTRYPOINT
与CMD指令也很类似。因为CMD指令会被docker run命令覆盖但此命令不会而且docker run命令中指定的任何参数都会被当作参数再次传递给ENTRYPOINT指令中指定的命令。
ENTRYPOINT [/usr/sbin/nginx]
# 可和ENTRYPOINT命令结合
docker run -it sajor/test -g daemon off;也可以和CMD命令结合使用
ENTRYPOINT [/usr/sbin/nginx]
CMD [-h]
# 可和ENTRYPOINT命令结合若不指定参数则默认-h指定则后台启动
docker run -it sajor/test -g daemon off;WORKDIR
设置工作目录
ENV
设置环境变量
ENV TARGET_DIR /opt/app SOURCE_DIR /opt/soft
WORKDIR $TARGET_DIR进入容器后输入env命令也可查看所有环境变量
USER
指定用户名或UID以及组或GID或两者任意组合
USER user
USER user:group
USER uid:gidVOLUME
指定数据卷可以让我们将数据如源代码、数据库或者其他内容添加到镜像中而不是提交到镜像中。并且允许我们在多个容器间共享这些内容。
卷可以在容器间共享和重用对卷的修改是立即生效的对卷的修改不会对更新镜像产生影响卷会一直存在直到没有任何容器再使用它
# 基于此镜像创建的任何容器创建一个名为 /data 的挂载点
VOLUME [/data]
# 多个卷
VOLUME [/opt/project, /data]ADD
用于将构建环境下的文件和目录复制到镜像中
# 源文件位置和目标文件位置
ADD software.lic /opt/application/software.lic# 源也可以是个URL或构建上下文或者环境中文件名或目录
ADD http://wordpress.org/latest.zip /root/wordpress.zip# 源为压缩文件会自动解压如果已存在同名文件则不覆盖
ADD latest.tar.gz /var/www/wordpress/如果目标路径不存在则会自动创建 权限默认为755且UID与GID都为0。
注意ADD指令会使构建缓存失效。
COPY
和ADD类似单不做文件提取(extraction)和解压(decompression)的工作。
不能复制Dockerfile以外的文件。因为构建环境是上传到docker守护进程中复制是在docker守护进程中执行任何位于构建环境以外的东西是不可用的
# COPY指令的目的位置必须是容器内部的一个绝对路径。
COPY conf.d/ /etc/apache2/LABEL
用于为Docker镜像添加元数据。元数据以键值对形式展现。
防止不同的元数据指令创建过多镜像层建议将所有元数据都放入一行。可通过 docker inspect 来查看label信息。
LABEL version1.0 typeData Center roleWeb ServerARG
ARG指令用于定义 docker build 命令运行时传递的变量。
ARG var
ARG webapp_useruser和此命令搭配使用 docker build --build-arg var1234 -t sajor/webapp . var值设置为1234。而webapp_user仍为默认的user。
只有预先在Dockerfile中定义后才可以使用docker build命令指定Docker预定义了一组ARG变量可以在构建时直接使用。而不必再到Dockerfile中定义。 预定义ARG变量
# 预定义ARG变量
HTTP_PROXY
HTTPS_PROXY
FTP_PROXY
NO_PROXY
ALL_PROXY
http_proxy
https_proxy
ftp_proxy
no_proxy
all_proxy切记不要使用ARG来传递证书或密钥之类的机密数据。在构建过程中或构建历史中会被暴露。
ONBUILD
该指令可为镜像添加触发器当一个镜像被用作其他镜像的基础镜像时该镜像中的触发器被执行。
ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src make 可通过inspect命令查看。OnBuild。
ONBUILD一般在子镜像的FROM后执行只会触发子镜像孙子镜像不会触发。
FROM、MAINTAINER和ONBUILD不能用于ONBUILD
EXPOSE
端口暴露。
EXPOSE 80STOPSIGNAL
用于设置停止容器时发送什么系统调用信号给容器。必须是内核系统调用表中合法的数如9.或者SIGNAME格式中的信号名称如SIGKILL。 构建
docker build -t gitgithub.com:xxx/xxx -f /path/to/dockerfile #构建镜像 --no-cache 略过缓存功能-f 文件名称可以不是dockerfile-f可指定Dockerfile路径--build-arg # 给ARG传递参数使用docker history xxxx #查看镜像构建层 可以直接从Git仓库中
安全测评root权限 Dockerfile Misconfiguration: Default User Privilege
RUN pip install flask \groupadd -r flask useradd -r -g flask flask \mkdir /src \chown -R flask:flask /srcUSER flaskCOPY app.py /src/app.pyWORKDIR /srcalpine 中命令不一样 How do I add a user when Im using Alpine as a base image?
# 使用非root账户启动
RUN addgroup -S dispatch adduser -S dispatch -G dispatch \mkdir /app \chown -R dispatch:dispatch /app \echo Asia/shanghai /etc/timezone \USER dispatchWORKDIR /appDockerfile 技巧——尽量使用非root用户
Dockerfile的最佳实践