zoukankan      html  css  js  c++  java
  • 6.4docker(一)

    commit 理解镜像构成

    docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等

    现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的

    [root@node ~]# docker run --name webserver -d -p 80:80 nginx
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    如果出现 以下情况 进行以下操作 
    # vi /usr/lib/sysctl.d/00-system.conf
        net.ipv4.ip_forward=1
    # systemctl restart network
     查看是否修改成功
    # sysctl net.ipv4.ip_forward
     如果返回为“net.ipv4.ip_forward = 1”则表示成功了
    [root@node ~]# docker pull nginx 

    [root@node ~]# docker run --name webserver -d -p 80:80 nginx

     默认的 Nginx 欢迎页面。

    [root@node ~]# docker exec -it webserver bash
    root@0f5d744cb23c:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

     我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。

    现在我们定制好了变化,我们希望能将其保存下来形成镜像。

    要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 docker commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化。

    docker commit 的语法格式为:

    docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
    [root@node ~]# docker commit --author "Tao Wang <xxxx@qq.com>" --message "修改了默 认网页" webserver nginx:v2

     

    --author 是指定修改的作者,而 --message 则是记录本次修改的内容

    [root@node ~]# docker run --name web2 -d -p 81:80 nginx:v2

    docker commit

    使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

    首先,如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的 /usr/share/nginx/html/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。

    此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为 黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体在操作的。虽然 docker diff 或许可以告诉得到一些线索,但是远远不到可以确保生成一致镜像的地步。这种黑箱镜像的维护工作是非常痛苦的。

    而且,回顾之前提及的镜像所使用的分层存储的概念,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用 docker commit 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到。这会让镜像更加臃肿。

  • 相关阅读:
    Css几个兼容性问题
    一些常用的正则表达式
    超链接hover切换效果
    读取根目录src下的指定配置properties文件内容
    SQL Server查询表结构语句
    单独使用ibatis做事物控制。
    ibatis调用存储过程(无返回参数)
    oracle split函数
    Jquery调用Ajax实现联动使用json
    简单分页插件
  • 原文地址:https://www.cnblogs.com/guogle/p/10975841.html
Copyright © 2011-2022 走看看