6.dockerfile
一、概述
自制镜像的目的不是为了解决配置更新的问题,而是为了定制化应用服务。
镜像的制作:基于容器制作;dockerfile
dockerfile的格式:注释信息+指令(约定俗成使用大写)及其参数
dockerfile中的指令是顺序执行的,第一个非注释行必须是“FROM”指令。
docker制作镜像的工作逻辑:专用的工作目录,文件名首字母大写的dockerfile文件;引用的文件或目录路径不能是工作目录的父目录,只能是当前目录或子目录,因此需要将使用的文件放到此目录下。
dockerfile中每一条指定都会生成一层镜像层,所以要尽量少写指令。
构建命令:docker build --help
二、操作
1、指令
- From:dockerfile文件的第一个非注释行,用于为镜像文件构建过程中指定基准镜像,后续的指定运行于此基准镜像所提供的的运行环境。(FROM <repository>:<tag>)
- LABEL:为一个镜像指定元数据,键值对。(LABEL <key>=<value> <key>=<value>)
- COPY:用于从docker宿主机复制文件到创建的新镜像文件。src支持使用通配符,dest如果是目录,末尾一定要写/,否则会被识别为文件;src路径使用相对路径,dest使用绝对路径;src是目录,则目录中的文件会被递归复制,但src目录自身不会被复制。(COPY <src> <dest>)
- ADD:类似COPY,支持使用tar文件和URL路径。如果<src>是一个本地系统上的tar文件,将被自动展开为一个目录,其行为类似于tar -x,但通过URL获取到的tar文件不会被展开。(ADD <src> <dest>;ADD ["<src>",..., "<dest>"])
- WORKDIR:指定工作目录,可以使用多次。(WORKDIR <dir>)
- VOLUME:用于在image中创建一个挂载点目录,类似于命令中docker管理的挂载卷。(VOLUME <mountpoint>)
- EXPOSE:用于为容器打开指定要监听的端口以实现与外部通信,可一次指定多个端口。指定暴露端口,但不会自动暴露到外部,run时-P才会动态绑定到宿主机的随机端口和所有地址。(EXPOSE <port>[/<protocol>] <port>[/<protocol>]),protocol指定传输层协议,tcp或udp,默认tcp。
- ENV:用于为镜像定义所需的环境变量,可被用于Dockerfile中位于其后的其他指令调用,调用格式为$variable_name或${variable_name}。在创建容器时是能够重新配置环境变量的。(ENV <key> <value>;ENV <key>=<value>)
- RUN:用于指定docker build过程中运行的程序,可以是任何命令,构建镜像过程中运行的命令,是基于基础镜像中的命令执行的,可运行多次。(RUN <command>或 RUN ["<executable>","<param1>","<param2>"])。第一种用法通常以“/bin/sh -c”来运行命令,在容器中的pid不为1,但会默认执行exec操作,将该进程号替换为1;第二种用法,不会以“/bin/sh -c”来发起,直接由内核创建,不支持shell操作符和使用shell环境变量,pid为1。
- CMD:同RUN,但二者运行时间点不同。是在创建容器时没有指定运行命令时默认运行的命令,通常与ENTRYPOINT结合使用,存在多个CMD时,只有最后一个生效。CMD指定的命令可以被docker run的命令行选项覆盖。(CMD <command>或 CMD ["<executable>","<param1>","<param2>"]或CMD ["<param1>","<param2>")。第一种用法和第二种用法同RUN;第三种用法用于为ENTRYPOINT指令提供默认参数。
- ENTRYPOINT:类似CMD的功能,为容器指定默认运行程序。不同的是,ENTRYPOINT启动的程序不会被docker run时的参数覆盖,并且这些命令行参数会被当做参数传递给ENTRYPOINT指定的程序。--entrypoint可覆盖ENTRYPOINT指定的默认程序。可存在多个,仅有最后一个生效。(ENTRYPOINT <command>或 ENTRYPOINT ["<executable>","<param1>","<param2>"]) --- 注:json数据中,要使用双引号。
- USER:用于指定运行指令(RUN,CMD,ENTRYPOINT)时的用户名或UID,需要是已存在的用户,默认使用root。(USER <UID>|<UserName>)
- HEALTHCHECK:用于定义docker检测某个容器的健康状态的行为。(HEALTHCHECK [OPTIONS] CMD <command>或HEALTHCHECK NONE -- 拒绝任何的健康状态检测)
- SHELL:用于指定运行指令默认要使用的shell程序,默认是linux下是[“/bin/sh,"-c”],windows是[“cmd”,"/S","/C"]。( SHELL ["<executable>","<parameters>"])
- STOPSIGNAL:接收到什么信号容器才会退出,默认是-15,docker stop就是发送的-15的信号。(STOPSIGNAL signal)
- ARG:构建过程中使用的变量,只在build中使用,可以在build中使用--build-arg传参数替换默认值。(ARG <name>[=<default_value>])
- ONBUILD:用于在dockerfile中定义一个触发器,即此制作的镜像作为基础镜像被使用,其他人在build他们的镜像时会触发ONBUILD定义的指令。不能自动嵌套,不会触发FROM和MAINTAINER指令。(ONBUILD <INSTRUCTION>)
三、其他
注:直接在命令行启动一个进程,该子进程的父进程是当前shell,并且占用shell的终端输出;command & 运行一个进程,不占用当前shell的终端输出,但其父进程还是当前shell,shell退出进程也会退出;nohup command &,将当前进程送到后台,剥离与当前shell的父子关系,其父进程为init。
docker stop/kill 停止容器时,容器内接收信号的都是进程号为1的进程。
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉。
6.dockerfile的更多相关文章
- 如何用Dockerfile创建镜像
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5181222.html 创建镜像的目的 首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有 ...
- Dockerfile初探
git上的asp.net samples工程已经写好了docker file,内容是如下 //任何dockersfile都要以FORM开头,约定是用大写. FROM microsoft/aspne ...
- ubuntu 16.04 Dockerfile 安装mysql
默认上MariaDB的包并没有在Ubuntu仓库中.要安装MariaDB,我们首先要设置MariaDB仓库. 配置MariaDB 仓库 # apt-get install software-prope ...
- 分析Mysql 5.6的Dockerfile
Docker官方的Mysql镜像的Dockerfile托管在Github上,地址如下: https://github.com/docker-library/mysql/tree/5836bc9af9d ...
- 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像
Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...
- Docker dockerfile创建Eclipse镜像初试
抽空初步阅读了Docker技术入门与实战 [Kindle电子书] http://www.cnblogs.com/2018/p/4600116.html 现在想首先在开发环境下引入统一的环境,由于开发中 ...
- 安装Nginx的Dockerfile实例
#################################################Dockerfile to build Nginx Installed Containers##Bas ...
- 测试dockerfile
测试dockerfile是否ok(比如我的Dockerfile在deploy目录下) docker build -t my_image -f deploy/Dockerfile . docker im ...
- 通过Dockerfile建立.NET Core mvc Image
生成.NET core mvc code docker run -itd microsoft/dotnet:latestdocker psdocker attach containeridmkdir ...
- .Net Core+cenos7+Docker+Dockerfile 部署实践
因为这段时间比较忙,同时也在抽时间将开发框架转移到 .net Core 上 所以写博客的时间就少了,这次我利用dockerfile成功将.net Core程序部署到了cenos7容器中,特抽时间把我的 ...
随机推荐
- TreeSet 源码分析
TreeSet 1)底层由 TreeMap 支持的 Set 接口实现,Set 中的元素按照自然顺序或指定的比较器排序. 创建实例 /** * 支持此 Set 的底层的 TreeMap 对象 */ pr ...
- 微信企业号 发送信息 shell
微信企业号发送信息shell #可作为shell函数模块调用,用于微信通知.jenkins发版微信通知等等 # 微信API官方文档 https://work.weixin.qq.com/api/doc ...
- Prometheus Alertmanager Grafana 监控警报
Prometheus Alertmanager Grafana 监控警报 #node-exporter, Linux系统信息采集组件 #prometheus , 抓取.储存监控数据,供查询指标 #al ...
- python函数及调用
python的函数是一段重复多次可调用的代码,依据python的函数,我们可以利用函数式的编程,来减少代码的重复. 在本章节中,详细的介绍python的函数,以及python的函数式编程的与众不同,函 ...
- DropDownList 需要加AutoPostBack="true" ,OnSelectedIndexChanged方法才有效
<asp:DropDownList ID="ddlType" runat="server" AutoPostBack="True" ...
- MethodBase.GetCurrentMethod 方法
如果当前正在执行的方法定义泛型类型上MethodInfo返回GetCurrentMethod通过泛型类型定义 (即,MethodInfo.ContainsGenericParameters返回true ...
- web 前端1 拾遗
1.整体布局 三个div header body footer 2.div的居中 width:980px margin:0 auto 3.内联标签 inline #内联 无法使用高度.宽度 block ...
- [BZOJ2716] [Violet 3]天使玩偶(CDQ分治)
[BZOJ2716] [Violet 3]天使玩偶(CDQ分治) 题面 Ayu 在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后 的今天,Ayu 却忘了她把天使玩偶埋在了哪里, ...
- JS补充笔记
<script> 函数: 普通函数: function func(){ } 匿名函数: setInterval("func()",5000); setInterval( ...
- 关于.net的精彩对话(转)
[序言]我想很多爱好软件编程的网友都像我一样,对微软推出的.net平台充满了好奇,但是看了相关的文档也是一头雾水,还好,Purple很幸运在QQ上遇到了一位.net高手,经过高手的一番教导,Purpl ...