Dockerfile详解

  

制作码头工人形象有两种方式:一是使用集装箱码头工人(码头工人保存container_name - o测试。焦油),再导出形象,而是使用Dockerfile,将所有动作导入到文件中,使用构建命令制作成镜像。
一、Dockerfile基本结构
一般的Dockerfile分为四个部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时的指令从nginx
: 1.13.5-alpine维护者SXY团队& lt; http://cywx.cn>#设置时区运行回声的亚洲/上海在/etc/时区参数SIBE_VERSION=0复制图片/文件/入口点。sh/usr/local/bin/运行chmod u + x/usr/local/bin/entrypoint。sh #更新支持压缩/解压缩,Bash运行apk——更新添加Zip解压Bash wget ENV WWW_TARGET/var/www/html//文件/mysite复制图像。模板/etc/nginx/conf.d/default.配置添加dist//tmp/运行mkdir - p $ {WWW_TARGET} \,,mv/tmp/ $ {WWW_TARGET} \,,rm射频/tmp/ ENV MGMT_API_URL http://192.168.3.223:19980 ENV MGMT_API_AUTHORIZATION d2ViX2FwcDpjaGFuZ2VpdA==cp/var/www/html/scripts/http/configuration运行。json/var/www/html/scripts/http/configuration.json。模板cp/var/www/html/scripts/http/configuration运行。json/var/www/html/scripts/http/configuration.json。template2 #转发请求和错误日志日志码头工人收集器运行mkdir - p/var/log/webui,,ln科幻/dev/stdout/var/log/webui/access.日志\,,ln科幻/dev/stderr/var/log/webui/error.日志公开80 443入口点(“/usr/地方/bin/entrypoint.sh"] CMD [“nginx",“-g",“守护进程;“]入口点中的信息(root@test - 227文件)#猫入口点。sh # !/bin/bash setup(){回声“配置1管理api url $ {MGMT_API_URL}“;猫/var/www/html/scripts/http/configuration.json。模板| \ sed“s http://192.168.3.223:19980 # # $ {MGMT_API_URL} # g"比;/var/www/html/scripts/http/configuration.json。template2猫/var/www/html/scripts/http/configuration.json。template2回声“配置2 $ {MGMT_API_AUTHORIZATION}“授权;猫/var/www/html/scripts/http/configuration.json。template2 | \ sed“年代# d2ViX2FwcDpjaGFuZ2VpdA==# $ {MGMT_API_AUTHORIZATION} # g"比;/var/www/html/scripts/http/configuration。json猫/var/www/html/scripts/http/configuration。json}设置执行“@"美元;
:指定基础镜像,要在哪个镜像建立
& lt; image>或者从& lt; image>: & lt; tag>
第一条指令必须为从指令

  

维护者:指定维护者信息
维护者& lt; name>

  

运行:在镜像中要执行的命令
& lt; command>或者运行(“executable",“param1",“param2"]
前者将壳终端中运行命令,即/bin/bash - c;后者则使用exec执行,指定使用其他终端可以通过第二种方式实现,例如运行(“/bin/bash",“-c",“回声hello"]

  

WORKDIR:指定当前工作目录,相当于cd
WORKDIR/路径//WORKDIR
为后续的运行CMD,入口点指令配置工作目录,可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径,例如
WORKDIR/
WORKDIR b
WORKDIR c
运行pwd
则最终的路径/a/b/c

  

暴露:指定容器需要被打开的端口
80
暴露告诉码头工人服务容器需要暴露的端口,但是目前只在容器中暴露,如果想要在节点进行暴露则需要- p 80:80,或者- p(主机将为其暴露一个随机端口)

  

ENV:定义环境变量
ENV & lt; key>& lt; value>
指定一个环境变量在容器中生成
ENV managementapi http://192.168.3.226

  

复制:复制本地dockerfile路径根目录下的文件到容器文件中
复制& lt; src>& lt; dest>

  

添加:相当于复制,但比复制功能强大
添加& lt; src>& lt; dest>
此命令也是将主机任何地方文件到容器文件中,但是可以复制沥青文件时,也会自动展开

  

卷:挂载目录
卷(“/data")
创建一个可以从本地主机或者其他容器的挂载点,一般用来存放数据

  

用户:
用户守护进程
指定运行容器时的用户名或UID,后续的运行也会使用指定用户。当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建需要的用户运行useradd - s/sbin/nologin - m www。

  

入口点
两种格式:
入口点(“executable",“param1",“param2"]
入口点命令param1 param2(壳)
配置容器启动后执行的命令,并且不可被码头工人运行参数覆盖,每个Dockerfile中只能有一个入口点,当指定多个时,只有最后一个生效

  

CMD:
支持三种格式
CMD [“executable",“param1",“param2"]使用exec执行
CMD command1 command2 command3仅在/bin/bash中执行,提供给需要交互应用
CMD [“param1",“param2"]提供给入口点的默认参数;
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD命令。如果指定了多条命令,只有最后一条会被执行,则会覆盖掉CMD指定命令

Dockerfile详解