【原创分享】容器专题分享系列五:构建容器镜像
  

不懂就问 267

本帖最后由 不懂就问 于 2020-3-21 22:08 编辑

一、知识回顾
上文和大家分享了容器镜像的基本结构,我们了解到容器镜像的分层结构和COW特性,今天我们来学习一下如何构建一个自己的容器镜像。
二、使用场景
大家在公有云上使用云主机时,经常发现云主机申请完毕后,没有一些常用的软件,于是我们就把经常用到的软件在云主机内安装好,再转成镜像,下次用自己制作的镜像申请云主机时,就不用重复安装软件了。
容器镜像构建也是基于这个思路,docker hub上提供了很多的base image,我们可以在base镜像的基础上,构建私有容器镜像。如果你认为自己构建的容器镜像质量还不错,对其他人帮助很大,可以将私有镜像push到docker hub,供其他人下载使用。
三、方式一:docker commit构建镜像
【功能说明】
可以将一个运行中的容器保存为镜像,背后实现逻辑:容器运行起来后,将容器最上层的可读写层和下面的只读层,打包组成一个新的镜像。
操作思路:
1、运行一个容器
2、自定义容器,修改容器内容
3、将容器保存为镜像
【操作演示】
1、运行一个容器:在后台运行一个nginx容器,取名为nginx-0321,并映射到宿主机8080端口。在操作pc电脑上可以通过IP:8080访问容器。
180885e760a651d702.png
657555e760a84b169d.png
2、自定义容器:进入容器,修改回显内容为“Welconme Sangfor Cloud”
268155e760ce07edef.png
804195e760cf43e9a7.png
3、将运行的容器保存为镜像,镜像名称为nginx0321-v1
851565e760ea92779b.png
4、比较镜像nginx和镜像nginx0321-v1,可以发现后者多了一个镜像层。
932935e760f82e46ce.png
四、方式二:dockerfile构建镜像
【功能说明】
DockerFile是文件指令集,描述如何自动创建Docker镜像。它包含若干指令的文本文件,可以通过这些指令创建出dokcer image。
Dockerfile文件中的指令执行后,会创建一个个新的镜像层。
Dockerfile一般由4部分组成:
  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令,操作指令不同,可以构建出不同的容器镜像。
  • 容器启动指令,设置镜像的默认启动命令。



【操作思路】
  • 创建dockerfile文件
  • vi编辑文件,格式由前面提到的四部分组成
  • 构建镜像



【dockerfile常用指令】
972785e7614419b7cd.png
【操作演示】
1、创建dockerfile文件:在/root/dockerfile路径下新建名为dockerfile-0321的dockerfile文件
76195e7615295885a.png
2、vi编辑文件:
  • 以httpd为base镜像,
  • 注明镜像维护作者,
  • 运行指定命令,修改index.html文件



624765e761a8a0ebf7.png
3、构建镜像,将dockerfile-0321文件构建名为httpd-0321的镜像
423635e761ba72d8d7.png
4、以新构建的镜像运行一个容器
266685e761d3ec59df.png
892745e761d594a0ff.png

喜欢这篇文章吗?喜欢就给楼主打赏吧!

打赏
8人已打赏

静态路由 发表于 2020-3-21 22:38
  
kubelet, master    Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "1c600d23fef1d3635054edf1d5fec19b601659391ef6fd6432f681f526796c58" network for pod "calico-kube-controllers-788d6b9876-qhwgm": networkPlugin cni failed to set up pod "calico-kube-controllers-788d6b9876-qhwgm_kube-system" network: error getting ClusterInformation: resource does not exist: ClusterInformation(default) with error: clusterinformations.crd.projectcalico.org "default" not found, failed to clean up sandbox container "1c600d23fef1d3635054edf1d5fec19b601659391ef6fd6432f681f526796c58" network for pod "calico-kube-controllers-788d6b9876-qhwgm": networkPlugin cni failed to teardown pod "calico-kube-controllers-788d6b9876-qhwgm_kube-system" network: error getting ClusterInformation: resource does not exist: ClusterInformation(default) with error: clusterinformations.crd.projectcalico.org "default" not found]
  Normal   SandboxChanged          10s (x8 over 105s)  kubelet, master    Pod sandbox changed, it will be killed and re-created.
Sangfor_闪电回_朱丽 发表于 2020-3-23 08:51
  
您好,感谢您参与社区原创分享计划7,您的文章已被收录到计划中,交由专家评审小组评审,文章标签在专家评审后设置,奖励将在活动结束后统一安排发放!发文越多,奖励越多,期待您更多的精彩文章哦!
关于技术文章的管理流程,请参考:https://bbs.sangfor.com.cn/forum.php?mod=viewthread&tid=90279
新手031815 发表于 2020-3-23 10:15
  
期待楼主更多的技术贴
司马缸砸了光 发表于 2020-3-23 10:35
  
来学习一波
新手741261 发表于 2020-3-23 11:30
  
步骤很详细,很不错
新手780102 发表于 2020-3-23 11:48
  
期待楼主更多的技术贴。
新手770264 发表于 2020-3-23 12:24
  
安装步骤清晰
flying 发表于 2020-3-24 12:15
  
感谢分享,认真学习了
新手081074 发表于 2020-3-24 14:16
  
感谢分享