完全掌握Docker學(xué)習(xí)之容器的使用

本篇文章給大家?guī)?lái)了關(guān)于docker中容器的使用,希望對(duì)大家有幫助。

完全掌握Docker學(xué)習(xí)之容器的使用

運(yùn)行一個(gè)容器

如果想要找到一個(gè)現(xiàn)有的鏡像,可以在公開(kāi)的 docker Hub 上搜索,這里可以找到它的介紹和用法,就像在 GitHub 上找一個(gè)開(kāi)源項(xiàng)目一樣。

完全掌握Docker學(xué)習(xí)之容器的使用

如果你是第一次使用 Docker Hub,可以先注冊(cè)一個(gè)賬號(hào),在最頂上的搜索框里輸入 ubuntu ,找到的第一個(gè)結(jié)果就是官方的 ubuntu 鏡像,點(diǎn)開(kāi)可以看到上圖的頁(yè)面。

這個(gè)頁(yè)面上有鏡像的一些基本信息和用法介紹,右邊的 docker pull ubuntu 命令用來(lái)在本地拉取鏡像。在上一篇已經(jīng)說(shuō)過(guò),當(dāng)我們實(shí)例化一個(gè)容器時(shí),如果 Docker 在本地找不到指定的鏡像,它會(huì)自動(dòng)進(jìn)行拉取,因此,我們可以直接在本地運(yùn)行:

docker?run?-i?-t?ubuntu?/bin/bash

這個(gè)命令比上次的示例多了一些參數(shù),下面解釋一下:

  • -i 可以保證容器中開(kāi)啟 STDIN

  • -t 會(huì)為容器分配一個(gè)偽 TTY 終端

  • ubuntu 是鏡像的名稱,相當(dāng)于上個(gè)示例中的 hello-world

  • /bin/bash 是啟動(dòng)后要在容器中執(zhí)行的命令

其中 -i 和 -t 兩個(gè)參數(shù)可以使容器運(yùn)行起來(lái)之后,我們可以與之交互。當(dāng)容器創(chuàng)建完成,Docker 就會(huì)執(zhí)行容器中的 /bin/bash 命令,因此,容器運(yùn)行后我們的終端會(huì)附著到容器上:

完全掌握Docker學(xué)習(xí)之容器的使用

此時(shí),你可以在開(kāi)啟一個(gè)終端,輸入 docker ps 命令,查看已經(jīng)啟動(dòng)的容器,得到的結(jié)果如下:

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

這里展示了容器的 ID、鏡像、最后執(zhí)行的命令、創(chuàng)建時(shí)間、狀態(tài)、名稱。這里的名稱 reverent_wu 是 Docker 自動(dòng)生成的,如果需要在創(chuàng)建容器時(shí)指定名稱,可以使用 –name 來(lái)給容器命名。

深入容器內(nèi)部

當(dāng)前的狀態(tài)下,我們可以在附著到容器的終端執(zhí)行任何 ubuntu 系統(tǒng)下支持的命令。比如,輸入 hostname 命令,發(fā)現(xiàn)容器的 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

你也可以自己嘗試在容器中查看進(jìn)程,甚至使用 apt-get 安裝軟件包。

最后,可以輸入 exit 命令,推出容器,返回宿主機(jī)的命令提示符。注意,此時(shí)再執(zhí)行 docker ps 時(shí)發(fā)現(xiàn),容器的列表中,已經(jīng)沒(méi)有剛剛創(chuàng)建的 ubuntu 容器了。

CONTAINER?ID???IMAGE?????COMMAND???CREATED???STATUS????PORTS?????NAMES

當(dāng)我們退出的時(shí)候,容器就停止運(yùn)行了。不過(guò),容器并沒(méi)有被刪除,可以通過(guò) docker ps -a 命令,查看所有創(chuàng)建的容器,無(wú)論容器啟動(dòng)與否:

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

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

我們可以通過(guò)一下的命令重新啟動(dòng)這個(gè)容器:

docker?start?402c5d3468d7

這個(gè)命令中,docker start 后面跟的是容器的 ID,也可以使用容器的名稱。執(zhí)行成功后,再通過(guò) docker ps 命令即可看到容器處于啟動(dòng)狀態(tài),通過(guò) docker start 命令讓容器重新啟動(dòng)后,會(huì)沿用 docker run 命令指定的參數(shù),也就是啟動(dòng)后會(huì)運(yùn)行 /bin/bash 啟動(dòng)一個(gè) shell,但是我們并沒(méi)有進(jìn)入到容器的命令行當(dāng)中。可以通過(guò) docker attach 命令再次進(jìn)入:

docker?attach?402c5d3468d7

此時(shí),就可以繼續(xù)在容器中執(zhí)行命令。

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

docker?rm?402c5d3468d7

提供持續(xù)的服務(wù)

更多的時(shí)候,我們使用容器來(lái)運(yùn)行應(yīng)用程序和服務(wù),并希望它在后臺(tái)持續(xù)提供服務(wù),這時(shí)候就需要以分離模式(或者叫守護(hù)模式)來(lái)運(yùn)行容器。只需要在 docker run 后面增加一個(gè) -d 參數(shù),就可以讓容器放到后臺(tái)運(yùn)行。

接下來(lái),我們通過(guò)下面的命令再次運(yùn)行一個(gè)容器:

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

這一次,我們給這個(gè)容器明明叫 detached_mode,通過(guò) -d 讓它以分離模式運(yùn)行,并通過(guò)執(zhí)行一段腳本,每隔 1 秒鐘打印一行 Docker YYDS 。

因?yàn)樗且苑蛛x模式運(yùn)行的,所以啟動(dòng)后我們并不能在命令行看到打印的內(nèi)容。但是可以通過(guò) docker ps 命令看到容器在運(yùn)行。

如果想讓他停止運(yùn)行,可以使用 docker stop 命令。

docker?stop?detached_mode

同樣可以通過(guò) docker start 命令再次啟動(dòng)它,或者,可以通過(guò) docker restart 重啟運(yùn)行中的容器。

容器的運(yùn)行狀態(tài)

在 detached_mode 容器運(yùn)行的時(shí)候,可以通過(guò) docker logs 命令獲取容器的日志。也可以增加 -f 來(lái)持續(xù)監(jiān)控日志,類似于 tail -f 命令。

docker?logs?-f?detached_mode

此時(shí)就可以看到一直有 Docker YYDS 被打印。

除了監(jiān)控容器的日志,也可以使用 docker top 命令,查看容器內(nèi)的進(jìn)程。

docker?top?detached_mode

完全掌握Docker學(xué)習(xí)之容器的使用

使用 docker stats 命令,可以查看容器的CPU、內(nèi)存、網(wǎng)絡(luò)I/O、存儲(chǔ)I/O的性能和指標(biāo)。

完全掌握Docker學(xué)習(xí)之容器的使用

另外,docker exec 命令可以在容器內(nèi)部運(yùn)行進(jìn)程。

docker?exec?detached_mode?cat?/etc/hosts

以上命令可以讓我們直接查看容器中的 hosts 文件的內(nèi)容,如果需要運(yùn)行一個(gè)后臺(tái)進(jìn)程,在指令后面增加 -d 參數(shù)就可以了。

容器的詳細(xì)信息

使用 docker inspect 命令可以查看容器的詳細(xì)信息,其結(jié)果是一個(gè) JSON 結(jié)構(gòu),包含的信息非常豐富。可以通過(guò) -f 或者 –format 來(lái)選定想要查看的部分。

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

執(zhí)行以上的命令,只會(huì)在命令行展示容器的 IP 地址。

推薦學(xué)習(xí):《docker視頻教程

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊9 分享
站長(zhǎng)的頭像-小浪學(xué)習(xí)網(wǎng)月度會(huì)員