1,Dockers的最小镜像

[root@localhost ~]# docker pull hello-world
//下载一个最小的镜像
[root@localhost ~]# docker images
//查看镜像

[root@localhost ~]# docker run hello-world
//运行一下hello-world (里面是一个文本对docker运行的简单介绍)

dockerfile的组成

  • 1)FROM:scratch(抓、挠)
  • 2)COPY:hello /
  • 3)CMD:[“/hello”]

FROM

 语法:FROM <image>[:<tag>]解释:设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载。

COPY

  语法:COPY <src> <dest>解释:用法与ADD相同,不过<src>不支持使用url,所以在使用docker build – < somefile时该指令不能使用。

CMD

  语法:①CMD ["executable", "param1", "param2"]    #将会调用exec执行,首选方式②CMD ["param1", "param2"]        #当使用ENTRYPOINT指令时,为该指令传递默认参数③CMD <command> [ <param1>|<param2> ]        #将会调用/bin/sh -c执行解释:CMD指令中指定的命令会在镜像运行时执行,在Dockerfile中只能存在一个,如果使用了多个CMD指令,则只有最后一个CMD指令有效。当出现ENTRYPOINT指令时,CMD中定义的内容会作为ENTRYPOINT指令的默认参数,也就是说可以使用CMD指令给ENTRYPOINT传递参数。注意:RUN和CMD都是执行命令,他们的差异在于RUN中定义的命令会在执行docker build命令创建镜像时执行,而CMD中定义的命令会在执行docker run命令运行镜像时执行,另外使用第一种语法也就是调用exec执行时,命令必须为绝对路径。

2、Base镜像(基础镜像

Centos:7镜像的dockerfile

FROM scratchADD centos-7-x86_ _64-docker.tar.xz /LABEL org. label-schema. schema-version="1.0" \|
org. label-schema. name="Centos Base Image" \
org. labe1-schema. vendor="centos" \
org. labe1-schema. 1icense="GPLV2" \
org. labe1-schema build-date="20190305 'CMD ["/bin/bash"]

3、镜像的分层

1)dockerfile的书写格式为:Dockerfile(首字母大写,包括文件名称)
2)From:构建镜像有两种方式,一种scratch(从零构建),另一种可以基于某个镜像开始构建
3)镜像所运行的操作(用户所期望的)

[root@localhost ~]# mkdir test
//创建测试目录
[root@localhost ~]# cd test
//进入测试目录
[root@localhost ~]#vim Dockerfile
//编写Dockerfile
FROM centos:7
RUN yum -y install vim  #或["yum","install","vim"]
RUN yum -y install net-tools
CMD ["/bin/bash"]

执行一下

[root@localhost test]# docker build -t centos7-vim-net-tools:12-11 .
//使用当前目录的 Dockerfile 创建镜像,标签为 centos7-vim-net-tools:12-11
build: 使用 Dockerfile 创建镜像
-t:标签
. :当前目录

执行的层次

4.Dockerfile镜像分层总结

镜像时容器的基石,容器是镜像运行后的实例。当镜像运行为容器之后,对镜像的所有数据仅有只读权限,如果需要对镜像源文件进行修改或删除操作,此时是在容器层(可写层)进行的,用到了COW(copy on write)写时复制机制。

Docker镜像的缓存特性

1.创建一个新的Dockerfile文件

[root@localhost ~]# vim Dockerfile
FROM centos:7
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum -y install wget
CMD ["/bin/bash"]
[root@localhost ~]# docker build -t new-centos .
//使用当前目录的 Dockerfile 创建镜像,名称为new-centos

如果在相同的层,有用到相同的镜像,可以不必再去下载,直接使用缓存。(如果第一层的不相同了,那么下面的相同也没用了,需要重新下载)

2.再次创建一个新的Dockerfile

[root@localhost ~]# mkdir test1
[root@localhost ~]# cd test
[root@localhost test]# cd ../test1
[root@localhost test1]# vim Dockerfile
FROM centos:7
RUN yum -y install vim
RUN yum -y install wget
RUN yum -y install net-tools
CMD ["/bin/bash"]
[root@localhost test1]# docker build -t centos-new .
//使用当前目录的 Dockerfile 创建镜像,名称为centos-new


即使镜像层里的操作一样,也必须是在同一层才可以使用dockerfile的缓存特性
如果制作镜像过程中,不想使用缓存,可以–no-cache选项

Dockers镜像分层相关推荐

  1. docker 镜像_Docker镜像分层

    为了有效地利用存储驱动程序,了解Docker如何构建和存储镜像以及如何使用这些镜像非常重要. 镜像分层 Docker镜像是由一系列层来构成的,每层代表Dockerfile中的一条指令,依下面Docke ...

  2. Docker镜像分层和临时容器

    镜像分层:对于已经构建过的镜像,修改Dockerfile文件后,再次构建只会对修改的部分进行执行,已经执行过的步骤并未修改的话会掠过. 临时容器:每执行一个步骤就会产生一个临时容器.

  3. Dockerfile镜像分层

    文章目录 一.联合文件系统(UnionFS) 二.Docker镜像分层 三.Dockerfile 概述 1.Dockerfile 定义 2.Docker 镜像结构的分层 四.Dockerfile 操作 ...

  4. Docker 进阶之镜像分层详解

    文章目录 导读 入门图解 创建测试镜像 查看镜像 使用docker inspect 使用docker history 镜像分层图 镜像分层的好处 Docker镜像加载原理 rootfs Union m ...

  5. docker学习(三):docker镜像分层原理及本地镜像推送到阿里云或私服

    文章目录 前言 docker镜像分层加载原理 docker镜像commit操作产生新镜像 本地镜像发布到阿里云 将本地镜像推送到私有库 前言 大家好,这是我学习docker系列的笔记文章,目标是掌握d ...

  6. Docker 什么是镜像以及镜像分层详解

    什么是镜像 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时库.环境变量和配置文件 Docker镜像是由文件系统叠 ...

  7. linux内核镜像的分层,Docker镜像分层的原理详解

    base镜像 base镜像有两层含义: 不依赖其他镜像,从scratch构建 其他镜像可以之为基础进行扩展 所以,base镜像一般都是各种Linux发行版本的Docker镜像,比如:Ubuntu,De ...

  8. Spring Boot 容器镜像分层构建

    本文参考文档 Spring Boot 容器镜像 Spring Boot Maven 插件参考指南 本文使用 Maven 进行配置,Gradle 可以参考下面文档 Spring Boot Gradle ...

  9. 手把手带你构建dockers镜像

    目录 前言 一.Dockerfile文件 二.跟做先构建个简单的镜像感受一下 1. 将需要的用到的资源(jdk-8u211-linux-x64.tar.gz)准备好,创建一个文本文件名称为Docker ...

最新文章

  1. 滚动时域控制 matlab,在 Simulink 中设计神经网络预测控制器
  2. RAC环境下的备份与恢复(一)
  3. mysql语句中事务可靠性_MySql的事务使用与示例详解
  4. JAVA的字符串拼接与性能
  5. pom.xml中依赖的optionaltrue/optional标签
  6. JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法
  7. 推荐一个超级方便的Android 抓包工具 Chuck
  8. 笔记 黑马程序员C++教程从0到1入门编程——核心编程
  9. TOPOLOGY ADAPTIVE GRAPH CONVOLUTIONAL NETWORKS论文笔记(TAGConv)
  10. linux 禁用超线程,Linux动态启用/禁用超线程技术
  11. scl 转换gcc版本
  12. fiddler4 The system proxy was changed. Click to reenable capturing.
  13. sql转置两种实现方式记录
  14. 好兄弟结婚,送给他的小诗
  15. 网络接口卡更换为计算机网卡,电信宽带从100兆升200兆,需要换路由器和全部的网线吗?该如何处理呢?...
  16. MybatisPlus相关
  17. webpack构建中tree shaking、scope Hoisting(面试题)
  18. 转发:任正非寄语2010:开放、妥协与灰度
  19. 2021年安全员-A证报名考试及安全员-A证考试资料
  20. 主平台对接多个系统,系统表的性能和对接方案

热门文章

  1. 随笔-vue项目引入axios
  2. Win10优化2 REG文件
  3. 谷歌地球如何下载使用高程数据
  4. ROS综合学习记录(一)---cmd_vel转换为阿克曼模型的速度变换
  5. 中国在6G专利上再进一步,申请量占比达五成,遥遥领先,美国的希望落空
  6. PHP毕业设计源代码剧影评|剧评影评系统
  7. go zap + lumberjack 日志按大小分割demo整理
  8. html5实现像素鸟,有趣的Axure案例:像素鸟游戏的设计
  9. 字符迷阵[网易题目]
  10. python前端开发招聘_【天津前端开发招聘_最新天津前端开发招聘信息】-前程无忧...