Docker 學習筆記(第三集:容器)

chenggx發表於2020-09-01

docker 容器

容器是通過 image 建立的程式。

映象(Image)和容器(Container)的關係,就像是物件導向程式設計中的 類 和 例項 一樣,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

新建並啟動容器

下面的命令的含義:通過 Ubuntu:18.04 這個 image 建立一個容器並執行 /bin/echo ‘Hello world’,完成後停止該容器。


$ docker run ubuntu:18.04 /bin/echo 'Hello world'

Hello world

使用 docker run 命令,後臺實際上執行的內容為:

  1. 檢查本地是否存在指定的映象,不存在就從公有倉庫下載

  2. 利用映象建立並啟動一個容器

  3. 分配一個檔案系統,並在只讀的映象層外面掛載一層可讀寫層(後面會學)

  4. 從宿主主機配置的網橋介面中橋接一個虛擬介面到容器中去(後面會學)

  5. 從地址池配置一個 ip 地址給容器(後面會學)

  6. 執行使用者指定的應用程式

  7. 執行完畢後容器被終止

上面的示例執行完以後會終止,但是一般我們在使用一個提供服務的容器的時候,不想讓它停止,那麼可以使用 -d 引數,使容器保持在後臺執行。但是需要注意——容器是否會長久執行,是和 docker run 指定的命令有關,和 -d 引數無關

如下命令執行完後,容器依然會停止


$ docker run -d ubuntu

已停止

而如下命令執行完後,容器則在後臺保持執行


$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

執行中

進入容器

attach 命令


$ docker run -dit ubuntu

ffff9516c6151ef3b436df1bccc70ba9da2d0f57bbec5afe19353fe481e12702

$ docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ffff9516c615 ubuntu "/bin/bash" 7 seconds ago Up 6 seconds elegant_hypatia

$ docker attach ffff9516c615

root@ffff9516c615:/#

注意: 如果從這個 stdin 中 exit,會導致容器的停止。

exec 命令(推薦使用,一般配合 -it 引數)


$ docker run -dit ubuntu

15fc4d97c1b4ea25d76e568fb4e695d5b48d7f13ebbb6d718a80b86a4764a005

// 只用 -i 引數時,由於沒有分配偽終端,介面沒有我們熟悉的 Linux 命令提示符,但命令執行結果仍然可以返回。

$ docker exec -i 15fc4d97c1b4ea25 bash

ls

bin

boot

dev

etc

...

//當 -i -t 引數一起使用時,則可以看到我們熟悉的 Linux 命令提示符。

$ docker exec -it 15fc4d97c1b4ea25 bash

root@15fc4d97c1b4:/#

注意:如果從這個 stdin 中 exit,不會導致容器的停止。

容器常用命令

  1. docker container ls –all 檢視當前系統中的所有(執行中、已停止的)容器

  2. docker container start XXX 把已經停止的 XXX 容器啟動

  3. docker container stop XXX 把執行總的 XXX 容器停止

  4. docker container restart XXX 重新啟動執行中的 XXX 容器

  5. docker container prune 刪除所有處於停止狀態的容器

程式設計師的藝術人生

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章