從技術老大那裏據說了docker,閒下來以後就簡單瞭解了一下,發現真的是一個好用的不得了的工具。遂週末去圖書館找了下相關資料,學習下姿式。說不定哪天用上了呢?。在看資料的過程當中,發現有很多命令都不知道什麼意思,因此乾脆作了一個整理,以備之後查閱。ps:在docker命令後輸入 -h
參數,可查看詳細命令。我也是參照某本書上的命令整理的,也不是很全,待之後遇到了繼續補充。mysql
文中 =[] 表示設置選項時能夠設置不一樣的值,而且能夠屢次使用 如: -p 8000:80 -p 8080:8080
命令後面的 =false 表示默認值爲 false ="" 表示默認值爲空
若用戶不屬於docker組,可能須要sudo執行linux
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命令用於將標準輸入(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命令使用Dockerfile文件建立鏡像
docker build <選項><Dockerfile路徑>
Dockerfile 路徑可使是本地路徑,也能夠是URL路徑。若設置爲 - ,則從標準輸入獲取Dockerfile的內容
--force-rm=false
建立鏡像失敗時,刪除臨時容器
--no-cache=false
不使用以前構建中建立的緩存。
-q、--quiet=false
不顯示Dockerfile的RUN運行的輸出結果
--rm=true
建立鏡像成功時,刪除臨時容器
-t、--tag=""
設置註冊名稱、鏡像名稱、標籤。格式爲 <註冊名稱>/<鏡像名稱>:<標籤>(標籤默認爲latest)
commit命令用於從容器的修改項建立顯得鏡像
docker commit <選項><容器名稱,id>/<鏡像名稱>:<標籤>
-a、--author=""
設置獎項建立者的有關信息-m、--message=""
設置有關變動事項的日誌信息-p、--pause=true
建立鏡像是暫停容器
cp命令用於將容器的目錄或文件複製的到主機。若將cp命令中的路徑設置爲目錄,則將該目錄下的全部內容複製到主機
docker cp <容器名稱>:<路徑><主機路徑>
$ docker cp hello:/etc .
將容器內的整個/etc 目錄複製到主機當前文件夾下
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命令用於檢查容器文件系統的修改
docker diff <容器名稱,id>
比較文件是否修改的標準是容器建立時的鏡像內容
A:添加的文件 C:修改的文件 D:刪除的文件
events命令用於實時輸出Docker服務器中發生的事件
docker events
--since=""
輸出特定的timestamp以後的事件--until=""
輸出特定的timestamp以前的事件
運行docker events命令,進入待機狀態
$ docker events
在另外一終端,運行容器
$ docker start hello #假設容器已存在
就會在剛剛的docker events 命令窗口看到 運行hello 容器的事件
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命令將用於將容器的文件系統導出爲tar文件包
docker export <容器名稱,id>
只運行docker export 命令後,因爲容器的內容會輸出到標準輸出,因此必須設置重定向
$ docker run -it -d --name hello ubuntu /bin/bash $ docker export hello > hello.tar
history 命令用於顯示鏡像的歷史。此處的歷史依據Dockerfile文件中的設置建立。
docker history <選項><鏡像名稱,id>
--no-trunc=false
輸出全部因內容過長而省略的部分-q、--quiet=false
只顯示鏡像id
images命令用於輸出鏡像列表
docker images <選項><鏡像名稱,id>
-a、--all=false
列出全部鏡像,包括父鏡像-f、--filter=[]
設置輸出結果過濾。若設置爲"dangling=true",則只輸出無名鏡像--no-trunc=false
顯示全部因內容過長而省略的部分
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命令用於顯示當前系統信息、docker容器、鏡像個數、設置等信息。
docker info
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信號,從而關閉容器(推薦使用更優雅溫和的 docker stop 命令)
docker <選項><容器名稱,id>
-s、--signal="KILL"
發送特定信號
load命令用於從tar文件建立鏡像
docker load <選項>
將tar文件發送到 docker load 命令的標準輸入,而後建立鏡像。tar文件由 docker save 命令建立,包含鏡像名稱與標籤。-i、--input=""
不使用標準輸入,設置文件路徑並建立鏡像。
$ docker save myimages > myimages.tar #將已存在的鏡像保存爲tar文件 $ docker load < myimages.tar #在另外一臺電腦從tar文件建立鏡像
login命令用於登陸Docker 的註冊服務器
docker login <選項><Docker 註冊服務器的URL>
若不設置註冊服務器的地址,則默認登陸dockerhub(api https://index.docker.io/v1/)-e、--email=""
設置登陸時使用的電子郵件-p、--password=""
設置登陸密碼-u、--username=""
設置登陸時使用的帳號
logout命令用於從Docker註冊服務器中登出
docker logout <選項><Docker 註冊服務器的URL>
若不設置註冊服務器的地址,則默認爲dockerhub(api https://index.docker.io/v1/)
logs命令用於輸出容器日誌
docker logs <容器名稱,id>
-f、--follow=false
一直輸出實時日誌-t、--timestamp=false
在登陸時顯示時間值--tail="all"
指定數字,只從日誌中輸出必定個數
port命令用於查看容器的某個端口是否處於開放狀態
docker port <容器名稱,id><端口>
pause命令用於暫停容器中正在運行的全部進程
docker pause <容器名稱,id>
ps命令用於輸出容器列表
docker ps <選項>
-a、--all=false
列出全部容器。不帶 -a
只輸出在運行的容器--before=""
列出特定容器建立前的容器,包含中止的容器。-f、--filter=[]
設置輸出過濾。如 "exited=0"-l、--latest=false
列出最後建立的容器,包含中止的容器-q、--quiet=false
只輸出容器的id
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命令用戶重啓容器
docker restart <選項><容器名稱,id>
-t、time=10
設置從容器中止到重啓的等待時間,單位爲秒
$ docker restart hello
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命令用於刪除鏡像。若不指定標籤,則刪除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命令用於指定鏡像建立容器
docker run <選項><鏡像名稱,id><命令><參數>
docker run 命令 與 docker create 基本相似 惟一的不一樣是 run命令在建立容器後會啓動容器,因此參數基本相似,只是多了關於啓動後的設置,一下是多出來的命令:
-d、--detach
Detach模式,通常爲守護進程模式,容器之後臺方式運行--rm=false
若容器內的進程終止,則自動刪除容器,此選項不能與-d
選項一塊兒使用--sig-proxy=true
將全部信號傳遞給進程(非TTY模式時也同樣),但不傳遞SIGCHLD、SIGKILL、SIGSTOP信號
save命令用於將鏡像保存爲tar包文件
docker save <選項><鏡像名稱>:<標籤>
-o、--output=""
設置保存的文件名
若不設置-o
選項,tar文件會輸出到標準輸出,因此必須設置重定向。若是僅指定鏡像名稱而未指定標籤,則將全部標籤保存到一個tar文件。
search命令用與在docker hub 中搜索鏡像
docker search <選項><搜索詞>
--automated=false
只顯示由docker hub 的automated build 建立的鏡像--no-trunc=false
顯示全部因由於內容過長而省略的部分-s、--stars=0
顯示滴啊有特定星級以上的鏡像
start命令用於啓動容器
docker start <選項><容器名稱,id>
-a、--attrch=false
將標準輸入、標準輸出、標準錯誤鏈接到容器,傳遞全部信號-i、--interactive=false
激活標準輸入
stop 命令
stop命令用於終止容器
docker stop <選項><容器名稱,id>
-t、--time=10
設置終止容器前的等待時間,單位爲秒
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命令用於顯示容器中正在運行的進程信息
docker top <容器名稱,id><ps選項>
在<ps選項>中設置 Linux ps 命令的選項 參考
$ docker top hello aux
unpause命令用於重啓 pause 命令暫停的容器
docker unpause <容器名稱,id>
version 命令
> version命令用於輸出docker的版本信息 > docker version
wait 命令等待容器終止,而後輸出 Exit Code
docker wait <容器名稱,id>
單一的容器通常不能知足業務須要,須要一個編排的工具。Docker Compose和Docker Swarm 正是負責快速在集羣中部署分佈式應用。漫漫長路,學的還有好多,工做雖不是負責這方面的,我想作的只是將本身的想法運行在代碼是而已。