【docker專欄6】詳解docker容器狀態轉換管理命令

2022-07-12 18:04:40

docker容器有三種狀態執行、停止、暫停,映象可以建立、執行容器,映象和容器也可以轉換成tar壓縮包進行儲存。本文為大家介紹容器的狀態轉換命令及映象建立執行容器、tar包匯入匯出相關的命令及使用場景。

結合下文中的命令介紹來理解上面的這張圖。

一、從映象啟動容器

從docker映象啟動一個容器的語法如下,使用docker run命令。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

常用options說明,docker createdocker run命令引數幾乎一致,只是docker run建立並執行容器,docker create只建立(可以docker ps -a檢視到)不執行容器。

option 作用
-d 守護行程,後臺執行該容器
-v 目錄對映,容器目錄掛載到宿主機目錄,格式:宿主機目錄:容器目錄
-p 指定埠對映,格式:主機(宿主)埠:容器埠
-P 隨機埠對映,容器內部埠隨機對映到主機的埠
--name nginx-zimug 容器名字nginx-zimug
-m, --memory bytes 設定容器使用記憶體最大值
-h, --hostname string 指定容器的 hostname
--dns 8.8.8.8 指定容器 dns 伺服器8.8.8.8
-e JAVA_HOME="路徑" 設定環境變數,如JAVA_HOME
--rm 容器退出時,刪除容器及容器目錄

範例一:在後臺(-d)執行一個名稱(--name)為nginx-zimug的容器,將容器的80埠對映到宿主機80埠

docker run -d --name nginx-zimug -p  80:80  nginx

範例二:如果不加-d會在Linux終端下輸出容器的標準輸入輸出紀錄檔,當退出終端時,容器停止執行。這種模式通常不用於生產,常用於偵錯容器。

docker run --rm --name nginx-zimug -p  80:80  nginx

--rm引數用於容器執行時停止之後,直接刪除容器,而不是讓容器進入stoped狀態。
範例三-v 表示宿主機目錄與容器目錄的對映關係

docker run -d -p 80:80 \
--name nginx-prod \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/logs:/var/log/nginx  nginx

二、檢視容器與紀錄檔

docker ps //檢視執行中running狀態的容器
docker ps –a //檢視所有狀態的容器(包含running、paused、stopped)
docker container ls  //等同於docker ps
docker container ls –a //等同於docker ps –a

檢視的結果如下:

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                    PORTS                               NAMES
1061ed186789   nginx     "/docker-entrypoint.…"   5 minutes ago   Up 5 minutes              0.0.0.0:80->80/tcp, :::80->80/tcp   nginx-zimug
  • CONTAINER ID :容器ID
  • IMAGE:映象名稱
  • COMMAND:容器內部軟體指令碼啟動命令
  • CREATED: 容器建立的時間
  • STATUS:容器的執行狀態
  • PORTS: 容器與宿主機的埠對映關係
  • NAMES: 容器的名稱
docker logs 容器ID;   //檢視容器紀錄檔標準輸出

比如nginx服務的紀錄檔如下所示:

三、進入容器內部作業系統

有的時候我們通過docker psdocker logs的資訊很難判斷容器內部服務的執行情況。這個時候我們就需要進入到容器內部作業系統,使用下面的命令。

docker exec -it 容器ID /bin/bash

進入到容器內部作業系統之後,想檢視什麼資訊,就和常規使用linux命令是一樣的。退出容器使用exit命令。

四、停止容器暫停容器

通過docker ps 找到處於執行狀態的容器id或容器名稱

docker stop 9be696a0c283 //停止正在執行容器
docker container stop nginx-zimug  //停止正執行容器(ID或Names)

執行該命令後容器進入stoped狀態,不再提供服務,不佔用宿主機資源。stopped狀態的容器可以再次被啟動。

docker pause 容器名/容器ID;  //暫停容器服務
docker unpause 容器名/容器ID; //恢復容器服務

除了stop停止容器,還有一種方法是暫停容器服務,如上命令所示。被暫停的容器不再對外服務,但是仍然佔用宿主機資源。這種方式並不常用!

五、啟動stopped狀態的容器

通過docker ps -a可以找到處於stopped狀態的容器資訊。使用下面命令可以讓stopped狀態的容器再次進入執行狀態。

docker start 容器名/容器ID

不論容器處於什麼狀態,如果想重啟容器,可以使用下面的命令。

docker restart 容器名/容器ID   //重啟容器(根據ID或NAMES)

六、刪除容器

如果想要刪除容器,一定要讓容器處於stopped狀態才可以。

docker rm 容器ID

七、export與import

將容器匯出為tar包,生成的是該容器的快照,復刻的是容器當前的linux系統環境

docker export nginx-zimug > nginx-zimug.tar

如下所示的命令,將tar包匯入生成一個映象,該映象的命名名稱是new-nginx-zimug

 docker import - new-nginx-zimug < nginx-zimug.tar

八、commit

假設我們有這樣一種場景,容器啟動之後發現一個組態檔引數寫錯了,然後通過docker exec -it進入容器內部對組態檔進行了修改。
我們已經介紹過,一旦容器發生重啟,針對容器所做的任何寫操作全部丟失。那麼我們為了將容器修改之後的狀態儲存下來,可以使用commit將容器執行時快照,儲存為本機的一個映象。

docker commit -a "zimug" -m "comment" <容器ID或容器名稱> <映象名稱>

比如使用下面的命令將容器nginx-zimug儲存為映象nginx:zimug

docker commit -a "zimug" -m "comment" nginx-zimug nginx:zimug

通過docker images檢視commit產生的映象

# docker images
REPOSITORY        TAG       IMAGE ID       CREATED          SIZE
nginx             zimug     7e4e3219870e   8 seconds ago    142MB

九、檢視容器設定及資源使用情況

檢視容器設定資訊,該命令會返回一個json格式資訊,如網路設定、環境變數設定、埠設定、資料卷設定等資訊。

docker inspect <容器ID或容器名稱>

檢視容器資源使用情況,使用docker stats命令,可以檢視CPU使用率,記憶體使用率 、網路IO、磁碟IO、程序號等資訊。

# docker stats nginx-zimug
CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT    MEM %     NET I/O     BLOCK I/O     PIDS
ec6953bce17b   nginx-zimug   0.00%     1.41MiB / 990.9MiB   0.14%     656B / 0B   0B / 7.68kB   2

使用docker top命令可以檢視容器內程序資訊。如下問所示,一個master程序,一個worker程序。

# docker top nginx-zimug 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                6169                6150                0                   10:27               ?                   00:00:00            nginx: master process nginx -g daemon off;
101                 6217                6169                0                   10:27               ?                   00:00:00            nginx: worker process

字母哥部落格:zimug.com