Docker入门之--定制镜像
1. 首先定制一个Web 服务器为例
1.1 启动镜像
执行下面命令 docker run --name webserver -d -p 80:80 nginx
1.2 查看容器和镜像状态
然后执行下面 docker images -a 和 docker 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入门之--定制镜像的更多相关文章
- Docker用Dockerfile定制镜像
用Dockerfile定制镜像 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那之前提示的无法重复的问题 ...
- Docker入门之二镜像
Docker大部分的操作都是围绕三大核心概念:镜像.容器.仓库.学Docker首先得了解这几个词.这几个词可能平时也会有涉及,但Docker中可能不是同样得概念. 一.三大核心概念 镜像:可能在安装软 ...
- Docker入门命令
Edit Docker入门命令 # 安装镜像sudo docker pull ubuntu:12.04# 镜像列表sudo docker images# 运行镜像sudo docker run -t ...
- docker之常用命令、自定制镜像、公(私)仓库的上传和下载
一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...
- Docker 学习笔记(二):Dockerfile 定制镜像
镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...
- Docker入门教程(九)10个镜像相关的API
Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...
- Docker - 定制镜像
Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...
- docker自定制镜像
概述 很多情况下我们需要自定制镜像,如果自定制过程中需要下载配置很多包,而且这些包之间还有依赖关系,那么如果我们手动去操作的话就会很麻烦,正确的做法是把操作的命令封装到一个文件里,然后直接执行这个文件 ...
- Docker学习笔记三 Dockerfile 指令 定制镜像
本文地址:https://www.cnblogs.com/veinyin/p/10412079.html 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
随机推荐
- 关于如何学习C语言
2016级计算机专业的C语言分为两个学期,第一学期是C语言(基础),第二学期是C语言(高级),在第一学期主要学习的内容是基本的数据类型,分支结构和循环结构,一维和二维数组,字符数组,函数.通过这学期独 ...
- 201621123031 《Java程序设计》第12周学习总结
作业12-流与文件 1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 在Java中的java.io包中定义了许多类专门负责处理各种方式的输入与输出.其中,所有输入 ...
- Python 实现双端队列 Deque
操作 Deque() 创建一个空的双端队列 add_front(item) 从队头加入一个item元素 add_rear(item) 从队尾加入一个item元素 remove_front() 从队头删 ...
- 如何使用ILAsm与ILDasm修改.Net exe(dll)文件
一.背景 最近项目组新上项目,交付的时间比较急迫,原本好的分支管理习惯没有遵守好,于是出现下面状况: 多个小伙伴在不同的分支上开发. 原本QA环境也存在一个阻碍性的bug A 一位同事在QA环境发布了 ...
- V7000数据恢复(存储文件系统损坏)案例_北亚数据恢复
我们今天介绍的数据恢复案例是一起 v7000存储文件系统损坏导致的数据丢失,首先简单介绍一下设备基本情况:发生文件系统损坏的是一台挂载在Windows2003服务器上的v7000存储,划分了一个容量为 ...
- Python设计TFTP客户端
#coding=utf-8 from socket import * from threading import Thread import struct def recvData(fileName, ...
- 3-51单片机WIFI学习(开发板8266底层源码介绍)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743502.html 直接上源码:注意源码有两部分,第一部分是一开始的时候写在模块内部的,另一部分是存在手机内 ...
- Python内置函数(22)——list
英文文档: class list([iterable]) Rather than being a function, list is actually a mutable sequence type, ...
- Mock API是如何在开发中发光发热的?
在长期的服务过程中,我们经常会遇到前来咨询的用户与我们反馈以下这种情况:咨询者是一个前端人员,在项目开发的过程中需要与后端进行对接,遇到后端还没完成数据输出的情况下,他只好写静态模拟数据,在遇到大型项 ...
- mosquitto验证client互相踢
cleint11A订阅topic#################################################### server发送topic消息 ############### ...