关于Docker镜像再封装的详细文档

前言

      一般情况下,docker官网的镜像仓库非常完备,而且还有各大厂商的对外镜像仓库提供补充,我们的选择面非常之广,基本都能满足我们的需求。

      可是,当我们基于一个镜像的容器,作出了修改、开发、部署之后,把这个已经被改变的容器封装成一个镜像,好像也变成了一种需求。

      比如:我们下载了一个linux镜像,基于这个镜像我们启动了容器,在容器里面我们部署了自己开发的业务系统,或者是一个HTTP服务器,更或者是一个符合自己实际需求的ZABBIX监控系统,之后,我们为了分发或者方便使用,把这个经过业务系统部署的容器,进行了封装成镜像的操作。

      下面的内容,我们将以centos+http为例子,进行实际操作演示。

注意:宿主机为oracle linux 7.9,IP地址为192.168.31.51。

1、DOCKER状态检查

      我们查看docker的运行状态,并检查已经下载的镜像。

# systemctl status docker

# docker images

2、下载镜像

      我们访问http://hub.docker.com,搜索一个我们想要部署centOS版本,如图所示,我们选择了centOS 7.9。

      注:为什么在这里不用docker search centos命令进行搜索,因为在这里搜索出来的结果,很难分辨准确的版本号/TAG,可能你下载下来的镜像是latest版本。

# docker pull centos:centos7.9.2009

# docker images

3、启动镜像。

# docker run -d -p 5080:80 -p 5022:22 --privileged=true centos:centos7.9.2009  /usr/sbin/init

# docker ps

如上图所示,已经从镜像启动容器,并且容器也已经正常运行。

4、配置容器

     进入容器,并配置YUM信息。

[root@oel79 ~]# docker ps

[root@oel79 ~]# docker exec -it b96b2ffe448d /bin/bash

[root@b96b2ffe448d /]# cat /etc/yum.repos.d/system.repo

[root@b96b2ffe448d /]# yum clean all

[root@b96b2ffe448d /]# yum makecache

      注意:

  • 进入容器的操作,只能以容器ID来识别;其次YUM的配置根据实际需要进行即可,文中192.168.31.99是我为了测试方便,搭建的本地网络YUM源。

  • 如果想尝试搭建本地网络YUM源,以及更多的关于YUM和DNF的知识,可以访问本公众号文章:

LINUX环境下YUM的各种配置总结icon-default.png?t=M276http://mp.weixin.qq.com/s?__biz=MzI0MzczNDA0NA==&mid=2247483713&idx=1&sn=cc2cc0cfceca70370f3a0c95a422f01a&chksm=e969c232de1e4b24c0016109cb541f2316a453d2f90f7cb7a4caf5008a24e7904e2a306654ec&scene=21#wechat_redirect

5、测试容器访问

      在客户端使用ssh协议访问容器的对外映射端口192.168.31.51:5022,提示无法访问。

  • 进入容器,检查sshd服务,提示没有这个服务器;

  • 安装SSHD服务:

    [root@b96b2ffe448d /]# yum install -y openssh-*

    [root@b96b2ffe448d /]# rpm -ql openssh-server

    [root@b96b2ffe448d /]# systemctl start sshd

    [root@b96b2ffe448d /]# systemctl status sshd

  • 再次在客户端测试对容器的SSH连接,正常访问。

  • 在客户端测试访问http://192.168.31.51:5080,提示无法访问此网页。

  • 安装HTTPD服务:

[root@b96b2ffe448d /]# yum install -y httpd

[root@b96b2ffe448d /]# systemctl start httpd

[root@b96b2ffe448d /]# systemctl enabled httpd

[root@b96b2ffe448d /]# systemctl status httpd

  • 再次在客户端测试http://192.168.31.51:5080,正常访问。

  • 进入容器输入init 6,重新启动容器,继续测试ssh和httpd访问,正常。

6.查看centos镜像的分层结构。

      如图所示,我们从docker官方下载的centos镜像总共三层。

7.封装镜像

      经过前面的测试,我们知道centos镜像原本是没有ssh和http服务的,而目前,在基于centos启动的容器中,SSH和HTTP服务均正常运行,我们现在尝试将其进行封装。

# docker commit b96b2ffe448d centos-new

# docker images

      如上图所示,我们封装了一个名称为centos-new的镜像,我们再次查看这个镜像的分层结构。

      如下图所示,我们刚封装的centos-new镜像已经有了总共四层。

8、启动新封装的镜像。

# docker run -d -p 9080:80 -p 9022:22 --privileged=true centos-new:latest  /usr/sbin/init

# docker ps

      如图所示,新封装的镜像被启动到容器,容器的80端口被映射到宿主机的9080端口,而22端口被映射到宿主机的9022端口。

9、测试新容器的访问

  • 在客户端使用ssh协议测试192.168.31.51:9022的访问,正常。

  • 在客户端使用浏览器测试http://192.168.31.51:9080的访问,正常。

      至此,我们完成了docker镜像的封装测试,接下来我们可以把封装好的镜像进行上传,或者搭建自己网络内的docker本地仓库,进行这个镜像的分发,可以参考文档:Linux环境中部署docker私有仓库Registry实战文档icon-default.png?t=M276http://mp.weixin.qq.com/s?__biz=MzI0MzczNDA0NA==&mid=2247486479&idx=1&sn=ed2172ccd7f98c653ff3127e4f53f726&chksm=e969cf7cde1e466a02645235f4ed8d5751fea2bd7d0d86f712b925054988f86e585ce07494bc&scene=21#wechat_redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧天天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值