Dockers镜像分层

Dockers镜像分层

1,Dockers的最小镜像

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

[[email protected] ~]# 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 scratch

ADD 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)镜像所运行的操作(用户所期望的)

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

执行一下

[[email protected] 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文件

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


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

3.再次创建一个新的Dockerfile

[[email protected] ~]# mkdir test1
[[email protected] ~]# cd test
[[email protected] test]# cd ../test1
[[email protected] 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"]
[[email protected] test1]# docker build -t centos-new .
//使用当前目录的 Dockerfile 创建镜像,名称为centos-new


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

原文地址:https://blog.51cto.com/14320361/2457835

时间: 2024-08-02 22:48:42

Dockers镜像分层的相关文章

理解Docker镜像分层

原文:理解Docker镜像分层 关于base镜像 base 镜像有两层含义: 不依赖其他镜像,从 scratch 构建. 其他镜像可以之为基础进行扩展. 所以,能称作 base 镜像的通常都是各种 Linux 发行版的 Docker 镜像,比如 Ubuntu, Debian, CentOS 等. base 镜像提供的是最小安装的 Linux 发行版. 我们大部分镜像都将是基于base镜像构建的.所以,通常使用的是官方发布的base镜像.可以在docker hub里找到.比如centos: htt

docker的架构,镜像分层特性,dockerfile缓存特性

Docker网站:https://hub.docker.com/?Docker镜像分层的概念:Docker的最小镜像下载镜像(dockerfile的组成)docker pull hello-world Dockerfile的组成1.>FROM:scratch 抓,挠(从零开始构建)2>COPY: hello /3>CMD: ["/hello"] Base镜像(基础镜像) > ***个人理解: > 用户空间:rootfs > 内核空间 :bootfs

Docker中的镜像分层技术详解

早在集装箱没有出现的时候,码头上还有许多搬运的工人在搬运货物,在集装箱出现以后,码头上看到更多的不是工人,而且集装箱的搬运模式更加单一,更加高效,还有其他的好处,比如:货物多打包在集装箱里面,可以防止货物之前相互影响.并且到了另外一个码头需要转运的话,有了在集装箱以后,直接把它运送到另一个容器内即可,完全可以保证里面的货物是整体的搬迁,并且不会损坏货物本身.那么docker 镜像在IT行业中也扮演着非常重要的形象. 什么是docker 镜像 就是把业务代码,可运行环境进行整体的打包 如何创建do

06: docker镜像分层

docker分层 docker镜像的分层(使用的是kvm 链接克隆,写时复制的特性) 1:分层的好处:重复利用,节约资源 2:镜像越大,迁移时间越长:并且你如果使用docker做集群,那么如果镜像太大, 有变化,每个更新的话,都需要很长时间.所以最好是镜像分2-3层(基础系统-应用服务-代码),集群采预与下载. 查看分层镜像信息:(请注意missing - ) [[email protected] ~]# docker history centos_ssh:v1.2 (--no-trunc) I

【Docker】镜像分层存储与镜像精简

Linux操作系统 Linux操作系统由内核空间和用户空间组成. 内核空间是kernel,用户空间是rootfs, 不同Linux发行版的区别主要是rootfs.比如 Ubuntu 14.04 使用 upstart 管理服务,apt 管理软件包:而 CentOS 7 使用 systemd 和 yum.这些都是用户空间上的区别,Linux kernel 差别不大. 所以 Docker 可以同时支持多种 Linux 镜像,模拟出多种操作系统环境. 分层存储 因为镜像包含操作系统完整的 root 文件

Docker镜像分层结构剖析

总结: 共享资源 对容器的任何改动都是发生容器层 容器层是可写可读,而镜像层只读 原文地址:https://www.cnblogs.com/weisunblog/p/12235578.html

构建镜像 - 每天5分钟玩转容器技术(12)

对于 Docker 用户来说,最好的情况是不需要自己创建镜像.几乎所有常用的数据库.中间件.应用软件等都有现成的 Docker 官方镜像或其他人和组织创建的镜像,我们只需要稍作配置就可以直接使用. 使用现成镜像的好处除了省去自己做镜像的工作量外,更重要的是可以利用前人的经验.特别是使用那些官方镜像,因为 Docker 的工程师知道如何更好的在容器中运行软件. 当然,某些情况下我们也不得不自己构建镜像,比如: 找不到现成的镜像,比如自己开发的应用程序. 需要在镜像中加入特定的功能,比如官方镜像几乎

Dockerfile 构建镜像 - 每天5分钟玩转容器技术(13)

Dockerfile 是一个文本文件,记录了镜像构建的所有步骤. 第一个 Dockerfile 用 Dockerfile 创建上节的 ubuntu-with-vi,其内容则为: 下面我们运行 docker build 命令构建镜像并详细分析每个细节. [email protected]:~# pwd         ① /root [email protected]:~# ls          ② Dockerfile [email protected]:~# docker build -t

理解Docker(2):Docker 镜像

对于每个软件,除了它自身的代码以外,它的运行还需要有一个运行环境和依赖.不管这个软件是象往常一样运行在物理机或者虚机之中,还是运行在现在的容器之中,这些都是不变的.在传统环境中,软件在运行之前也需要经过 代码开发->运行环境准备 -> 安装软件 -> 运行软件 等环节,在容器环境中,中间的两个环节被镜像制作过程替代了.也就是说,镜像的制作也包括运行环境准备和安装软件等两个主要环节,以及一些其他环节.因此,Docker 容器镜像其实并没有什么新的理论,只是这过程有了新的方式而已. 镜像(i