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

在這裏插入圖片描述

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