Docker系列教程02-操作Docker容器

簡介

通過前面的學習,相信您已經對鏡像有所瞭解,是時候學習容器了。

容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個運行實例。正如從虛擬機模板上啓動VM一樣,用戶也同樣可以從單個鏡像上啓動一個或多個容器。

本章帶大家學習容器相關的重要操作,包括創建容器啓動容器終止容器進入容器後執行操作刪除容器及通過導入導出容器實現容器遷移容器與宿主機之間數據拷貝等。

1、創建容器

1、新建容器

語法格式:

docker create 語法

例如:

[root@qll251 ~]# docker create -it ubuntu:18.04
eeb931f21f0895d055bedcbe5829634309cbc24863eee6f80b14a131559ffd21

參數說明:

  • -i

保持標準輸入打開,用於控制檯交互

  • t

分配一個tty僞終端,支持終端登錄

2、啓動容器

使用docker create命令新建的容器處理停止狀態,可使用docker start啓動它。

例如,啓動剛剛創建的ubuntu容器:

[root@qll251 ~]# docker start eeb
eeb

eeb爲剛剛創建容器的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

 

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