docker学习笔记-05:DockerFile解析
一、DockerFile是什么
1、DockerFile是用来构建docker镜像的构建文件,是由一系列参数和命令构成的脚本。
2、构建三步骤:
手动编写一个dockerfile文件,然后直接docker build命令执行,获得一个自定义的镜像,最后 docker run 创建一个容器实例。
二、centos的DockerFile
FROM scratch # centos的祖先
MAINTAINER The CentOS Project <cloud-ops@centos.org> # 作者的名字和邮箱
ADD c68-docker.tar.xz / # centos压缩包
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-06-02" # 默认的命令,所以在启动容器时可加可不加
CMD ["/bin/bash"]
三、DockerFile构建过程解析
1、DockerFile内容基础知识:
(1)每条保留字指令都必须为大写字母且后面要跟随至少一个参数
(2)指令从上到下,顺序执行
(3)#表示注释
(4)每条指令都会创建一个新的镜像层,并对镜像进行提交
2、docker执行DockerFile的大致流程:
(1)docker从基础镜像运行一个容器
(2)执行一条指令并同时对容器进行修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行DockerFile中的下一条指令直到所有指令都执行完成
3、从应用软件的角度来看,DockerFile、Docker镜像和Docker容器分别代表了软件的三个不同阶段
- DockerFile是软件的原材料
- Docker镜像是软件的交付品
- Docker容器则可以认为是软件的运行态
DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署和运维,三者缺一不可。
4、关系:DockerFile----build---->Docker镜像-----run---->Docker容器
四、DockerFile体系结构(保留字指令)
1、FROM 基础镜像,也就是当前新镜像是基于哪个基础镜像的
2、MAINTAINER 镜像作者的姓名和邮箱地址
3、RUN 构建镜像的过程中执行一个具体的命令
4、EXPOSE 当前容器实例对外暴露的端口
5、WORKDIR 制定在创建容器后,终端默认登录的进来工作目录
6、ENV 用来在构建镜像过程中设置环境变量 如:ENV MY_PATH /usr/mytest 变量名为 MY_PATH,变量值为 /usr/mytest
7、ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
8、COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<原路劲>的文件/目录复制到新的一层的镜像内的<目标路劲>位置
9、VOLUME 容器数据卷,用于数据保存和持久化工作
10、CMD 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但只有最后一个生效。且如果docker run 后面有命令参数,那么CMD的会被docker run后面的替换掉
11、ENTRYPOINT 同CMD类似,也指定一个容器启动时要运行的命令,但不同在于,如果docker run 后面由命令参数,那么不会覆盖,而是追加
12、ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发。
docker学习笔记-05:DockerFile解析的更多相关文章
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
- Docker学习笔记之Dockerfile
Dockerfile的编写格式为<命令><形式参数>,命令不区分大小写,但一般使用大写字母.Docker会依据Dockerfile文件中编写的命令顺序依次执行命令.Docker ...
- docker学习笔记-05:Docker安装mysql和redis
一.安装mysql 1.docker hub 上查找mysql镜像 docker search mysql 2.从docker hub (使用阿里云加速器)拉取mysql镜像到本地标签为5.6 doc ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归
机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
随机推荐
- Spring Boot 2.x 入门前的准备-IntelliJ IDEA 开发工具的安装与使用
常用的用于开发 spring boot 项目的开发工具有 eclipse 和 IntelliJ IDEA 两种,最近有声音提出 visual code 也开始流行开发 java,而且确实如此, vs ...
- ResultSet指针回到初始位置的方法及ResultSet介绍
原文地址: https://blog.csdn.net/walkerjong/article/details/7023872 仅供学习参考使用. 结果集(ResultSet)是数据中查询结果返回的一种 ...
- Babel的安装和使用
安装Node.JS 和 npm,如未安装可参照其他文章 1.创建一个package.json npm init (回车, 一直下一步即可) 安装 Babel npm install --save-de ...
- Linux下安装 boost 库
1. 先去官网下载压缩包: https://www.boost.org/ 2. 解压 tar -zvxf boost_1_70_0.tar.gz 2. cd 进入根目录,然后执行: ./bootstr ...
- WPF 体系结构
转载地址:http://blog.csdn.net/changtianshuiyue/article/details/38963477 本主题提供 Windows Presentation Found ...
- Dire Wolf HDU - 5115
题目链接 一开始很自然的想到了贪心,跑了一下贪心,发现无法处理某一段已经被选走的情况,根据数据范围,区间dp比较适合,能储存区间取样信息 设dp[i][j]为已经杀死区间[i,j]的最小值,可以得到转 ...
- 软件工程 - 防御式编程EAFP vs LBYL
概念 EAFP:easier to ask forgiveness than permission LBYL:look before you leap 代码 # LBYL def getUserInf ...
- 关于java自学的内容以及感受(7.28)
这一周学习了关于一些算法运算,我进行了程序的编写与运行,代码如下: public class TestSign{ public static void main(String[] args){ int ...
- MySQL之关系
目录 关系 多对多的关系,如何通过mysql来表示 一对一关系 关系 多对多的关系,如何通过mysql来表示 站在老师的角度 一个老师可以教多个学生, 一个老师也可以教一个学生. 站在学生的角度 一个 ...
- ES5-严格模式
在es5中可以开启一种严格模式的代码形式,开启方式是:将全局或者函数的第一条语句定义为:'use strict';. 如果浏览器不支持,会将其解析为一条普通语句,没有任何的副作用. 开启全局模式后会有 ...