docker命令詳解

docker命令詳解

前言

從技術老大那裏據說了docker,閒下來以後就簡單瞭解了一下,發現真的是一個好用的不得了的工具。遂週末去圖書館找了下相關資料,學習下姿式。說不定哪天用上了呢?。在看資料的過程當中,發現有很多命令都不知道什麼意思,因此乾脆作了一個整理,以備之後查閱。ps:在docker命令後輸入 -h 參數,可查看詳細命令。我也是參照某本書上的命令整理的,也不是很全,待之後遇到了繼續補充。mysql

文中 =[] 表示設置選項時能夠設置不一樣的值,而且能夠屢次使用 如: -p 8000:80 -p 8080:8080
命令後面的 =false 表示默認值爲 false ="" 表示默認值爲空
若用戶不屬於docker組,可能須要sudo執行linux

docker基礎命令

docker <選項><命令><參數>web

--api-enable-cors=false 使用API時,啓用CORS(cross-origin resource sharing)redis

-b 、--bridge="" 使用事先建立的網橋接口。若設置爲none,則不在容器內使用網絡sql

--bip="" 使用CIDR標記法設置docker 的IP帶寬。該選項不能與-b選項同時使用docker

如:`-bip="192.168.0.0/24"`

-D 、--debug 啓用調試模式shell

-d 、--deamon=false 以守護進程模式運行ubuntu

--dns 設置docker要使用的DNS服務器api

--dns-search=[] 設置docker要使用的DNS搜索域。若設置爲:example.com,則向服務器查詢hello時,將首先查找hello.example.com數組

-e、--exec-drive="native" 設置docker運行驅動,可設置爲Native與lxc

--fixed-cidr="" 固定分配IPv4地址的帶寬。該IP地址必須在-b選項設置的網橋網絡或--bip設置的IP網段內

-G、--group="docker" 以守護進程模式運行時,使用-H選項建立Unix套接字後,設置該Unix套接字所在的組。使用""空字符串表示不設置分組

-g、 --graph="/var/lib/docker" 設置docker使用目錄的頂層路徑

-H、--host[] 以守護進程模式運行時,設置套接字路徑。

--icc=true 開啓容器間通訊

--insecure-registry=[] 使用私有證書搭建docker註冊服務器時,設置docker註冊服務器域名

--ip=0.0.0.0 使用docker run 命令時-p選項將端口暴露在外時,設置要綁定的默認IP地址

--ip-forward=true 開啓net.ipv4.ip_forward

--ip-masq=true 爲網橋上的IP地址開啓IP假裝(masquerading)

--iptables=true 開啓iptables規則

--mtu=0 設置容器的網絡最大傳輸單元(MTU, Maxmum transmission unit)若不設置,則使用路由器的默認MTU或者設置爲1500

-p、--pidfile="/var/run/docker.pid" 設置PID文件路徑

-registry-mirror=[] 設置docker registry 的鏡像地址

-s、--storage-driver=[] 設置儲存驅動,默認爲auto,也能夠設置爲drivcemapper

--selinux-enabled=false開啓SELinux SELinux尚不支持BTRFS儲存驅動

--storage-opt 設置存儲驅動選項

--tls=false 使用TLS

--tlscacert="/home/exapmleuser/.docker/ca.pem" 設置要在遠程證書中使用的CA證書文件的路徑

--tlscert="/home/exapmleuser/.docker/cert.pem" 設置證書文件路徑

--tlskey="/home/exapmleuser/.docker/key.pem" 設置密匙文件路徑

tlsverify="false" 使用TLS遠程證書,守護進程與客戶端所有使用證書驗證

-v、--version=false 打印版本信息

attach命令

attach命令用於將標準輸入(stdin)與標準輸出(stdout)鏈接到正在運行的容器

docker attach <選項><容器名稱, id>

--no-stdin=false 不鏈接標準輸入

--sig-proxy=true 將全部信號傳遞給進程(非TTY模式時也同樣)但不傳送SIGCHLD、SIGKILL、SIGSTOP信號。常用的信號以下:

SIGINT:interrupt信號,輸入Ctrl + c 時發生
SIGQUIT:Quit信號,輸入Ctrl + \ 時發生
EOF:終止attach狀態,輸入Ctrl + d 時發生

通常會先運行Bash等shell,而後使用docker attach 命令鏈接到容器,在運行各類命令
docker run -it --name hello ubuntu /bin/bash
docker attach hello

build 命令

build命令使用Dockerfile文件建立鏡像

docker build <選項><Dockerfile路徑>

Dockerfile 路徑可使是本地路徑,也能夠是URL路徑。若設置爲 - ,則從標準輸入獲取Dockerfile的內容

--force-rm=false 建立鏡像失敗時,刪除臨時容器

--no-cache=false 不使用以前構建中建立的緩存。

-q、--quiet=false 不顯示Dockerfile的RUN運行的輸出結果

--rm=true 建立鏡像成功時,刪除臨時容器

-t、--tag="" 設置註冊名稱、鏡像名稱、標籤。格式爲 <註冊名稱>/<鏡像名稱>:<標籤>(標籤默認爲latest)

commit 命令

commit命令用於從容器的修改項建立顯得鏡像

docker commit <選項><容器名稱,id>/<鏡像名稱>:<標籤>

-a、--author="" 設置獎項建立者的有關信息
-m、--message="" 設置有關變動事項的日誌信息
-p、--pause=true 建立鏡像是暫停容器

cp 命令

cp命令用於將容器的目錄或文件複製的到主機。若將cp命令中的路徑設置爲目錄,則將該目錄下的全部內容複製到主機

docker cp <容器名稱>:<路徑><主機路徑>

$ docker cp hello:/etc . 將容器內的整個/etc 目錄複製到主機當前文件夾下

create 命令

create 命令使用指定的鏡像建立容器。與run命令不一樣,使用create命令只能建立容器而並不啓動

docker create <選項><鏡像名稱,id><命令><參數>

-a 、--attach=[] 將標準輸入、標準輸出、標準錯誤連接到容器

--attach="stdin"

--add-host=[] 向容器的/etc/hosts添加主機名與IP地址

--add-host=hello:192.168.0.233

-C、--cpu-shares=0 設置cup資源分配。默認是這值爲1024,各值爲相對值

若設置爲--cpu-shares=2048, 則分配默認值爲2倍的CPU資源
在Linux內核的cgroups中使用該設置的值

--cap-add[] 設置容器中使用的cgroups的特定Capablity。若設置爲ALL,則使用全部的Capablity
--cap-drop=[] 從容器刪除cgroup的特定Capablity
--cidfile="" 設置cid文件路徑。cid中存儲着所建立容器的id
--cpuset="" 在多核CPU中設置要運行容器的核心數

若設置--cpuset="0,1" 則使用第一與第二個cup
若這是--cupset="0-2" 則使用從第一到第三個cup

--device=[] 添加主機設備到容器,格式爲<主機設備>:<容器設備>

若設置爲 --device="/dev/sda1:/dev/sda1",則在容器中也可使用主機的/dev/sda1塊設備

--dns=[] 設置容器中要用到的DNS服務器

--dns-search=[] 設置docker要使用的DNS搜索域。

-e、--env=[] 向容器設置環境變量。通常用於傳遞設置或者密碼

如:-e MYSQL_ROOT_PASSWORD=root

--entrypoint="" 忽略Dockerfile的ENTRYPOINT設置,強制設置爲其餘值。

如:--entrypoint="/bin/bash"

--env-file=[] 向容器應用設置環境變量文件
--expose=[] 僅鏈接容器的端口與主機,並不暴露在外

--expose="3306"

-h、--hostname="" 設置容器主機名
-i、--interactive=false 激活標準輸入,即便未與容器鏈接(attach),也維持標準輸入。通常使用該選項向Bash輸入命令
--link=[] 進行容器鏈接,格式爲<容器名稱>:<別名>

--link mysql-server:mysql

--lxc-conf=[] 若使用LXC驅動,則能夠設置LXC選項

--lxc-conf="lxc.cgroup.cpuset.cpu = 0,1"

-m、--memory="" 設置內存限制,格式爲<數字><單位>,單位可使用b,k,m,g

--memory="512m"

--name 設置容器名稱
--net="bridge" 設置容器的網絡模式(選項能夠是:bridge,none,container,host)
-P、--publish-all=false 將鏈接到主機的容器的全部端口暴露在外
-p、--publish=[] 將鏈接到主機的容器的特定端口暴露在外。通常主要用於暴露web服務器的端口
--privileged=false 在容器內部使用主機的全部Linux內核功能
--restart="" 設置容器內部進程終止時重啓策略

--restart=no 即便進程終止也不重啓
--restart="on-failure" 僅當進程的Exit Code 不爲0時執行重啓。也能夠設置重置次數。若不設置重試次數,這不斷重啓。如 --restart="no-failure:10"
--restart="always" 不受Exit Code的影響,老是重啓

--security-opt=[] 設置SELinux、AppArmor 選項
-t、--tty=false 使用TTY模式(pseudo-TTY)。若要使用Bash,則必須設置該選項。若不設置該選項,則能夠輸入命令,但不顯示shell
-u、--user="" 設置容器運行時要使用的Linux用戶帳戶與UID
-v、--volume=[] 設置數據卷。設置要與主機共享目錄,不將文件保存到容器,而直接保存到主機。在主機目錄後添加 :ro、:rw進行讀寫設置,默認爲:rw。
--volumes-from=[] 鏈接數據卷容器,設置格式爲<容器名,id>:<:ro, :rw> 默認情形下,讀寫設置聽從-v選項的設置。
-w、--workdir="" 設置容器內部要運行進程的目錄

運行以下命令,建立容器
$ docker create -it --name hello ubuntu /bin/bash
若想使用剛剛建立的容器,則必須使用docker start 命令啓動容器
$ docker start hello
進入容器內部
$ docker attach hello

diff 命令

diff命令用於檢查容器文件系統的修改

docker diff <容器名稱,id>

比較文件是否修改的標準是容器建立時的鏡像內容

A:添加的文件
C:修改的文件
D:刪除的文件

events 命令

events命令用於實時輸出Docker服務器中發生的事件

docker events

--since="" 輸出特定的timestamp以後的事件
--until="" 輸出特定的timestamp以前的事件
運行docker events命令,進入待機狀態

$ docker events

在另外一終端,運行容器

$ docker start hello  #假設容器已存在

就會在剛剛的docker events 命令窗口看到 運行hello 容器的事件

exec 命令

exec命令用於從外部運行容器內部的命令

docker exec <選項><容器名稱,id><命令><參數>

-d、--detach=false 之後臺模式運行命令
-i、--interactive=false 開啓標準輸入,即便未與容器鏈接,也維持標準輸入
-t、--tty=false 使用TTY模式(pseudo-TTY)若要使用bash,則必須設置該選項。若不設置該選項,則雖然輸入命令,但不顯示shell
運行以下命令,建立容器

$ docker run -d --name hello ubuntu /bin/bash -c "while true; do echo Hello World; sleep 1; done"

設置每隔一秒輸出一次hello world。在此狀態下,運行容器內部的/bin/bash,鏈接至bash shell ,以下所示。鏈接bash shell 時,只有使用 -i -t 選項才能輸入命令並查看結果

$ docker exec -it hello /bin/bash  #鏈接容器
$ ps ax  # 查看進程

圖片描述
若在容器內部運行ps ax 命令,則能夠看到由docker exec 命令運行的其餘/bin/bash,與輸出hello world 的/bin/bash 不是同一個。輸入exit命令退出Bash shell後,容器不會中止,而會繼續運行。像這樣,靈活使用 docker exec 命令將Bash shell 鏈接到正在運行守護進程的容器上,並行多種操做
以下:不鏈接Bash shell,而使用apt-get等命令,在容器內安裝redis-server包,

$ docker exec hello apt-get update
$ docker exec hello apt-get install -y redis-server
$ docker exec -d hello redis-server # 後臺運行rides-server

export 命令

export命令將用於將容器的文件系統導出爲tar文件包

docker export <容器名稱,id>

只運行docker export 命令後,因爲容器的內容會輸出到標準輸出,因此必須設置重定向

$ docker run -it -d --name hello ubuntu /bin/bash
$ docker export hello > hello.tar

history 命令

history 命令用於顯示鏡像的歷史。此處的歷史依據Dockerfile文件中的設置建立。

docker history <選項><鏡像名稱,id>

--no-trunc=false 輸出全部因內容過長而省略的部分
-q、--quiet=false 只顯示鏡像id

images 命令

images命令用於輸出鏡像列表

docker images <選項><鏡像名稱,id>

-a、--all=false 列出全部鏡像,包括父鏡像
-f、--filter=[] 設置輸出結果過濾。若設置爲"dangling=true",則只輸出無名鏡像
--no-trunc=false 顯示全部因內容過長而省略的部分

import 命令

import命令用於從壓縮爲tar文件(.tar .tar.gz .tgz .bzip .tar.xz .txz)的文件系統建立鏡像

docker import <tar文件的URL或者 - ><註冊名稱>/<鏡像名稱>:<標籤>

使用import命令時,能夠設置tar文件的URL,若設置爲 - ,則從標準輸入接收tar文件的內容。既可使用由docker export 命令建立的tar文件,也能夠直接組織文件系統。

$ docker import http://example.com/hello.tar.zg hello

下列命令中使用本地的 hello.tar 文件的內容經過管道傳遞給 docker import 命令

$ cat hello.tar | docker import - hello

若想將當前目錄的內容直接建立爲鏡像:

$ tar -c . | docker import - hello

info 命令

info命令用於顯示當前系統信息、docker容器、鏡像個數、設置等信息。

docker info

圖片描述

inspect 命令

inspect 命令用於以JSON格式顯示容器與鏡像的詳細信息

docker inspect <選項><容器或鏡像名稱,id>

-f、--format="" 只顯示指定信息。如:"{{.NetworkSettings.IPAddress}}" 使用 . 來設置JSON文檔的下層項目
下面命令顯示容器的IP地址

$ docker run -it -d --name hello ubuntu /bin/bash
$ docker inspect -f "{{.NetworkSettings.IPAddress}}" hello

下面命令只從容器的詳細信息中抽取特定部分,並按照所但願的格式顯示

$ docker run -it -d --name hello -p 8000:80 -p 8080:8080 ubuntu /bin/bash
$ docker inspect -f '{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' hello

圖片描述
此處使用 {{range $p, $conf := .NetworkSettings.Ports}} 循環訪問 .NetworkSettings.Ports 的值,並代入 $p $conf。而後輸出$p,並將$conf數組的第一項 (index $conf 0) 的 .HostPort 輸出。
另:.NetworkSettings.Ports 是一個map類型數據結構:

map[80/tcp:[{0.0.0.0 8000}] 8080/tcp:[{0.0.0.0 8080}]]

kill 命令

kill命令用於向容器發送KILL信號,從而關閉容器(推薦使用更優雅溫和的 docker stop 命令)

docker <選項><容器名稱,id>

-s、--signal="KILL" 發送特定信號

load 命令

load命令用於從tar文件建立鏡像

docker load <選項>

將tar文件發送到 docker load 命令的標準輸入,而後建立鏡像。tar文件由 docker save 命令建立,包含鏡像名稱與標籤。
-i、--input="" 不使用標準輸入,設置文件路徑並建立鏡像。

$ docker save myimages > myimages.tar  #將已存在的鏡像保存爲tar文件
$ docker load < myimages.tar  #在另外一臺電腦從tar文件建立鏡像

login 命令

login命令用於登陸Docker 的註冊服務器
docker login <選項><Docker 註冊服務器的URL>

若不設置註冊服務器的地址,則默認登陸dockerhub(api https://index.docker.io/v1/
-e、--email="" 設置登陸時使用的電子郵件
-p、--password="" 設置登陸密碼
-u、--username="" 設置登陸時使用的帳號

logout 命令

logout命令用於從Docker註冊服務器中登出

docker logout <選項><Docker 註冊服務器的URL>

若不設置註冊服務器的地址,則默認爲dockerhub(api https://index.docker.io/v1/

logs 命令

logs命令用於輸出容器日誌

docker logs <容器名稱,id>

-f、--follow=false 一直輸出實時日誌
-t、--timestamp=false 在登陸時顯示時間值
--tail="all" 指定數字,只從日誌中輸出必定個數

port 命令

port命令用於查看容器的某個端口是否處於開放狀態

docker port <容器名稱,id><端口>

圖片描述

pause 命令

pause命令用於暫停容器中正在運行的全部進程

docker pause <容器名稱,id>

圖片描述

ps 命令

ps命令用於輸出容器列表

docker ps <選項>

-a、--all=false 列出全部容器。不帶 -a 只輸出在運行的容器
--before="" 列出特定容器建立前的容器,包含中止的容器。
-f、--filter=[] 設置輸出過濾。如 "exited=0"
-l、--latest=false 列出最後建立的容器,包含中止的容器
-q、--quiet=false 只輸出容器的id

push 命令

push命令用於將鏡像推送到Docker註冊服務器

docker push <註冊名>/<鏡像名>:<標籤>

註冊名中既能夠設置Docker Hub 的用戶名,也能夠設置註冊地址
若不設置標籤,則推送全部標籤的鏡像

$ docker pull user/hello:latest

以下推送到我的倉庫

$ docker pull 192.168.0.33:6666/hello:latest
$ docker pull yourset.com:6666/hello:latest

restart 命令

restart命令用戶重啓容器

docker restart <選項><容器名稱,id>

-t、time=10 設置從容器中止到重啓的等待時間,單位爲秒

$ docker restart hello

rm 命令

rm 命令用於刪除容器

docker rm <選項><容器名稱,id>

-f、--force=false 強制中止容器後刪除(使用SIGKILL信號)
-l、--link=false 在docker run 命令中使用--link 選項,只刪除鏈接,不刪除容器。
-v、--volumes=false 刪除鏈接到容器的數據卷
若要一次刪除全部容器,可在docker ps:命令中使用 -a -q 選項獲取容器id只有傳給docker rm 命令

$ docker rm `docker ps -aq`
$ docker rm $(docker ps -aq)

rmi 命令

rmi命令用於刪除鏡像。若不指定標籤,則刪除latest標籤

docker rim <註冊名稱>/<鏡像名稱,id>:<標籤>

-f、--force=false 強制刪除鏡像
--no-prune=false 不刪除不帶標籤的父級鏡像

$ docker rmi hello
$ docker rmi user/hello:latest
$ docker rmi 192.168.0.33:6666/hello:latest  #遠程倉庫鏡像
$ docker pull yourset.com:6666/hello:latest  #遠程倉庫鏡像

刪除全部鏡像與刪除容器相似

$ docker rmi `docker images -aq`

run 命令

run命令用於指定鏡像建立容器

docker run <選項><鏡像名稱,id><命令><參數>

docker run 命令 與 docker create 基本相似 惟一的不一樣是 run命令在建立容器後會啓動容器,因此參數基本相似,只是多了關於啓動後的設置,一下是多出來的命令:

-d、--detach Detach模式,通常爲守護進程模式,容器之後臺方式運行
--rm=false 若容器內的進程終止,則自動刪除容器,此選項不能與-d選項一塊兒使用
--sig-proxy=true 將全部信號傳遞給進程(非TTY模式時也同樣),但不傳遞SIGCHLD、SIGKILL、SIGSTOP信號

save 命令

save命令用於將鏡像保存爲tar包文件

docker save <選項><鏡像名稱>:<標籤>

-o、--output="" 設置保存的文件名
若不設置-o選項,tar文件會輸出到標準輸出,因此必須設置重定向。若是僅指定鏡像名稱而未指定標籤,則將全部標籤保存到一個tar文件。

search 命令

search命令用與在docker hub 中搜索鏡像

docker search <選項><搜索詞>

--automated=false 只顯示由docker hub 的automated build 建立的鏡像
--no-trunc=false 顯示全部因由於內容過長而省略的部分
-s、--stars=0 顯示滴啊有特定星級以上的鏡像

start 命令

start命令用於啓動容器

docker start <選項><容器名稱,id>

-a、--attrch=false 將標準輸入、標準輸出、標準錯誤鏈接到容器,傳遞全部信號
-i、--interactive=false 激活標準輸入

  1. stop 命令

stop命令用於終止容器

docker stop <選項><容器名稱,id>

-t、--time=10 設置終止容器前的等待時間,單位爲秒

tag 命令

tag命令用於設置鏡標籤

docker tag <選項><鏡像名稱>:<標籤><註冊地址,用戶名>/<鏡像名稱>:<標籤>

-f、--force=false 即便已擁有標籤也強制設置
如將遠程倉庫設置標籤

$ docker tag hello:latest user/hello:0.1  #設置docker hub上的
$ docker tag hello:latest youset:6666/hello:0.1  #私人倉庫

top 命令

top命令用於顯示容器中正在運行的進程信息

docker top <容器名稱,id><ps選項>

在<ps選項>中設置 Linux ps 命令的選項 參考

$ docker top hello aux

unpause 命令

unpause命令用於重啓 pause 命令暫停的容器

docker unpause <容器名稱,id>

  1. version 命令

    > version命令用於輸出docker的版本信息
    
    > docker version

wait 命令

wait 命令等待容器終止,而後輸出 Exit Code

docker wait <容器名稱,id>

後記

單一的容器通常不能知足業務須要,須要一個編排的工具。Docker Compose和Docker Swarm 正是負責快速在集羣中部署分佈式應用。漫漫長路,學的還有好多,工做雖不是負責這方面的,我想作的只是將本身的想法運行在代碼是而已。

相關文章
相關標籤/搜索