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

1.1 启动镜像

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

1.2 查看容器和镜像状态

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

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

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

1.3 修改欢迎页

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

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

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

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

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

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

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

1.4 保存镜像

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

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

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

操作如下命令:

这样就打包好了。其实有个bug的地方,我 tag名字写成和原有的images 中的一样了,下面那张图可以看到我的错误。

可以用 docker history nginx:latest 来查看该镜像的历史记录,

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

然后打开网页输入 localhost:81

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

1.5 注意

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

Docker入门之--定制镜像的更多相关文章

  1. Docker用Dockerfile定制镜像

    用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...

  2. Docker入门之二镜像

    Docker大部分的操作都是围绕三大核心概念:镜像.容器.仓库.学Docker首先得了解这几个词.这几个词可能平时也会有涉及,但Docker中可能不是同样得概念. 一.三大核心概念 镜像:可能在安装软 ...

  3. Docker入门命令

    Edit Docker入门命令 # 安装镜像sudo docker pull ubuntu:12.04# 镜像列表sudo docker images# 运行镜像sudo docker run -t ...

  4. docker之常用命令、自定制镜像、公(私)仓库的上传和下载

    一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...

  5. Docker 学习笔记(二):Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...

  6. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  7. Docker - 定制镜像

    Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...

  8. docker自定制镜像

    概述 很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件 ...

  9. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

随机推荐

  1. 2017-2018-1 Java演绎法 小组成员贡献量汇总

    [第一周]贡献量(31) [说明] 完成情况 是指 每次是否全部完成分配的任务,如果全部完成贡献量记为1,否则记为0,与贡献量(时间量)相加计算贡献比例,由于前十周有具体的任务分配,Alpha阶段(第 ...

  2. 随机ID添加

    var http = require("http"); var fs = require("fs"); var server = http.createServ ...

  3. 在深度linux下安装pip3与jupyter

    前言 以下安装说明基于已经正确安装python3 文件下载 https://pypi.python.org/pypi/pip 下载pip-9.0.1.tar.gz (md5, pgp)文件 安装准备工 ...

  4. python 异步协程

    """A very simple co-routine scheduler. Note: this is written to favour simple code ov ...

  5. Java 后端微信小程序支付demo (网上说的坑里面基本上都有)

    Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...

  6. PostgreSQL 客户端乱码问题

    关于客户端和服务器端的乱码问题, POSTGRESQL字符集问题总结 总结的很详细, 特别棒. 这里让我头痛了很久的问题在于 终端 上字符编码的问题, 由于我的mbp上的 iterm2 的默认编码为 ...

  7. System.Reflection名称空间下的程序集类Assembly应用.

    利用反射中的程序集类(Assembly--抽象类)动态加载类库(.dll)或者可执行程序(.exe). 优点:①.可以消除if条件的逻辑判断.②.减少内存资源.③.有利于程序扩展. 缺点... 使用静 ...

  8. Java面试题(二)

    系统整理了一下有关Java的面试题,包括基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注:文末有福利! 1 ...

  9. Jenkins中展示HTML测试报告

    背景:测试报告是用reportNG生成的,属于java自动化测试项目. 1)         安装插件 首先要安装HTML Publisher plugin,这个在插件管理里面搜索并安装即可,如下我已 ...

  10. Mego开发文档 - 数据库建模

    数据库建模 我们还提供了一些其他的特性,用于定制化数据库对应的数据结构. 表映射 框架默认会使用CLR类型名称做为实际数据库的表名,当两者不一致时可以使用该特性强制表名称. [Table(" ...