Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html
镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是假删除,让人无法访问到,实际上还是存在的。
在以上基础上,谈谈定制镜像。
定制镜像就是在已有的基础镜像上添加层,但是定制每一层添加进去的东西,比如配置、文件等。我们把对每一层的操作放进 Dockerfile 里,这样定制出来的镜像就是一致的。
Dockerfile 中的每一条指令都会创建一层。
Dockerfile 指令
Dockerfile 中,指令不区分大小写,但最好用大写突出每条指令。
FROM:指定基础镜像
FROM: nginx
MAINTAINER:指定维护者信息
MAINTAINER: yyh
以上指令有先后顺序,在文件中需按顺序放在第一第二编写!
RUN:执行命令
有 shell 和 exec 两种格式
尽管可以一个 RUN 指令执行一条语句,但这样会创建过多层镜像,是不科学也不必要的,正确写法应该是使用 && 将多条命令连起来。
在每条指令也就是构建每一层之后,必须有清除无关文件的命令,否则镜像会非常臃肿。
tips: '\' 换行, '#' 注释
COPY:复制文件
COPY sourcePath targetPath
sourcePath 可以是多个,可以是通配符,targetPath 不存在时会自动创建,不用事先创建。
ADD:复制文件 plus
基本同 COPY 的使用方法和功能, ADD 的 sourcePath 可以是一个 URL,会主动下载并自动设置权限为600。
ADD 会使镜像构建缓存失效,可能会导致镜像构建很缓慢。
使用场景判断:如果是单纯复制文件,使用 COPY,如果需要自动解压缩,使用 ADD。
CMD:容器启动命令
指定容器启动程序及参数
CMD <命令> // shell 格式
CMD ["可执行文件", "参数1", "参数2"...] // exec 格式
推荐使用 exec 格式,会被解析为 JSON 数组,一定要用双引号。
容器中所有应用都应该前台执行,没有后台服务的概念!
ENTRYPOINT 入口点
功能同 CMD,有 shell 和 exec 两种格式
如果存在 ENTERPOINT,CMD 的内容就变成了 ENTERPOINT 的参数。
可能传参就用 ENTRYPOINT,不传参就用 CMD
ENV 设置环境变量
格式如下
ENV key value // 一个键值对
ENV key1=value1 key2=value2 // 多个键值对
值有空格时用双引号引起来
使用时用 $key 即可取值。
ARG 构建参数
与 ENV 作用相同,但 ARG 设置的环境变量,在容器运行时不存在
VOLUME 定义匿名卷
格式如下
VOLUME 路径 // 一个时直接接在后面
VOLUME ["路径1", "路径2"] // 多个路径放进数组
避免运行时用户忘记将动态文件所保存目录挂载为卷,保证容器存储层不会发生写操作
EXPOSE 声明端口
声明容器打算用什么端口,不会自动在宿主进行端口映射
WORKDIR 指定工作目录
USER 指定当前用户
指定用户必须事先建立好
HEALTHCHECK 健康检查
判断容器状态是否正常
HEALTHCHECK 选项 CMD 命令 // 设置容器健康检查
HEALTHCHECK NONE // 屏蔽检查
选项如下:
- --interval 检查间隔 默认30秒
- --timeout 超时时间 默认30秒
- --retries 指定连续失败次数,超过时将容器视为不健康
ONBUILD 预指令
后面跟着其它指令,当下一级镜像以此镜像为基础镜像时才会被执行
构建镜像
终端进入 Dockerfile 所在目录,输入以下命令构建镜像
docker build -t imageName:tag .
最后面的 '.' 一定要加上,表示指定上下文路径为当前目录。
镜像其实是在远程服务端构建的,当指定上下文路径后,会将该路径下的所有内容打包,上传给 Docker 引擎,服务器便获取到本地资源。
由于只能从上下文中获取资源,因此 Dockerfile 中必须指定范围内的路径。
在执行 build 后,可以看到输出如下内容,就是在发送我们指定的上下文。
Sending build context to Docker daemon 2.048kB
tips:.dockerignore 文件可以剔除不希望上传到 Docker 引擎的资源
其它构建方法
docker 支持 URL 构建
Git repo 构建
使用 mybranch 分支,myfolder 作为构建上下文构建镜像,不指定分支或 tag 则默认为master,不指定上下文则默认为根目录。
docker build myrepo.git#mybranch:myfolder
tar 包构建
如果 URL 是 tar 包,Docker 引擎会下载并解压缩,将其作为上下文构建镜像
docker build url
标准输入读取构建镜像
如果标准输入传入的是文本文件,将该文件视为Dockerfile,如果是压缩包,将压缩包视为上下文压缩包,解压后视为上下文构建。
END~~~≥ω≤
Docker学习笔记三 Dockerfile 指令 定制镜像的更多相关文章
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- angular学习笔记(三十)-指令(7)-compile和link(2)
继续上一篇:angular学习笔记(三十)-指令(7)-compile和link(1) 上一篇讲了compile函数的基本概念,接下来详细讲解compile和link的执行顺序. 看一段三个指令嵌套的 ...
- angular学习笔记(三十)-指令(7)-compile和link(1)
这篇主要讲解指令中的compile,以及它和link的微妙的关系. link函数在之前已经讲过了,而compile函数,它和link函数是不能共存的,如果定义了compile属性又定义link属性,那 ...
- angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令
在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- docker学习笔记(2) 构建镜像
一.手动构建一个简单镜像 我们以构建nginx的docker镜像为例:手动构建镜像 docker pull centos 安装基础镜像docker run --name mynginx -it ...
- angular学习笔记(三十)-指令(1)-概述
之前在 angular学习笔记(十九)-指令修改dom 里面已经简单的提到了angular中的指令,现在来详细的介绍 '指令' 一.指令的创建: dirAppModule.directive('dir ...
- Docker学习笔记三:Docker部署Java web系统
Docker部署Java Web系统 1.在root目录下创建一个路径test/app mkdir test && cd test&& mkdir app && ...
随机推荐
- 做游戏的小伙伴们注意了,DDoS还可以这样破!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云+社区专栏 作者:腾讯DDoS安全专家.腾讯云游戏安全专家haroldchen 摘要:在游戏出海的过程中,DDoS攻 ...
- 教你用PS制作雨天窗户上透明水滴字
雨天窗户上透明水滴字制作方法很简单,主要利用图层样式来实现.学习后可以让你对图层样式有更好的了解,认识. 先看下完成后的效果图: 步骤1: 在Photoshop中我们新建或Ctrl+N,创建1920x ...
- 《陪孩子像搭积木一样学编程》,一起来玩Scratch(1)使用Scratch编程的基本流程
编程是一件很有趣的事情.初次接触编程,你可能不知所措,别担心,这并不复杂.首先,为了让读者对编程有大概的了解,可以把编写Scratch程序的过程分成7个步骤(如图1.8).注意,这是理想状态.在实际的 ...
- 机器学习之线性回归使用Python和tensorflow实现
导入依赖包 import tensorflow as tf import numpy as np import matplotlib.pylab as plt from pylab import mp ...
- 基于tensorflow 1.x 的检索机器人chatbot-retrieval
Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...
- mysql学习(1)
开始我们基础的mysql学习 第一部分:补充知识 1. 昨天讲到的mysql初始化密码为空,今天又get到一种新的方法 Mysql安装后需要做的 Mysql安装成功后,默认的root用户密码为空,你可 ...
- 2013337朱荟潼 Linux第五章读书笔记——系统调用
摘要: [20135337朱荟潼]原创作品转载请注明出处 第五章 系统调用 5.1 与内核通信 中间层 作用三个:1.为用户空间提供一种硬件的抽象接口:2.保证系统稳定和安全:3.除异常和陷入,是内核 ...
- SpringMVC(三)-- springmvc的系统学习之数据的处理,乱码及restful
资源:尚学堂 邹波 springmvc框架视频 一.提交数据的处理 1.提交的域名称和处理方法的参数一致 (1)提交的数据:http://localhost:8080/data/hello.do?na ...
- “数学口袋精灵”第二个Sprint计划---第一天
“数学口袋精灵”第二个Sprint计划----第一天进度 任务分配: 冯美欣:欢迎界面的音效 吴舒婷:游戏界面的动作条,选择答案后的音效 林欢雯:完善算法代码的设计 进度: 冯美欣:上网百度音乐资 ...
- 以webService为客户端获取List泛型结果集
首先搭建好webService,添加XFire1.2Core Libraries 和XFire1.2HTTP Client Libraries,连接上数据库,下例以oracle为数据库. 连接Oral ...