摘要:與命令不同,使用命令只能創建容器而并不啟動選項鏡像名稱命令參數將標準輸入標準輸出標準錯誤鏈接到容器向容器的添加主機名與地址設置資源分配。輸入命令退出后,容器不會停止,而會繼續運行。命令命令用于以格式顯示容器與鏡像的詳細
docker命令詳解 前言
從技術老大那里聽說了docker,閑下來之后就簡單了解了一下,發現真的是一個好用的不得了的工具。遂周末去圖書館找了下相關資料,學習下姿勢。說不定哪天用上了呢?。在看資料的過程中,發現有不少命令都不知道什么意思,所以干脆做了一個整理,以備以后查閱。ps:在docker命令后輸入 -h 參數,可查看詳細命令。我也是參照某本書上的命令整理的,也不是很全,待以后遇到了繼續補充。
docker基礎命令文中 =[] 表示設置選項時可以設置不同的值,并且可以多次使用 如: -p 8000:80 -p 8080:8080
命令后面的 =false 表示默認值為 false ="" 表示默認值為空
若用戶不屬于docker組,可能需要sudo執行
docker <選項><命令><參數>
--api-enable-cors=false 使用API時,啟用CORS(cross-origin resource sharing)
-b 、--bridge="" 使用事先創建的網橋接口。若設置為none,則不在容器內使用網絡
--bip="" 使用CIDR標記法設置docker 的IP帶寬。該選項不能與-b選項同時使用
如:`-bip="192.168.0.0/24"`
-D 、--debug 啟用調試模式
-d 、--deamon=false 以守護進程模式運行
--dns 設置docker要使用的DNS服務器
--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命令使用Dockerfile文件創建鏡像
docker build <選項>
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命令中的路徑設置為目錄,則將該目錄下的所有內容復制到主機
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 hellodiff 命令
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-serverexport 命令
export命令將用于將容器的文件系統導出為tar文件包
docker export <容器名稱,id>
只運行docker export 命令后,由于容器的內容會輸出到標準輸出,所以必須設置重定向
$ docker run -it -d --name hello ubuntu /bin/bash $ docker export hello > hello.tarhistory 命令
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
<注冊名稱>/<鏡像名稱>:<標簽>
使用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 - helloinfo 命令
inspect 命令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命令用于向容器發送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 <選項>
若不設置注冊服務器的地址,則默認登錄dockerhub(api https://index.docker.io/v1/)
-e、--email="" 設置登錄時使用的電子郵件
-p、--password="" 設置登錄密碼
-u、--username="" 設置登錄時使用的賬號
logout命令用于從Docker注冊服務器中登出
docker logout <選項>
若不設置注冊服務器的地址,則默認為dockerhub(api https://index.docker.io/v1/)
logs 命令logs命令用于輸出容器日志
docker logs <容器名稱,id>
-f、--follow=false 一直輸出實時日志
-t、--timestamp=false 在登錄時顯示時間值
--tail="all" 指定數字,只從日志中輸出一定個數
pause 命令port命令用于查看容器的某個端口是否處于開放狀態
docker port <容器名稱,id><端口>
ps 命令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:latestrestart 命令
restart命令用戶重啟容器
docker restart <選項><容器名稱,id>
-t、time=10 設置從容器停止到重啟的等待時間,單位為秒
$ docker restart hellorm 命令
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命令用于將鏡像保存為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 命令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>
在
$ docker top hello auxunpause 命令
unpause命令用于重啟 pause 命令暫停的容器
docker unpause <容器名稱,id>
version 命令
> version命令用于輸出docker的版本信息 > docker versionwait 命令
后記wait 命令等待容器終止,然后輸出 Exit Code
docker wait <容器名稱,id>
單一的容器一般不能滿足業務需要,需要一個編排的工具。Docker Compose和Docker Swarm 正是負責快速在集群中部署分布式應用。漫漫長路,學的還有好多,工作雖不是負責這方面的,我想做的只是將自己的想法運行在代碼是而已。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26841.html
摘要:實際上,認為文本文件都是結構化的,它將每一個輸入行定義為一個記錄,行中的每個字符串定義為一個域段,域和域之間使用分割符分割。 看到一篇Docker 技巧:刪除 Docker 容器和鏡像其中提到刪除標簽為none的鏡像的方法,其中用到了awk,就去查了下,下面舉例說明: docker rmi $(docker images | awk $1 == && $2 == {print $3...
摘要:說明方括號表示里面的參數可省任何查詢結果都可以通過進行篩選注釋符命令解釋必填參數系統安裝容器安裝依賴安裝容器服務容器版本倉庫倉庫是集中存放鏡像的地方公有倉庫私有倉庫注冊服務器存放倉庫的具體服務器公有倉庫輸入用戶信息登錄到本地保存用戶的 說明 : [] 方括號表示 => 里面的參數可省 grep name 任何查詢結果都可以通過 grep 進行篩選 # ...
摘要:用了一段時間后,會發現它占用了不少硬盤空間。為了避免構建鏡像時使用緩存,我在命令之前添加了一行命令。引入了命令,類似于上的命令,用于查看的磁盤使用情況。這些鏡像占用了超過磁盤空間。現在,已使用的磁盤空間又變成了。 譯者按: Docker鏡像,容器,數據卷以及網絡都會占用主機的磁盤空間,這樣的話,磁盤很容易就會被用完。這篇博客介紹了一個簡單的解決方案 - Docker System命令。...
閱讀 2576·2021-10-25 09:45
閱讀 1238·2021-10-14 09:43
閱讀 2297·2021-09-22 15:23
閱讀 1519·2021-09-22 14:58
閱讀 1934·2019-08-30 15:54
閱讀 3539·2019-08-30 13:00
閱讀 1354·2019-08-29 18:44
閱讀 1571·2019-08-29 16:59