docker容器有三種狀態執行、停止、暫停,映象可以建立、執行容器,映象和容器也可以轉換成tar壓縮包進行儲存。本文為大家介紹容器的狀態轉換命令及映象建立執行容器、tar包匯入匯出相關的命令及使用場景。
結合下文中的命令介紹來理解上面的這張圖。
從docker映象啟動一個容器的語法如下,使用docker run
命令。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用options說明,docker create
與docker 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
docker logs 容器ID; //檢視容器紀錄檔標準輸出
比如nginx服務的紀錄檔如下所示:
有的時候我們通過docker ps
和docker 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停止容器,還有一種方法是暫停容器服務,如上命令所示。被暫停的容器不再對外服務,但是仍然佔用宿主機資源。這種方式並不常用!
通過docker ps -a
可以找到處於stopped狀態的容器資訊。使用下面命令可以讓stopped狀態的容器再次進入執行狀態。
docker start 容器名/容器ID
不論容器處於什麼狀態,如果想重啟容器,可以使用下面的命令。
docker restart 容器名/容器ID //重啟容器(根據ID或NAMES)
如果想要刪除容器,一定要讓容器處於stopped狀態才可以。
docker rm 容器ID
將容器匯出為tar包,生成的是該容器的快照,復刻的是容器當前的linux系統環境
docker export nginx-zimug > nginx-zimug.tar
如下所示的命令,將tar包匯入生成一個映象,該映象的命名名稱是new-nginx-zimug
docker import - new-nginx-zimug < nginx-zimug.tar
假設我們有這樣一種場景,容器啟動之後發現一個組態檔引數寫錯了,然後通過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