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 镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...
随机推荐
- synchronized 原理分析
synchronized 原理分析 1. synchronized 介绍 在并发程序中,这个关键字可能是出现频率最高的一个字段,他可以避免多线程中的安全问题,对代码进行同步.同步的方式其实就是隐 ...
- JavaWeb学习笔记四 request&response
HttpServletResponse 我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应res ...
- hibernate框架学习笔记6:事务
MySQL的事务.JDBC事务操作: 详细见这篇文章:比较详细 http://www.cnblogs.com/xuyiqing/p/8430214.html 如何在hibernate中配置隔离级别: ...
- Leetcode 17.——Letter Combinations of a Phone Number
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- [福大软工] W班 软件产品案例分析
作业要求 https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1300 评分细则 第一部分 调研,评测 (3 ...
- Alpha冲刺Day8
Alpha冲刺Day8 一:站立式会议 今日安排: 经过为期5天的冲刺,基本完成企业人员模块的开发.因第三方机构与企业存在委托的关系.第三方人员对于风险的自查.风险列表的展示以及自查风险的统计展示(包 ...
- 【Swift】iOS导航栏错乱的原因
#iOS开发高级技巧#导航栏错乱,也就是导航栏的显示效果与内容区不匹配,引发原因很多,其中最重要的有两个原因: 1.在viewwillappear,viewwilldisappear两个函数中,设置导 ...
- Python之旅.第三章.函数3.30
一.迭代器 1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来2.要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象?可迭代的对象:在python中,但凡内置 ...
- Gson序列化对象如何忽略字段
Gson序列化对象如何忽略字段 Gson版本 2.8.2 梗概 用注解@Expose(serialize = false, deserialize = false)在类的成员上以告诉Gson 跳过本字 ...
- Web Api 返回图片流
public class TestController : ApiController { public HttpResponseMessage GetImg() { //获取文件的绝对路径 stri ...