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
来定制镜像。 下一篇博文介绍。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI
· 精选4款基于.NET开源、功能强大的通讯调试工具
· 数据不出内网:基于Ollama+OneAPI构建企业专属DeepSeek智能中台
· 大模型工具KTransformer的安装