• Docker入门之--定制镜像


    1. 首先定制一个Web 服务器为例

    1.1 启动镜像

    执行下面命令 docker run --name webserver -d -p 80:80 nginx

    1.2 查看容器和镜像状态

    然后执行下面 docker images -a docker ps -a ,发现如下图所示,

    Screen Shot 2017-06-21 at 14.11.33.png

    说明容器已经启动起来了,打开网页输入localhost,则会看到nginx 的欢迎界面。如下图所示,

    Screen Shot 2017-06-21 at 14.11.09.png

    如果我们不想要这个欢迎页,改变一下。

    1.3 修改欢迎页

    在命令行输入docker exec -it webserver bash,

    Screen Shot 2017-06-21 at 14.20.44.png

    这里需要解释一波 -it 其实是两个指令

    -i 表示交互式操作,-t 表示终端。 因为我们需要进入终端进行一些操作,所以需要-it

    echo 指令相当于我用 Hello,Robert! 替代了原始的index.html 中的内容。

    Screen Shot 2017-06-21 at 14.20.39.png

    刚才的操作 我们修改了容器的存储层 。

    在上一篇博文我们知道,最佳实践是: 容器不应该往存储层写入任何数据,容器存储层要保证无状态,所有文件的写入,应该用 数据卷(volume)。

    经过刚才的操作之后,你可能想知道这个 webserver 容器我对它进行了什么操作。这时候你可以用 docker diff webserver 哈哈,是不是和git 很像。

    Screen Shot 2017-06-21 at 14.36.42.png

    1.4 保存镜像

    我们修改好了Robert 定制的 Nginx Container ,你是不是想把其保存成镜像啊。

    当运行一个容器的时候(不使用volume 时),所做的任何修改都会被记录与容器存储层中,可以使用 docker commit 将容器的存储层保存下来为镜像, 根据上一篇博文中,我们知道docker 是分层存储。我们刚才的操作,相当于,在原有的基础上,再叠加上我们刚才的存储层,就形成了新的镜像。

    具体操作如下:
    docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

    操作如下命令:
    Screen Shot 2017-06-21 at 14.47.10.png

    这样就打包好了。其实有个bug的地方,我 tag名字写成和原有的images 中的一样了,下面那张图可以看到我的错误。
    Screen Shot 2017-06-21 at 14.49.32.png

    可以用 docker history nginx:latest 来查看该镜像的历史记录,
    Screen Shot 2017-06-21 at 14.52.21.png

    然后我们启动这个“新的”容器,
    执行命令 docker run --name webserver2 -d -p 81:80 nginx:latest

    然后打开网页输入 localhost:81
    Screen Shot 2017-06-21 at 14.56.20.png

    其实到这,“游戏”已经结束了,这就是用commit 来暗箱操作一个镜像。哈哈。

    1.5 注意

    其实上面的例子只是用来 用 commit 来理解 docker 的分层存储,实际环境中不会这样用的。我们仔细看一下上面的 docker diff 的操作发现, 虽然我们只是修改了 index.html 但是好像其他东西也跟着修改了。有些东西,添加或修改了,这将导致 images 越来越 “胖”。一般来说,都是使用 Dockerfile 来定制镜像。 下一篇博文介绍。

  • 相关阅读:
    【openCV学习笔记】【2】读取并播放一段视频
    Net WebApi中使用Swagger
    .pfx格式和.Cer格式的区别
    数字证书原理
    ASP.NET发送电子邮件
    WindowsAzure上把WebApp和WebService同时部署在一个WebRole中
    JS原型与原型链终极详解
    三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
    二、ASP.NET MVC Controller 控制器(一:深入解析控制器运行原理)
    一、ASP.NET Routing路由(深入解析路由系统架构原理)
  • 原文地址:https://www.cnblogs.com/xiyin/p/7059286.html
Copyright © 2020-2023  润新知