Docker(二)--搭建系统镜像(ubuntu)以及强制推出容器后的恢复

一.概念解释

1.镜像的分层结构

  • 共享宿主机的kerne
  • base镜像提供的是最小的Linux发行版
  • 同一docker主机支持运行多种Linux发行版
  • 采用分层结构的最大好处是:共享资源
    在这里插入图片描述

2.Copy-on-Write可写容器层

  • 容器层以下所有镜像层都是只读的
  • docker从上往下依次查找文件
  • 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
  • 一个镜像最多127层

3.镜像的构建
docker commit 构建新镜像三部曲:

  • 运行容器 docker run -it --name test busybox
  • 修改容器(以下命令在容器内运行) echo helloworld > testfile
  • 将容器保存为新的镜像 docker commit test test:v1

使用docker commit构建镜像的缺点:

  • 效率低、可重复性弱、容易出错
  • 使用者无法对镜像进行审计,存在安全隐患

4.ubuntu系统简介

centos与ubuntu的用法区别:

centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。 在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码)
在线安装软件中,centos使用的是yum命令,而ubuntu中使用的是apt-get命令。除此之外yum中还有一个从软件源中搜索摸个软件的方法:yum search + 软件名
centos是来自于redhat,所以centos支持rpm格式的安装,而ubuntu显然是不支持的
有某条命令,只有centos支持,Ubuntu不支持,在转移的过程当中运维就得想办法解决这样的问题,这时候要是有docker我们就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。

二.利用docker使ubuntu在centos上的应用

1.导入ubuntu镜像

[root@server1 ~]# docker load -i ubuntu.tar 
56abdd66ba31: Loading layer  196.8MB/196.8MB
9468150a390c: Loading layer  208.9kB/208.9kB
11083b444c90: Loading layer  4.608kB/4.608kB
5f70bf18a086: Loading layer  1.024kB/1.024kB
Loaded image: ubuntu:latest

2.为ubuntu创建容器,可以看到与系统共用一个内核,并且通过桥接docker0和内核建立通信.

在这里插入图片描述
在这里插入图片描述

3.在退出之后查看出现docker0桥接,如果不显示桥接命令可以安装桥接相应的软件

查看brctl命令所需安装包并且安装:
在这里插入图片描述

[root@server1 ~]# yum install -y bridge-utils.x86_64 
[root@server1 ~]# ip a

在这里插入图片描述
在这里插入图片描述4.建立文件并且按ctrl+d强制退出,查看时显示该容器不可用,但是查看所有容器时可以看到刚刚强制退出的容器

ctrl +qp可以再次进入,ctrl+d推出后就进不了了

在这里插入图片描述

三.容器的恢复

1.连接vm1(此处不需要开启docker),在容器ubuntu中创建5个文件

[root@server1 ~]# docker attach vm1
root@59ba3c5e1616:/# 
root@59ba3c5e1616:/# ls
root@59ba3c5e1616:/# touch file{1..5}
root@59ba3c5e1616:/# ls
#使用exit关闭docker
root@59ba3c5e1616:/# exit

在这里插入图片描述
2.退出容器后使用查看docker的进程,发现此时没有ubuntu,说明已经关闭

[root@server1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@server1 ~]# docker ps -a			#使用参数-a可以发现ubuntu,因为其既可以显示正在运行的容器,也可以显示关闭了的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1a56aaa003df        ubuntu              "/bin/bash"         39 seconds ago      Exited (0) 13 seconds ago                       vm1

3.开启容器vm1并连接,此时发现容器内的内容没有变化

[root@server1 ~]# docker start vm1
vm1
[root@server1 ~]# docker attach vm1
root@1a56aaa003df:/# 
root@1a56aaa003df:/# ls
bin   etc    file3  home   media  proc  sbin  tmp
boot  file1  file4  lib    mnt    root  srv   usr
dev   file2  file5  lib64  opt    run   sys   var
root@1a56aaa003df:/# exit

在这里插入图片描述
在容器中写内容(保存)
1.在原来镜像的基础上新建一个读写层

[root@server1 ~]# docker images
-m表示说明,ubuntu:v2中的v1表示以v3的方式
[root@server1 ~]# docker commit -m "add files" vm1 ubuntu:v2
[root@server1 ~]# docker images

在这里插入图片描述
2.查看新建的ubuntu分层结构
在这里插入图片描述3.删除容器vm2,再次运行新建的读写层时,发现此时内容没有丢失

[root@server1 ~]# docker rm vm1
[root@server1 ~]# docker run -it --name vm1 ubuntu:v2
root@c5c71f83f7db:/# 
root@c5c71f83f7db:/# ls
#为了使环境干净,删除掉10个文件后并退出
root@c5c71f83f7db:/# rm -f file*
root@c5c71f83f7db:/# ls
root@c5c71f83f7db:/# exit

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章