深入淺出Docker(二):Docker命令列探祕
1. Docker命令列
Docker官方為了讓使用者快速瞭解Docker,提供了一個互動式教程,旨在幫助使用者掌握Docker命令列的使用方法。但是由於Docker技術的快速發展,此互動式教程已經無法滿足Docker使用者的實際使用需求,所以讓我們一起開始一次真正的命令列學習之旅。首先,Docker的命令清單可以通過執行docker ,或者 docker help 命令得到:
$ sudo docker
在Docker容器技術不斷演化的過程中,Docker的子命令已經達到34個之多,其中核心子命令(例如:run)還會有複雜的引數配置。筆者通過結合功能和應用場景方面的考慮,把命令列劃分為4個部分,方便我們快速概覽Docker命令列的組成結構:
功能劃分 |
命令 |
環境資訊相關 |
|
系統運維相關 |
|
日誌資訊相關 |
|
Docker Hub服務相關 |
|
1.1 引數約定
單個字元的引數可以放在一起組合配置,例如
docker run -t -i --name test busybox sh
可以用這樣的方式等同:
docker run -ti --name test busybox sh
1.2 Boolean
Boolean引數形式如: -d=false。注意,當你宣告這個Boolean引數時,比如 docker run -d=true,它將直接把啟動的Container掛起放在後臺執行。
1.3 字串和數字
引數如 --name=“” 定義一個字串,它僅能被定義一次。同類型的如-c=0 定義一個數字,它也只能被定義一次。
1.4 後臺程序
Docker後臺程序是一個常駐後臺的系統程序,值得注意的是Docker使用同一個檔案來支援客戶端和後臺程序,其中角色切換通過-d來實現。這個後臺程序是用來管理容器的,使用Docker --help可以得到更詳細的功能引數配置, 如下圖:
Docker後臺程序引數清單如下表:
引數 |
解釋 |
--api-enable-cors=false |
開放遠端API呼叫的 CORS 頭資訊。這個介面開關對想進行二次開發的上層應用提供了支援。 |
-b, --bridge="" |
掛載已經存在的網橋裝置到 Docker 容器裡。注意,使用 none 可以停用容器裡的網路。 |
--bip="" |
使用 CIDR 地址來設定網路橋的 IP。注意,此引數和 -b 不能一起使用。 |
-D, --debug=false |
開啟Debug模式。例如:docker -d -D |
-d, --daemon=false |
開啟Daemon模式。 |
--dns=[] |
強制容器使用DNS伺服器。例如: docker -d --dns 8.8.8.8 |
--dns-search=[] |
強制容器使用指定的DNS搜尋域名。例如: docker -d --dns-search example.com |
-e, --exec-driver="native" |
強制容器使用指定的執行時驅動。例如:docker -d -e lxc |
-G, --group="docker" |
在後臺執行模式下,賦予指定的Group到相應的unix socket上。注意,當此引數 --group 賦予空字串時,將去除組資訊。 |
-g, --graph="/var/lib/docker" |
配置Docker執行時根目錄 |
-H, --host=[] |
在後臺模式下指定socket繫結,可以繫結一個或多個 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如: $ docker -H tcp://0.0.0.0:2375 ps 或者
$ export DOCKER_HOST="tcp://0.0.0.0:2375" |
--icc=true |
啟用內聯容器的通訊。 |
--ip="0.0.0.0" |
容器繫結IP時使用的預設IP地址 |
--ip-forward=true |
啟動容器的 net.ipv4.ip_forward |
--iptables=true |
啟動Docker容器自定義的iptable規則 |
--mtu=0 |
設定容器網路的MTU值,如果沒有這個引數,選用預設 route MTU,如果沒有預設route,就設定成常量值 1500。 |
-p, --pidfile="/var/run/docker.pid" |
後臺程序PID檔案路徑。 |
-r, --restart=true |
重啟之前執行中的容器 |
-s, --storage-driver="" |
強制容器執行時使用指定的儲存驅動,例如,指定使用devicemapper, 可以這樣: docker -d -s devicemapper |
--selinux-enabled=false |
啟用selinux支援 |
--storage-opt=[] |
配置儲存驅動的引數 |
--tls=false |
啟動TLS認證開關 |
--tlscacert="/Users/dxiao/.docker/ca.pem" |
通過CA認證過的的certificate檔案路徑 |
--tlscert="/Users/dxiao/.docker/cert.pem" |
TLS的certificate檔案路徑 |
--tlskey="/Users/dxiao/.docker/key.pem" |
TLS的key檔案路徑 |
--tlsverify=false |
使用TLS並做後臺程序與客戶端通訊的驗證 |
-v, --version=false |
顯示版本資訊 |
注意,其中帶有[] 的啟動引數可以指定多次,例如
$ docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash
2. Docker命令列探祕
2.1 環境資訊相關
info
使用方法: docker info
例子:
[[email protected] docker]$ sudo docker -D info Containers: 0 Images: 32 Storage Driver: devicemapper Pool Name: docker-252:1-130159-pool Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 1616.9 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 2.4 Mb Metadata Space Total: 2048.0 Mb Execution Driver: native-0.2 Kernel Version: 3.11.10-301.fc20.x86_64 Debug mode (server): false Debug mode (client): true Fds: 11 Goroutines: 14 EventsListeners: 0 Init SHA1: 2c5adb59737b8a01fa3fb968519a43fe140bc9c9 Init Path: /usr/libexec/docker/dockerinit Sockets: [fd://]
使用說明:
這個命令在開發者報告Bug時會非常有用,結合docker vesion一起,可以隨時使用這個命令把本地的配置資訊提供出來,方便Docker的開發者快速定位問題。
version
使用方法: docker version
使用說明:
顯示Docker的版本號,API版本號,Git commit, Docker客戶端和後臺程序的Go版本號。
2.2 系統運維相關
attach
使用方法: docker attach [OPTIONS] CONTAINER
例子:
$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b) $ sudo docker attach $ID top - 17:21:49 up 5:53, 0 users, load average: 0.63, 1.15, 0.78 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 0.7 sy, 0.0 ni, 97.7 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 2051644 total, 723700 used, 1327944 free, 33032 buffers KiB Swap: 0 total, 0 used, 0 free. 565836 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19748 1280 1008 R 0.0 0.1 0:00.04 top $ sudo docker stop $ID
使用說明:
使用這個命令可以掛載正在後臺執行的容器,在開發應用的過程中運用這個命令可以隨時觀察容器內程序的執行狀況。開發者在開發應用的場景中,這個命令是一個非常有用的命令。
build
使用方法:docker build [OPTIONS] PATH | URL | -
例子:
$ docker build . Uploading context 18.829 MB Uploading context Step 0 : FROM busybox ---> 769b9341d937 Step 1 : CMD echo Hello world ---> Using cache ---> 99cc1ad10469 Successfully built 99cc1ad10469
使用說明:
這個命令是從原始碼構建新Image的命令。因為Image是分層的,最關鍵的Base Image是如何構建的是使用者比較關心的,Docker官方文件給出了構建方法,請參考這裡。
commit
使用方法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
例子:
$ sudo docker ps ID IMAGE COMMAND CREATED STATUS PORTS c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours $ docker commit c3f279d17e0a SvenDowideit/testimage:version3 f5283438590d $ docker images | head REPOSITORY TAG ID CREATED VIRTUAL SIZE SvenDowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB
使用說明:
這個命令的用處在於把有修改的container提交成新的Image,然後匯出此Imange分發給其他場景中除錯使用。Docker官方的建議是,當你在除錯完Image的問題後,應該寫一個新的Dockerfile檔案來維護此Image。commit命令僅是一個臨時建立Imange的輔助命令。
cp
使用方法: cp CONTAINER:PATH HOSTPATH
使用說明:
使用cp可以把容器內的檔案複製到Host主機上。這個命令在開發者開發應用的場景下,會需要把執行程式產生的結果複製出來的需求,在這個情況下就可以使用這個cp命令。
diff
使用方法:docker diff CONTAINER
例子:
$ sudo docker diff 7bb0e258aefe C /dev A /dev/kmsg C /etc A /etc/mtab A /go A /go/src A /go/src/github.com A /go/src/github.com/dotcloud ....
使用說明:
diff會列出3種容器內檔案狀態變化(A - Add, D - Delete, C - Change )的列表清單。構建Image的過程中需要的除錯指令。
export
使用方法:docker export CONTAINER
例子:
$ sudo docker export red_panda > latest.tar
使用說明:
把容器系統檔案打包並匯出來,方便分發給其他場景使用。
images
使用方法:docker images [OPTIONS] [NAME]
例子:
$ sudo docker images | head REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> 77af4d6b9913 19 hours ago 1.089 GB committest latest b6fa739cedf5 19 hours ago 1.089 GB <none> <none> 78a85c484f71 19 hours ago 1.089 GB $ docker latest 30557a29d5ab 20 hours ago 1.089 GB <none> <none> 0124422dd9f9 20 hours ago 1.089 GB <none> <none> 18ad6fad3402 22 hours ago 1.082 GB <none> <none> f9f1e26352f0 23 hours ago 1.089 GB tryout latest 2629d1fa0b81 23 hours ago 131.5 MB <none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
使用說明:
Docker Image是多層結構的,預設只顯示最頂層的Image。不顯示的中間層預設是為了增加可複用性、減少磁碟使用空間,加快build構建的速度的功能,一般使用者不需要關心這個細節。
import / save / load
使用方法:
docker import URL|- [REPOSITORY[:TAG]] docker save IMAGE docker load
使用說明:
這一組命令是系統運維裡非常關鍵的命令。載入(兩種方法: import, load),匯出(一種方法: save)容器系統檔案。
inspect
使用方法:
docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
例子:
$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $INSTANCE_ID
使用說明:
檢視容器執行時詳細資訊的命令。瞭解一個Image或者Container的完整構建資訊就可以通過這個命令實現。
kill
使用方法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
使用說明:
殺掉容器的程序。
port
使用方法:
docker port CONTAINER PRIVATE_PORT
使用說明:
打印出Host主機埠與容器暴露出的埠的NAT對映關係
pause / unpause
使用方法:
docker pause CONTAINER
使用說明:
使用cgroup的freezer順序暫停、恢復容器裡的所有程序。詳細freezer的特性,請參考官方文件。
ps
使用方法:
docker ps [OPTIONS]
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds webapp d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
使用說明:
docker ps打印出正在執行的容器,docker ps -a打印出所有執行過的容器。
rm
使用方法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
例子:
$ sudo docker rm /redis /redis
使用說明:
刪除指定的容器。
rmi
使用方法:
docker rmi IMAGE [IMAGE...]
例子:
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi fd484f19954f Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories 2013/12/11 05:47:16 Error: failed to remove one or more images $ sudo docker rmi test1 Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 $ sudo docker rmi test2 Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi test Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
使用說明:
指定刪除Image檔案。
run
使用方法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例子:
$ sudo docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
使用說明:
這個命令是核心命令,可以配置的引數多達28個引數。詳細的解釋可以通過docker run --help列出。官方文件中提到的 Issue 2702:"lxc-start: Permission denied - failed to mount" could indicate a permissions problem with AppArmor. 在最新版本的Dcoker中已經解決。
start / stop / restart
使用方法:
docker start CONTAINER [CONTAINER...]
使用說明:
這組命令可以開啟(兩個:start, restart),停止(一個:stop)一個容器。
tag
使用方法:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
使用說明:
組合使用使用者名稱,Image名字,標籤名來組織管理Image。
top
使用方法:
相關推薦
深入淺出Docker(二):Docker命令列探祕
1. Docker命令列 Docker官方為了讓使用者快速瞭解Docker,提供了一個互動式教程,旨在幫助使用者掌握Docker命令列的使用方法。但是由於Docker技術的快速發展,此互動式教程已經無法滿足Docker使用者的實際使用需求,所以讓我們一起開始一次真正的命
Docker(二):Docker常用命令之映象的建立:Dockerfile 與 commit
從鏡像倉庫下載的映象,都是別人事先做好的。如果需要一個定製的映象,就必須得自己動手了。自己建立一個映象有2種方式:a、使用commit命令基於一個現有的映象來修改。本質上並不是新建一個映象,而是基於一個已有的基礎映象進行修改。b、基於Dockerfile來建立
Asp.Net Core 程式部署到Linux(centos)生產環境(二):docker部署
執行環境 照例,先亮環境;軟體的話我這裡假設你已經批准好了.net core 執行環境,未配置可以看我的這篇[linux(centos)搭建.net core 執行環境] 騰訊雲 centos:7.2 cpu:1核 2G記憶體 1M頻寬 docker:18.06.1-ce 安裝dock
Asp.Net Core 程序部署到Linux(centos)生產環境(二):docker部署
大神 生產環境 blog for 服務器 路徑 結構 dot images 運行環境 照例,先亮環境;軟件的話我這裏假設你已經批準好了.net core 運行環境,未配置可以看我的這篇[linux(centos)搭建.net core 運行環境] 騰訊雲 centos
【鏈塊技術53期】超級賬本Fabric教程(二): Docker的部署和安裝(下)
原文連結:超級賬本Fabric教程 Docker的部署和安裝(下) 本節分享超級賬本執行環境docker容器的搭建。 四、Docker compose 4.1 能夠在主機上創建出相互隔離的網路,通過命令列管理多個容器。 在mac和windows中都集成了compos
【鏈塊技術52期】超級賬本Fabric教程(二):Docker的部署和安裝(上)
原文連結:超級賬本Fabric教程(二):Docker的部署和安裝(上) 本節分享超級賬本執行環境docker容器的搭建。 一、目錄 HyperLedger超級賬本執行環境-Docker容器介紹 二、推薦linux系統
docker(3):docker常用命令
幫助命令 版本驗證 docker version docker容器描述 docker info 映象命令 列出本地主機上的映象 docker images [optopns] -a 列出本地所有映象,包含中間對映層 -q
Docker的使用初探(二):Docker與.NET Core的結合
目錄 Docker的使用初探(二):Docker與.NET Core的結合 新增Dockefile 1. 在建立專案時新增 2. 手動新增 3. 容器業務流程協調控制程式支援 Dockefile語法 Docker專
(二):docker registry2 搭建
1.環境描述 [root@localhost docker.registry:5000]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.3 (Maipo) [r
Docker筆記(二):Docker管理的物件
原文地址:http://blog.jboost.cn/2019/07/14/docker-2.html 在Docker筆記(一):什麼是Docker中,我們提到了Docker管理的物件包含映象、容器、網路、資料卷等,本文就來介紹下這些物件及用途。 1. 映象 所謂映象,是一個靜態的概念。
Docker(二):理解容器編排工具Kubernetes內部工作原理
一、Kubernetes是什麼 要說到Docker就不得不說說Kubernetes。當Docker容器在微服務的環境下數量一多,那麼統一的,自動化的管理自然少不了。而Kubernetes就是一個這樣的工具,它不僅僅提供了健康檢查和自修復,還有自動擴容縮容,以及服務發現和負載均衡等等功能。總的來說它使我們對
Docker(一):Docker核心技術預覽
docker開始學習docker了,想寫一篇docker技術介紹的純理論文章,發現以下網站的文檔寫的特別好,就直接引用了,文章轉載自:http://www.infoq.com/cn/DockerDeep http://www.infoq.com/cn/articles/docker-core-technolo
Docker(八):Docker端口映射
oot gre 指定 con 指定端口 docker ner 查看 names 1、隨機映射 docker run -P -d --name mynginx1 nginx [[email protected] ~]# docker ps -l CO
linux系列(二):cd命令
1、命令格式: cd [目錄名] 2、命令功能: 切換當前目錄至目錄名目錄 3、常用例項 (1)、進入系統根目錄 命令: cd / 輸出: [email protected]:~/軟體$ cd / [email protected]-computer:/
理解Docker(4):Docker 容器使用 cgroups 限制資源使用
來源:http://www.cnblogs.com/sammyliu/p/5886833.html 上一篇文章將到 Docker 容器使用 linux namespace 來隔離其執行環境,使得容器中的程序看起來就像愛一個獨立環境中執行一樣。但是,光有執行環境隔離還不夠,因為這些程序還是可以不受
理解Docker(3):Docker 使用 Linux namespace 隔離容器的執行環境
來源:http://www.cnblogs.com/sammyliu/p/5878973.html 1. 基礎知識:Linux namespace 的概念 Linux 核心從版本 2.4.19 開始陸續引入了 namespace 的概念。其目的是將某個特定的全域性
理解Docker(2):Docker 映象
來源:http://www.cnblogs.com/sammyliu/p/5877964.html 對於每個軟體,除了它自身的程式碼以外,它的執行還需要有一個執行環境和依賴。不管這個軟體是象往常一樣執行在物理機或者虛機之中,還是執行在現在的容器之中,這些都是不變的。在傳統環境中,軟體在執行之前也
理解Docker(1):Docker 安裝和基礎用法
來源:https://www.cnblogs.com/sammyliu/p/5875470.html 1. 安裝 1.1 在 Ubuntu 14.04 上安裝 Docker 前提要求: 核心版本必須是3.10或者以上 依次執行下面的步驟: sudo apt-g
理解Docker(8):Docker 儲存之卷(Volume) (轉)
1. Docker volume 的幾種形態 有狀態容器都有資料持久化需求。前一篇文章中提到過,Docker 採用 AFUS 分層檔案系統時,檔案系統的改動都是發生在最上面的容器層。在容器的生命週期內,它是持續的,包括容器在被
學習nginx(二):基本命令
僅輸入 nginx 就是啟動程式 引數列表: -? | -h — 顯示幫助(引數列表): nginx version: nginx/1.15.7 Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix]