通過前面的學習,相信您已經對鏡像有所了解,是時候學習容器了。
容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個運行實例。正如從虛擬機模板上啟動VM一樣,用戶也同樣可以從單個鏡像上啟動一個或多個容器。
本章帶大家學習容器相關的重要操作,包括創建容器、啟動容器、終止容器、進入容器後執行操作、刪除容器及通過導入導出容器實現容器遷移、容器與宿主機之間數據拷貝等。
1、創建容器1、新建容器語法格式:
docker create 語法例如:
[root@qll251 ~]# docker create -it ubuntu:18.04
eeb931f21f0895d055bedcbe5829634309cbc24863eee6f80b14a131559ffd21參數說明:
保持標準輸入打開,用於控制臺交互
分配一個tty偽終端,支持終端登錄
2、啟動容器使用docker create命令新建的容器處理停止狀態,可使用docker start啟動它。
例如,啟動剛剛創建的ubuntu容器:
[root@qll251 ~]# docker start eeb
eebeeb為剛剛創建容器的ID簡寫,此時通過docker ps查詢容器已運行:
3、新建並啟動容器docker run 語法
例如,使用 ubuntu 鏡像啟動一個容器,參數為以命令行模式進入該容器:
[root@qll251 ~]# docker run -it ubuntu /bin/bash
root@8b18b6758bb6:/#docker run相當於執行了兩個步驟:將鏡像放入容器中(docker create),然後啟動容器(docker start)。
4、後臺運行容器對於剛剛所創建的容器,當用戶使用exit命令退出後,容器也會自動退出,如下圖所示的Exited狀態。
Exited狀態因為對它來說,當容器的應用退出後,容器使命完成,也就沒有繼續運行的必要了。
因此更多時候,我們希望 Docker 容器是在後臺一直運行。此時可以通過添加-d參數來實現。驗證如下:
添加 -d 參數實現容器後臺運行
小知識點:如果不指定後臺運行容器,還有其他辦法退出而容器不關閉嗎?按Ctrl+P+Q即可實現正常退出不關閉容器。驗證如下:
2、停止容器1、暫停容器docker pause 語法
例如,暫停容器中所有的進程
處於paused狀態的容器,可以使用docker unpause命令恢復到運行狀態,如圖:
docker unpause 命令2、終止容器docker stop 語法
舉例:
該命令首先向容器發送SIGTERM信號,等待一段超時時間後(默認為10秒),再發送SIGKILL信號來終止容器:
[root@qll251 ~]# docker stop 021
021
3、強制終止容器此外,還可以通過docker kill 直接發送SIGKILL信號強制終止容器。例如:
[root@qll251 ~]# docker kill 021
021
4、刪除所有停止狀態的容器[root@qll251 ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 1.1 GB
[root@qll251 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@qll251 ~]#
3、進入容器當容器在後臺運行時,用戶是無法操作容器的。這個時候如果需要進入容器進行操作,推薦使用exec命令,語法格式如下:
docker exec 語法
例如,進入一個容器,並啟動一個bash:
[root@qll251 ~]# docker exec -it 021 /bin/bash
root@0215d56eaf7d:/#通過指定-it參數保持標準輸入打開,並且分配一個偽終端。
進入容器後,我們可以進行操作,比如創建文件和列出當前運行進程:
操作容器4、刪除容器
docker rm 語法
例如,刪除處於終止狀態的容器:
默認情況下,docker rm命令只能刪除處於終止或退出狀態的容器,並不能刪除處於運行狀態的容器。如果要直接刪除運行狀態的容器,可以添加-f實現:
實際上,指定-f 參數時,Docker先發送SIGKILL信號給容器,終止其中的應用,之後強行刪除。
更多關於容器刪除的方法,參考文末本章命令小結
5、導入導出容器docker的一大優勢就是可移植性,容器可以隨意的進行導入導出操作。下面一起看下具體怎麼操作。
1、導出容器將容器導出到一個文件中,可以使用docker export,命令格式如下:
docker export 語法
例如,將容器79b導出到/data/myubuntu.tar文件
[root@qll251 ~]# docker export 79b > /data/myubuntu.tar
[root@qll251 ~]# ls /data/
myubuntu.tar
[root@qll251 ~]#注意:不管容器是否處於運行狀態,都可以將容器導出到一個文件。
2、導入容器可以使用docker import從容器快照文件中再導入為鏡像,命令格式如下:
docker import 語法
例如,使用docker import將導出的myubuntu.tar文件導入為鏡像,並且重新指定標籤為qinlulu/ubuntu:v1,代碼如下:
還記得上一章節,我們講過docker load載入鏡像嗎?花1分鐘回顧下:
兩者區別
1、docker load的對象是鏡像文件
2、docker import的對象是容器快照
3、用戶既可以使用docker load導入鏡像文件到本地鏡像庫,也可以使用docker import導入容器快照到本地鏡像庫。
4、兩者的區別在於,使用容器快照文件導入的鏡像將丟失所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像文件導入的鏡像將保存完整記錄,體積也要大。
5、此外,從容器快照文件導入鏡像時,可重新指定標籤等元數據信息。
6、查看容器1、查看容器詳細信息docker inspect
上圖返回的是一個JSON格式,包含容器ID、創建時間、路徑、狀態、鏡像、配置等各項信息
2、查看容器內進程docker top這個命令類似於Linux系統中的top命令,查看容器中運行的進程信息
3、實時監控容器資源數據docker stats命令用來返回運行中的容器的實時數據流,包括CPU、內存、存儲、網絡等使用信息的實時統計信息。例如:
docker stats
默認情況下,stats命令會每隔1秒鐘刷新一次內容,直到按下 Ctrl + c。如果不想持續監控,可以通過添加--no-stream參數 只輸出當前的狀態。
7、容器與宿主機之間的數據拷貝老規矩,我們先下看官方給出的docker cp用法。
docker cp 語法
可以看懂英文吧?我要囉嗦一句了,混跡技術圈,如果學不好英語,不說被淘汰,很可能將一直是「碼農」。當然,實在看不懂- -help 內容也不打緊,常用命令我都列舉出來啦,例如:)
1、將宿主機上的/data目錄拷貝至容器dba277的/test123目錄:
如上圖所示,宿主機上/data目錄下所有文件已拷貝到容器中,並且目錄重命名為/test123
2、將容器dba277的/test123目錄拷貝到宿主機/tmp目錄下
本章命令小結1、新建容器docker create -it ubuntu:18.04
2、啟動容器docker start 「容器ID」
3、新建並啟動容器1、以交互式模式新建容器
docker run -it ubuntu /bin/bash
2、以後臺方式運行容器
docker run -itd ubuntu /bin/bash
3、創建容器時指定主機名
docker run -itd --name test ubuntu:18.04 /bin/bash
4、容器運行5秒鐘後自動刪除容器
docker run -it --rm ubuntu:18.04 sleep 5
4、停止容器1、暫停容器
docker pause '容器ID'
2、將容器恢復到運行狀態
docker unpause '容器ID'
3、終止容器
docker stop '容器ID'
4、強制終止容器
docker kill '容器ID'
5、進入容器docker exec -it "容器ID" /bin/bash
6、刪除容器1、刪除處於終止狀態的容器
docker rm '容器ID'
2、刪除運行中的容器(不建議操作)
docker rm -f '容器ID'
3、刪除所有停止狀態的容器
docker container prune
----其實也可以使用 docker rm `docker ps -aq`刪除所有未運行的容器
----舉一反三,那刪除本地鏡像庫的所有鏡像命令就是 docker rmi `docker images`呢(操作需謹慎!)
7、導入導出容器1、導出容器
docker export 79b > myubuntu.tar
2、導入容器
docker import myubuntu.tar qinlulu/ubuntu:v1
8、查看容器1、查看容器詳細信息
docker inspect '容器ID'
2、查看容器內進程
docker top '容器ID'
3、實時監控容器資源數據
docker stats '容器ID'
9、容器與宿主機之間的數據拷貝1、將宿主機上的/data目錄拷貝至容器dba277的/test123目錄
docker cp /data dba277:/test123
2、將容器dba277的/test123目錄拷貝到宿主機/tmp目錄下
docker cp dba277:/test123 /tmp
結語如果您看完本文後有所收穫, 還希望您隨手點個在看 、或者分享轉發。您的支持是我堅持分享的最大動力!