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 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
随机推荐
- 剑指Offer-二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路 分析二叉树的下一个节点,一共有以下情况: 二叉树 ...
- C#/AutoCAD 2018/ObjectArx/二次开发再说实体(六)
这些函数对大家很有用,如果想获取详细源代码请加云幽学院yunyou.ke.qq.com报名免费课程,如果想学习更系统.更全面的知识请报名收费课程,有大量开发案例共享. 1.获取模型空间中所有实体 #r ...
- Python处理图片缩略图
CPU 密集型任务和 IO 密集型任务分别选择多进程multiprocessing.Pool.map 和多线程库multiprocessing.dummy.Pool.map import os imp ...
- Tornado 网站demo 三
模板 修改index.py #!/usr/bin/env Python # coding=utf-8 import tornado.web import methods.readdb as mrd c ...
- Linux 磁盘和文件管理系统 文件打包解压备份 VIM、VI编辑器
- RE:1054652545 - 论自己是如何蠢死的
1.Java web 项目中 login/list 文件夹中return "login/list" 反复读取不到对应的jsp文件 一周后检查出来的原因上一级文件夹login前面多出 ...
- 新手入门 git
Git是目前世界上最先进的分布式版本控制系统 特点:高端大气上档次 什么是版本控制系统 系统自动记录文件改动 方便同事协作管理 不用自己管理一堆类似的文件了,也不需要把文件传来传去.如果想查看某次改动 ...
- JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
需求:定义一个函数交换数组中两个元素的位置. code 1: import java.util.*; class Demo3 { public static void main(String[] ar ...
- 腾讯云服务器上安装phstudy和lnmp
phpstudy的安装:wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #权限设置./phpstudy.bin ...
- Linq GroupBy
//Linq //var result = from p in personList // group p by p.Id // into grouped // select new { Id = g ...