自己學Docker:4.開始了解Docker的工作模式
上一章在學習中有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的工作模式