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容器中,特抽时间把我的 ...
随机推荐
- iOS Beta 升级或降级
https://sspai.com/post/45442 public beta网站上安装profile, 去手机看更新 developer beta, 登录开发者网站, downloads, 下载p ...
- centos php 安装 decrypt
CentOS php Fatal error: Call to undefined function mcrypt_decrypt() // yum安装没有 #yum install libmcryp ...
- Linux内核调试方法总结之ltrace
ltrace [用途] 库文件调用跟踪器,Linux内核内建命令,用法类似strace [命令格式] [参数说明][详细说明参考man ltrace帮助文档] -D 打印调试信息 01-DEBUG_G ...
- Rtmp AAC基本格式(转)
第一个audio data包:AAC sequence header 第二个audio data包:AAC raw AF表示的含义: 1)第一个字节af,a就是10代表的意思是AAC, Format ...
- 三十二、python操作XML文件
'''XML:模块 xml总结 1.解析 str 文件 tree,ElementTree,type root,Element,type2.操作 Element: tag,text,find,iter, ...
- Node - 模块加载与 lerna 提升
从node_modules 加载模块的过程 如果要加载的模块非核心模块,并且路径不是'/'. '../'和'./'开头,这个模块就会从当前文件夹递归向上在node_modules文件夹中寻找这个模块. ...
- 自动化生成 Openstack 新项目开发框架
目录 目录 前言 环境 openstack-project-generator 前言 Openstack Developer 应该都知道, 开发一个 Openstack 的新项目并不是一个从 0 到 ...
- 测开之路一百零六:bootstrap布局
可以在html的head里面加一些说明 <meta http-equiv="X-UA-Compatible" content="IE=edge">& ...
- 测开之路一百零二:jquery元素操作
jquery对元素操作,获取/替换文本(.text()).html(.html()).属性(.attr()).值(.val()) html代码 text() 根据标签获取文本值 同一个标签下筛选明细 ...
- 用python进行月份加减的函数
import math def add_month(datamonth, num): """ 月份加减函数,返回字符串类型 :param datamonth: 时间(20 ...