完全掌握Docker學習之容器的使用

2022-01-17 19:00:59
本篇文章給大家帶來了關於docker中容器的使用,希望對大家有幫助。

執行一個容器

如果想要找到一個現有的映象,可以在公開的 Docker Hub 上搜尋,這裡可以找到它的介紹和用法,就像在 GitHub 上找一個開源專案一樣。

25.png

如果你是第一次使用 Docker Hub,可以先註冊一個賬號,在最頂上的搜尋方塊裡輸入 ubuntu ,找到的第一個結果就是官方的 ubuntu 映象,點開可以看到上圖的頁面。

這個頁面上有映象的一些基本資訊和用法介紹,右邊的 docker pull ubuntu 命令用來在本地拉取映象。在上一篇已經說過,當我們範例化一個容器時,如果 Docker 在本地找不到指定的映象,它會自動進行拉取,因此,我們可以直接在本地執行:

docker run -i -t ubuntu /bin/bash

這個命令比上次的範例多了一些引數,下面解釋一下:

  • -i 可以保證容器中開啟 STDIN

  • -t 會為容器分配一個偽 TTY 終端

  • ubuntu 是映象的名稱,相當於上個範例中的 hello-world

  • /bin/bash 是啟動後要在容器中執行的命令

其中 -i 和 -t 兩個引數可以使容器執行起來之後,我們可以與之互動。當容器建立完成,Docker 就會執行容器中的 /bin/bash 命令,因此,容器執行後我們的終端會附著到容器上:

26.png

此時,你可以在開啟一個終端,輸入 docker ps 命令,檢視已經啟動的容器,得到的結果如下:

CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS       PORTS     NAMES
402c5d3468d7   ubuntu    "/bin/bash"   4 hours ago   Up 4 hours             reverent_wu

這裡展示了容器的 ID、映象、最後執行的命令、建立時間、狀態、名稱。這裡的名稱 reverent_wu 是 Docker 自動生成的,如果需要在建立容器時指定名稱,可以使用 --name 來給容器命名。

深入容器內部

當前的狀態下,我們可以在附著到容器的終端執行任何 ubuntu 系統下支援的命令。比如,輸入 hostname 命令,發現容器的 hostname 就是它的容器 ID。

接著,可以看一下 /etc/hosts 檔案:

root@402c5d3468d7:/# cat /etc/hosts
127.0.0.1        localhost
::1        localhost ip6-localhost ip6-loopback
fe00::0        ip6-localnet
ff00::0        ip6-mcastprefix
ff02::1        ip6-allnodes
ff02::2        ip6-allrouters
172.17.0.2        402c5d3468d7

你也可以自己嘗試在容器中檢視程序,甚至使用 apt-get 安裝軟體包。

最後,可以輸入 exit 命令,推出容器,返回宿主機的命令提示字元。注意,此時再執行 docker ps 時發現,容器的列表中,已經沒有剛剛建立的 ubuntu 容器了。

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

當我們退出的時候,容器就停止執行了。不過,容器並沒有被刪除,可以通過 docker ps -a 命令,檢視所有建立的容器,無論容器啟動與否:

CONTAINER ID   IMAGE     COMMAND       CREATED       STATUS                     PORTS     NAMES
402c5d3468d7   ubuntu    "/bin/bash"   4 hours ago   Exited (0) 2 minutes ago             reverent_wu

這時,它的狀態變成了 Exited (0) 2 minutes ago ,表示它在 2 分鐘之前推出,退出的狀態碼是 0,表示正常退出。

我們可以通過一下的命令重新啟動這個容器:

docker start 402c5d3468d7

這個命令中,docker start 後面跟的是容器的 ID,也可以使用容器的名稱。執行成功後,再通過 docker ps 命令即可看到容器處於啟動狀態,通過 docker start 命令讓容器重新啟動後,會沿用 docker run 命令指定的引數,也就是啟動後會執行 /bin/bash 啟動一個 shell,但是我們並沒有進入到容器的命令列當中。可以通過 docker attach 命令再次進入:

docker attach 402c5d3468d7

此時,就可以繼續在容器中執行命令。

如果一個容器不再使用了,可以使用 docker rm 命令將它刪除。

docker rm 402c5d3468d7

提供持續的服務

更多的時候,我們使用容器來執行應用程式和服務,並希望它在後臺持續提供服務,這時候就需要以分離模式(或者叫守護模式)來執行容器。只需要在 docker run 後面增加一個 -d 引數,就可以讓容器放到後臺執行。

接下來,我們通過下面的命令再次執行一個容器:

docker run --name detached_mode -d ubuntu /bin/sh -c "while true; do echo Docker YYDS; sleep 1; done"

這一次,我們給這個容器明明叫 detached_mode,通過 -d 讓它以分離模式執行,並通過執行一段指令碼,每隔 1 秒鐘列印一行 Docker YYDS 。

因為它是以分離模式執行的,所以啟動後我們並不能在命令列看到列印的內容。但是可以通過 docker ps 命令看到容器在執行。

如果想讓他停止執行,可以使用 docker stop 命令。

docker stop detached_mode

同樣可以通過 docker start 命令再次啟動它,或者,可以通過 docker restart 重新啟動執行中的容器。

容器的執行狀態

在 detached_mode 容器執行的時候,可以通過 docker logs 命令獲取容器的紀錄檔。也可以增加 -f 來持續監控紀錄檔,類似於 tail -f 命令。

docker logs -f detached_mode

此時就可以看到一直有 Docker YYDS 被列印。

除了監控容器的紀錄檔,也可以使用 docker top 命令,檢視容器內的程序。

docker top detached_mode

27.png

使用 docker stats 命令,可以檢視容器的CPU、記憶體、網路I/O、儲存I/O的效能和指標。

28.png

另外,docker exec 命令可以在容器內部執行程序。

docker exec detached_mode cat /etc/hosts

以上命令可以讓我們直接檢視容器中的 hosts 檔案的內容,如果需要執行一個後臺程序,在指令後面增加 -d 引數就可以了。

容器的詳細資訊

使用 docker inspect 命令可以檢視容器的詳細資訊,其結果是一個 JSON 結構,包含的資訊非常豐富。可以通過 -f 或者 --format 來選定想要檢視的部分。

docker inspect --format '{{ .NetworkSettings.IPAddress }}' detached_mode

執行以上的命令,只會在命令列展示容器的 IP 地址。

推薦學習:《》

以上就是完全掌握Docker學習之容器的使用的詳細內容,更多請關注TW511.COM其它相關文章!