【Docker-k8s学习和实战】(四)Docker生命周期 && 利用docker实现在CentOS上再运行三种不同的操作系统

❤️ 专栏简介 :本专栏我们会从最基础的内容开始学习Docker的相关内容,循序渐进的掌握Docker知识并进行实战。

☀️ 专栏适用人群 :适用于具备基础 Linux 知识的 Docker 初学者,当然希望各位有经验的docker开发者不吝赐教。

🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。

🍄 专栏地址:https://blog.csdn.net/anchenliang_1002/category_11878561.html

在这里插入图片描述

这一节我们要学习的内容主要有两个:
1、docker的生命周期
2、利用docker实现在CentOS上再运行三种不同的操作系统;即基于一个linux宿主机本体,运行出不同的操作系统(如centos、ubuntu、suse等);

一、docker的生命周期

什么是生命周期?所谓生命周期,就是从诞生,到使用,到销毁的一整个完整的过程。我们来看一下docker使用过程中的生命周期,我们只要把下面这张docker的生命周期图整明白了,那么docker我们也就明白的差不多了;docker整个的生命周期图如下:

在这里插入图片描述

下面详细解释一下各个过程:

1 Dockerfile:一个用于构建docker image的脚本(这个我们暂时还不会用到);Dockerfile其实就是一个脚本文件,作用是自定义一个docker镜像。回想一下上一节讲的nginx镜像,我们是从仓库里面pull拉取下来的,也就是说nginx镜像是官方提供好的,我们可以直接拿来用的;但是如果我们想在本地自定义的构建一个镜像呢?就得需要使用Dockerfile自己去写了。

2 通过build命令(docker build)可以构建dockerfile生成镜像image;我们生成的的镜像文件被images所管理;

3 在images中,我们可以通过docker images命令来查看有哪些镜像文件。images是存储在机器本地的;但是在本地存着就没办法跟别人交互。

4 如果想让本地的镜像文件和别人进行交互,就得通过网络并利用docker push命令传输到镜像仓库(Docker registry)中;镜像仓库类型有公开仓库(docker hub)和私有仓库(自行搭建);

5 我们还可以从镜像仓库中获取我们想要的镜像,即docker pull;例如我们前面上一节讲到的从镜像仓库中获取nginx镜像:docker pull nginx就是一个例子。

6 除了利用push和pull实现在网络中管理镜像,我们还可以利用saveload实现在本地管理镜像;docker save可以用于导出镜像为一个压缩文件;docker load可以用于导入镜像;这两个操作的作用主要是用于我们在公司工作过程中,和同事之间传递、分享镜像文件;

7 利用run命令(docker run),我们可以将镜像运行出一个具体的容器(containers),这个过程我们在上一节也利用nginx演示过了;

8 在容器(containers)内部,我们可以利用stop、start、restart等命令对容器进行操作了;docker stop +容器id/名字:停止容器;docker start +容器id/名字:启动容器;docker restart +容器id/名字:重启容器。

9 最后,commit的作用:当我们再容器中,进行新增或者修改等操作,定制安装了一些软件,并想要提交该容器生成一个镜像时,就要用到commit了(命令为docker commit +容器id);举个例子:我们获取了一个centos镜像,且是最小化安装的,连vim都没有,我们先(docker run centos)运行这个容器,运行这个容器时,我们是可以进入到容器内的,假设我们在容器内安装了一个vim,此时我们利用docker commit 容器id提交该容器,提交后生成的镜像就是携带了vim 的centos系统了;以后我们再次docker run此镜像生成的容器,就是携带vim的容器了。

二、利用docker实现在CentOS上再运行三种不同的操作系统(centos、ubuntu、suse)

本节中我们要在一个宿主机(cenos)上,再运行centos、ubuntu、suse三种不同的操作系统;

2.1 docker镜像基础和操作系统基础

2.1.1 docker镜像基础(浅谈)

我们先使用拉取redis(一个高性能的key-value数据库)镜像的例子来引入镜像原理这部分内容:
拉取redis镜像过程如下:

root@localhost acl]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Already exists 
c7a4e4382001: Pull complete 
4044b9ba67c9: Pull complete 
c8388a79482f: Pull complete 
413c8bb60be2: Pull complete 
1abfd3011519: Pull complete 
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest

在这里插入图片描述

我们在获取redis镜像的时候,发现是在下载了多行信息(红框中),最终又得到了一个完整的镜像文件(绿框中);下面我们来看一看docker的镜像原理。

2.1.2 操作系统基础(重要)

在学习docker镜像之前,我们先来看一下操作系统长什么样子。不知道你有没有思考过,我们一直使用的linxu系统,都包括了哪些内容?

如下图所示:

在这里插入图片描述
linux内核只有一个正统来源,那就是linus的开发团队。内核只是提供操作系统的基本功能和特性,如内存管理,进程调度,文件管理等等。linux内核加上不同的发行版就组成了完整的操作系统,比如linux内核+centos发行版就组成了完成的centos操作系统,里面有yum软件包管理;linux内核+Ubuntu发行版就组成了完成的Ubuntu操作系统,里面有apt软件包管理;linux内核+suse发行版就组成了完成的suse操作系统,里面有yast2软件包管理。

所以我们一直以来使用的CentOS 7系统,不论是纯系统,还是虚拟机vmware上安装的centos系统,都是一个完整的系统文件,包括两部分:

  • linux内核,作用是提供操作系统的基本功能,和机器硬件交互;比如读取磁盘数据,管理网络等
  • centos 7发行版,作用是提供软件功能,例如yum安装包管理等

因此,linux内核+centos发行版,就组成了一个系统,提供给我们用户使用;同样的,如果是Ubuntu系统,它的组成也是有两部分,即linux内核+Ubuntu发行版。

我们在centos上查看组成我们系统的两大部分:

[root@localhost acl]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@localhost acl]# 
[root@localhost acl]# 
[root@localhost acl]# uname -r
3.10.0-1160.el7.x86_64

可以看到,我的centos系统,内核版本是3.10.0-1160.el7.x86_64,linux发行版是CentOS Linux release 7.9.2009 (Core)

2.2 在CentOS上在运行三个其他系统

2.2.1 原理介绍

那现在有个问题来了,有没有一个办法,可以灵活的替换发行版,让我们使用不同的【系统】?
有,docker就实现了这个功能,技术手段就是docker images

总体的实现就是:内核都公用宿主机的内核;但是上层的发行版,可以自由替换;
具体实现过程如下图:

在这里插入图片描述
在我们centos7系统里,安装不同的docker容器,每个容器里运行着对应的linux发行版,他们共用宿主机的内核;比如,如果我们相用centos系统,那么我们就安装centos7发行版的容器,此时linux内核+centos7容器,就有了centos7系统;然后我们再安装一个Ubuntu容器,此时linux内核+Ubuntu容器,就有了Ubuntu系统;最后我们再安装一个suse容器,此时linux内核+suse容器,就有了suse系统;此时,我们的centos宿主机上就通过三个不同发行版的容器,有了三个不同的系统。

2.2.2 在CentOS宿主机上再运行一个CentOS系统

下面我们来实践一下,利用docker,来切换不同的发行版,内核使用的都是宿主机的内核:

#利用docker获取不同的发行版镜像
#拉取centos 7.8.2003版本
docker pull centos:7.8.2003
#拉取Ubuntu镜像
docker pull ubuntu

此时我们获取了7.8.2003版本的centos镜像和Ubuntu镜像,下面我们使用docker images看一下,并确认一下当前的宿主机发行版:
在这里插入图片描述
可以看到,我们当前有Ubuntu容器镜像和7.8.2003版本的centos镜像,并且当前宿主机的发行版是7.9.2009。

然后运行7.8.2003 centos镜像和Ubuntu镜像:

首先运行7.8.2003 centos的镜像:

#运行afb6fca791e0容器,且进入容器内
#afb6fca791e0是7.8.2003centos的镜像id
docker run -it  afb6fca791e0 bash
#参数解释:-i 交互式命令操作, -t开启一个终端   bash 进入容器后执行的命令

运行结果如下:

在这里插入图片描述
可以看到,指令运行成功后,我们的用户名由原来的localhost acl变成了15a8949effe6,这就表明我们由原来的宿主机环境,进入到了7.8.2003 版本的centos容器环境内;
那我说是进入了7.8.2003 版本的centos容器环境内就是进入7.8.2003 版本的centos容器环境内了嘛?怎么证明呢?
我们再查看一下当前发行版本:
在这里插入图片描述
发现当前的centos发行版本确实是7.8.2003,说明我们确实进入了7.8.2003版本的centos容器内部了;因为我们的宿主机是7.9.2009版本的centos。

此时我们实现了在宿主机上centos起了一个其他发行版的centos,且共用宿主机的内核,即使用宿主机的内核+容器内的centos发行版;如下图所示:

在这里插入图片描述

2.2.3 在CentOS宿主机上再运行一个ubuntu系统

那如果我们不想用centos,想在宿主机上跑一个Ubuntu呢?

首先exit退出之前的centos容器镜像:
在这里插入图片描述
可以发现exit后,我们又回到了我们的宿主机环境localhost acl

再次查看发行版本:
在这里插入图片描述
发现确实是回到宿主机的环境了。

此时我们可以着手部署使用Ubuntu系统了,跟上面进入centos容器环境一样的步骤:

#运行Ubuntu容器,且进入容器内
docker run -it  ubuntu bash
#参数解释:-i 交互式命令操作, -t开启一个终端   bash 进入容器后执行的命令

结果如下:
在这里插入图片描述
发现已经进入ubuntu的环境内了,即实现了在centos宿主机上跑了一个ubuntu系统的容器,此ubuntu同样共用宿主机的内核,即使用宿主机的内核+容器内的ubuntu发行版,如下图:

在这里插入图片描述
此时我们再看一下容器内ubuntu发行版的信息:
在这里插入图片描述
发现我们成功实现了在centos宿主机系统中,又跑了一个ubuntu的系统。

如果想退出ubuntu镜像,同样使用exit命令:
在这里插入图片描述
可以发现exit后,我们又回到了我们的宿主机环境localhost acl

2.2.4 在CentOS宿主机上再运行一个suse系统

下面我们再在centos上跑一个suse系统,过程跟前面也差不多:

先查看一下有没有suse官方的镜像:

docker search suse

在这里插入图片描述
发现并没有suse官方镜像;
那我们再查看一下有没有开源suse官方的镜像:

docker search opensuse

在这里插入图片描述
我们发现,有一个官方的开源suse镜像。

那我们就下载一个开源suse镜像:

docker pull opensuse

此时再查看一下当前系统中的docker镜像都有哪些:

docker images

在这里插入图片描述
发现已经有opensuse的镜像了,接下来运行它生成suse容器:

docker run -it opensuse bash

在这里插入图片描述
可以看到已经进入suse容器内部了;
然后查看一下suse的发型版本:

 cat /etc/SuSE-release

在这里插入图片描述
可以看到,我们已经实现了在centos宿主机上,又运行了一个suse系统;此suse同样共用宿主机的内核,即使用宿主机的内核+容器内的suse发行版,如下图:
在这里插入图片描述
发现我们成功实现了在centos宿主机系统中,又跑了一个ubuntu的系统。

如果想退出suse镜像,同样使用exit命令:
在这里插入图片描述
可以发现exit后,我们又回到了我们的宿主机环境localhost acl

2.2.5 总结

1、一个完整的系统,是由linux的内核+发行版,才组成了一个可以使用的完整的系统;
2、利用docker容器,可以获取不同的发行版镜像,然后基于该镜像,运行出各种容器去使用。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

乘凉~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值