1. 程式人生 > >自己學Docker:4.開始了解Docker的工作模式

自己學Docker:4.開始了解Docker的工作模式

view 關於 inspect ttr popu start split 一點 a20

上一章在學習中有2個疑問:

  1. 怎樣保存我們在容器裏的改動?
  2. 假設apt-get假設不能安裝時,怎樣在Docker中安裝軟件?

關於run創建的容器問題

對於第一個問題。原來每次運行(當非root用戶時,須要在命令前加sudo)

sudo docker run -i -t docker/whalesay /bin/bash

都會創建一個新的容器,這一點應該是明白的。

可是退出時,創建的容器並沒有被刪除,還是存在與系統中的。通過,

sudo docker ps -a

能夠查看。


技術分享
列表中。第一列CONTAINER ID 就是鏡像的ID,上表中第一個也就是id為7409de9e92f0就是我上一篇中創建的安裝了vim的容器。
IMAGE

就是創建該容器使用的鏡像。
COMMAND 是鏡像最後運行的動作。
CREATED 是創建時間。
STATUS是容器當前狀態。


PORTS
NAMES是為容器取得唯一的名稱。

這個那麽默認是docker在運行run創建容器是命名的。假設我們想指定名稱須要使用name選項,

sudo docker run -i -t --name test docker/whalesay /bin/bash

這樣創建的容器名稱就是test。
技術分享
就像上面的id為cc8a23b1d624的容器。
當我們再次創建名稱為test容器時就會出異常。
技術分享
這也說明。docker容器的名稱要是唯一的。


可是上面的提示信息提示在創建名稱為test的容器時,與id為“cc8a23b1d624a63ec2147b7f1a6f965852df4a20e3ca1f50bbb08d3dabaccf0b”容器沖突。

這個id卻不是ps -a列出來的test的id的cc8a23b1d624。

那麽這個長id是哪裏來的。
這就涉及到docker run命令創建的容器在本地怎樣保存了。

默認docker創建的容器都保存早文件夾:

/var/lib/docker/

查看這個文件夾須要權限,所以我們可能須要切換到root用戶下。
技術分享
這裏就能夠看到上面的id”cc8a23b1d624a63ec2147b7f1a6f965852df4a20e3ca1f50bbb08d3dabaccf0b”了。這也是docker創建容器保存的地方。
進去看下。相應的文件夾下保存在該容器的描寫敘述文件。


技術分享
通過,

sudo docker inspect ID

能夠查看容器配置具體信息,
技術分享
此時,會返回一個json格式的信息。

簡說Docker工作模式

為什麽會產生這些文件,這就要涉及到docker的工作模式。
Docker在創建容器時。Docker這時會載入我們指定的僅僅讀鏡像。並在其上加入一個讀寫層(即將鏡像文件夾復制一份到/var/lib/docker/aufs/mnt以ID為文件夾下,這個id就是我們上面看到的長id。這時假設我們使用chroot進入此文件夾,會發現其文件夾結構與容器裏面的文件夾一樣)。

假設運行中的容器改動現有的一個已經存在的文件,那該文件將會從讀寫層以下的僅僅讀層拷貝到讀寫層,該文件的僅僅讀版本號仍然存在,僅僅是已經被讀寫層中的該文件的副本所隱藏。當刪除docker容器。並通過該鏡像又一次啟動時,之前的更改將會丟失。
這也就是為什麽,當我們已run再次啟動容器時,之前的改動都沒了的原因。

進入之前創建的容器

既然我們創建的容器被已可寫的方式保存了下來,我們應該是能夠再次進入的。

上面我們已經知道怎樣列出創建過得容器。就像我們上一篇安裝了vim的容器id–7409de9e92f0。
容器的id知道了,如今該想辦法再次進入這個容器了。之前我們已經退出了容器。要想再次進入首先就要再次啟動它。

sudo docker start ID/NAME

後面指定id-7409de9e92f0,或者name-pensive_darwin。
技術分享
能夠看到。id為7409de9e92f0的容器狀態變成啟動了“Up 3 seconds”。
然後我們就能夠進入該的容器了,

sudo docker attach ID/NAME

技術分享
這裏能夠看到,我們進入了id為7409de9e92f0的容器,相同。通過dpkg命令能夠看到,我們上次安裝的vim也是存在的。

這次就先到這裏,盡管沒有全然解決之前的兩個問題。可是對Docker的理解有深入了一點,相信問題總會解決的。

自己學Docker:4.開始了解Docker的工作模式