zoukankan      html  css  js  c++  java
  • docker commit理解构建镜像(7)

    镜像是多层存储,每一层是在前一层的基础上进行的修改;

    而容器同样也是多层存储是在以镜像为基础层,在基础层上加一层作为容器运行时的存储层。

    当我们使用Docker Hub的镜像无法满足我们的需求时,我们就需要自己定制镜像来满足我们的需求。

    定制镜像:

    [root@server ~]# docker run --name webServer -d -p 80:80 nginx:1.11  #启动一个容器,基于docker hub上面的nginx:1.11镜像
    进入容器,修改显示页面:
    root@714830c04e5e:/# echo '<h1>Hello Docker Nginx Server</h1>' >/usr/share/nginx/html/index.html   #修改默认首页的内容
    root@714830c04e5e:/# exit
    exit
    [root@server ~]# docker diff webServer  #查看webServer容器改动的内容
    现在我们定制好了变化,我们希望能将其保存下来形成镜像。要知道,当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储器里。而Docker提供了一个 docker commit 命令,可以将容器的存储层保存下来称为镜像。
    [root@server ~]# docker commit 
    --author "ha li<jj@qq.com>" 
    --message "修复了默认首页" 
    webServer 
    nginx:v1
    新的镜像定制好后,我们来运行这个镜像
    
    [root@server ~]# docker run --name web1 -d -p 81:80 nginx:v1  #基于上面新建的nginx:v1启动一个名字为web1的容器

    不使用docker commit的原因

    1.使用docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像

    2.编译构建会产生大量依赖软件包,在删除软件的时候不会被删除,使得镜像异常的臃肿。

  • 相关阅读:
    EOJ 1068 石子游戏-B
    二分图匹配(匈牙利算法模板)
    注入(3)--远程线程注入(CreateRemoteThread)
    cmd运行Java命令时编译通过,但是找不到主类或无法加载主类
    Java线程的两种实现方法
    Java String类一些操作的内存问题
    Java构造方法的继承调用
    Android布局(5)--绝对布局(AbsoluteLayout)
    Android布局(4)--相对布局(RelativeLayout)
    Android布局(3)--帧布局(FrameLayout)
  • 原文地址:https://www.cnblogs.com/topass123/p/12592063.html
Copyright © 2011-2022 走看看