Docker實踐(三)容器
Docker中,容器是獨立執行的一個或一組應用,以及應用執行的環境;對應傳統的虛擬化,虛擬機器可以理解為模擬作業系統和執行在上面的應用。
啟動容器
啟動容器一般有兩種方式,一種是新建容器並啟動,一種是將終止狀態的容器重新啟動,Docker容器非常的輕量級,能夠很好的支援使用者隨時刪除和建立容器。
新建並啟動容器
docker使用docker run命令來新建並啟動容器,如:
例如如下命令表示輸出一個HelloWorld,之後終止容器。
|
下面是新建並啟動一個容器,包含bash終端,允許使用者進行互動
[[email protected] ~]# docker run -i -t centos:7.2.1511 bin/bash [[email protected] /]# uname -a Linux b3dbe17e8ce4 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [[email protected] /]# cat /proc/version Linux version 3.10.0-862.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018 [[email protected] /]# |
其中-i表示讓容器的標準輸入保持開啟,-t表示讓docker分配一個偽終端給容器,並繫結到容器的標準輸入上
docker run命令的執行步驟是:
- 檢查本地是否存在映象,如果沒有從共有倉庫下載
- 利用映象建立並啟動一個容器
- 分配一個檔案系統,並在只讀映象外面掛在一層可讀寫層
- 從宿主主機配置的網橋介面中橋接一個虛擬介面到容器中去
- 從地址池配置一個IP地址給容器
- 執行使用者指定的應用程式
- 執行完畢後容器被終止
啟動已終止容器
可以利用docker start命令,將一個已終止容器啟動執行。
容器的核心是所執行的應用程式,所需要的資源都是應用程式所必須的,除此之外沒有其他資源佔用,可以在偽終端中利用top或者ps命令檢視容器中的程序資訊。
|
可以看到容器中只運行了bash應用,所以docker的虛擬化是非常輕量級的,對資源的利用率非常高。
使用docker ps命令可以檢視docker容器列表,其中
預設,不加引數表示,所有啟動狀態的容器
|
使用 docker start啟動已終止容器
|
後臺(background)執行
一般情況下,需要docker容器在後臺執行,而不是將容器的命令執行結果輸出到宿主主機,後臺執行docker容器可以通過-d引數來實現。
執行下面的命令,使用-d,和不適用-d的效果。
|
|
後臺執行的容器,可以通過docker logs [容器id]命令來檢視容器命令的執行結果,如:
[[email protected] ~]# docker logs 48df4126c4a4 1 2 3 4 … … |
終止容器
使用docker stop來終止一個執行中的容器,如:
|
當docker容器中的應用程式終結時,docker容器也會終結,如只啟動/bin/bash終端的容器,當exit或者ctrl+d終結時,容器終止。
docker restart可以重新啟動一個容器
進入容器
使用docker run -d容器啟動的docker容器,可以使用docker attach命令或者nsenter命令進入容器,進行操作。
attach命令
|
attache命令使用時是有弊端的,當多個終端同事attach到一個容器中的時候,所有的視窗都會同步顯示,當某個視窗的應用阻塞是,所有的終端也都會阻塞。
nsenter命令
通過-d引數啟動容器後,根據容器id查詢容器資訊,容器資訊中包含容器的程序ID
|
通過這個程序id就可以連線到容器中去
|
匯入匯出容器
匯出容器
使用docker export命令匯出容器到本地檔案系統,匯出的檔案稱為容器的快照
|
匯入容器快照
使用docker import命令匯入本地快照為映象,並制定映象標籤
|
使用docker load,docker import,docker save,docker load命令的區別:
- docker import可以重新指定映象的名字,docker load不可以
- docker export是儲存容器的當前狀態,會丟失歷史資料和元資料
- docker save用於持久化映象,不會丟失歷史資料和元資料
- docker load用於匯入映象,不能指定映象的名稱
刪除容器
可以使用docker rm來刪除一個處於終止狀態的容器,但是不能刪除執行狀態的容器,如
[[email protected] lot]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e8941b320c4 centos:7.2.1511 "/bin/bash" 11 minutes ago Up 11 minutes zen_mirzakhani ebc3700aa8b1 centos:7.2.1511 "/bin/bash" 21 minutes ago Exited (0) 11 seconds ago eager_roentgen [[email protected] lot]# docker rm zen_mirzakhani Error response from daemon: You cannot remove a running container 6e8941b320c4d8a833944888bf421b07deba49d6dc8cdac0293cc7f1d7e91895. Stop the container before attempting removal or force remove [[email protected] lot]# docker rm eager_roentgen eager_roentgen [[email protected] lot]# |
如果要刪除執行狀態的容器,需要使用docker rm -f 命令來刪除
清理所有處於終止狀態的容器
刪除所有終止狀態的容器
docker rm $(docker ps -a -q)
刪除所有容器
docker rm -f $(docker ps -a -q)
(完)