Docker命令

Docker命令

參考資料

命令格式

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

選項說明

  • [] 表示設置選項時可以設置不同的值,並且可以多次使用。
  • =false表示默認值爲false
  • =""表示默認是爲空

幫助文檔

$ docker --help

用法: docker COMMAND

A self-sufficient runtime for containers

選項:
–config string Location of client config files (default
“C:\Users\junchow\.docker”)
-D, --debug 開啓debug模式
-H, --host list Daemon socket(s) to connect to
-l, --log-level string 設置日誌級別,級別分爲debug|info|warn|error|fatal,默認爲info。
–tls Use TLS; implied by --tlsverify
–tlscacert string Trust certs signed only by this CA (default
“C:\Users\junchow\.docker\machine\machines\default\ca.pem”)
–tlscert string Path to TLS certificate file (default
“C:\Users\junchow\.docker\machine\machines\default\cert.pem”)
–tlskey string Path to TLS key file (default
“C:\Users\junchow\.docker\machine\machines\default\key.pem”)
–tlsverify Use TLS and verify the remote (default true)
-v, --version 終端打印顯示版本信息並退出
管理命令:
config 管理Docker配置
container 管理容器
image 管理鏡像
network 管理網絡
node 管理Swarm節點
plugin 管理插件
secret 管理Docker安全
service 管理服務
swarm 管理Swarm集羣
system 管理Docker系統
trust Manage trust on Docker images
volume 管理卷

命令:
attach 將標準輸入和標準輸出連接到正在運行的容器
build 使用dockerfile文件創建鏡像
commit 從容器的修改項中創建新的鏡像
cp 將容器的目錄或文件複製到本地文件系統中
create 創建一個新的鏡像
diff 檢查容器文件系統的修改
events 實時輸出docker服務器中發生的事件
exec 從外部運行容器內部的命令
export 將容器的文件系統到處爲tat文件包
history 顯示鏡像的歷史
images 輸出鏡像列表
import 從壓縮爲tar文件的文件系統中創建鏡像
info 顯示當前系統信息、docker容器與鏡像個數、設置信息等
inspect 使用JSON格式顯示容器與鏡像的詳細信息
kill 向容器發送kill信號關閉容器
load 從tar文件或標準輸入中加載鏡像
login 登錄docker註冊服務器
logout 退出docker註冊服務器
logs 輸出容器日誌信息
pause 暫停容器中正在運行的所有進程
port 查看容器的端口是否處於開放狀態
ps 輸出容器列表
pull 從註冊服務器中拉取一個鏡像或倉庫
push 將鏡像推送到docker註冊服務器
rename 重命名一個容器
restart 重啓一個或多個容器
rm 刪除一個或多個容器,若沒有指定標籤則刪除lastest標籤。
rmi 刪除一個或多個鏡像,若沒有指定標籤則刪除lastest標籤。
run 在一個新容器中中運行命令,用於指定鏡像創建容器。
save 將一個或多個鏡像保存爲tar包
search 從Docker Hub中搜索鏡像
start 啓動一個或多個已經停止的容器
stats Display a live stream of container(s) resource usage statistics
stop 停止一個或多個正在運行的容器
tag 設置鏡像標籤
top 顯示容器中正在運行的進程信息
unpause 重啓pause命令暫停的容器
update 更新一個或多個容器的配置
version 顯示docker版本信息
wait 等待容器終止然後輸出退出碼
Run ‘docker COMMAND --help’ for more information on a command.

Docker命令

容器生命週期

docker run

# run用於指定鏡像創建容器
$ docker run [選項] <鏡像名稱, id> [命令] [參數]

選項

-d, --detach=false 指定容器運行於前臺還是後臺,默認爲false。
-i, --interactive=false 打開標準輸入用於控制檯交互
-t, --tty=false 分配tty設備用來支持終端登錄,默認爲false。
-u, --user="" 指定容器的用戶
-a, --attach=[] 登錄容器,必須是以docker run -d啓動的容器。
-w, --workdir="" 設置容器的工作目錄
-c, --cpu-shares=0 設置容器CPU權重,在CPU共享場景下使用。
-e, --env=[] 設置環境變量,容器中可使用該環境變量。
-m, --memory="" 設置容器的內存上限
-p, --public=[] 設置容器暴露的端口
-h, --hostname="" 設置容器的主機名
-v, --volume=[] 設置容器掛載的存儲卷,也就是掛載到容器的某個目錄。
–volumn-from=[] 給容器掛載其他容器上的卷,也就是掛載到容器的某個目錄。
–cap-add=[] 添加權限
–cap-drop=[] 刪除權限
–cidfile="" 運行容器後在指定文件中寫入容器PID值,這是典型的監控系統的用法。
–cpuset="" 設置容器可以使用那些CPU,此參數用來設置容器獨佔CPU。
–device=[] 添加主機設備給容器,相當於設備直通。
–dns=[] 設置容器的DNS服務器
–dns-search=[] 設置容器的DNS搜索域名,寫入到容器的/etc/resolv.conf文件。
–env-file=[] 設置環境變量文件,文件格式爲每行一個環境變量。
–expose=[] 設置容器暴露的端口,即修改鏡像的暴露端口。
–link=[] 設置容器之間的關聯關係,使用其他容器的IP、env等信息。
–lxc-conf=[] 設置容器的配置文件,只有在指定–exe-driver=lxc時使用。
–name="" 設置容器的名稱,可通過名字進行容器管理,links特性需要使用名字。
–net=“bridge” 容器網絡設置
–privileged=false 設置容器是否爲特權容器,特權容器擁有所有的capabilities。
–restart=“no” 設置讓其停止後的重啓策略
–rm=false 設置容器停止後自動刪除容器,不支持以docker run -d啓動的容器。
–sig-proxy=true 設置由代理接收並處理信號,但SIGCHLD、SIGSTOP、SIGKILL不能被代理。

命令

-d, --detach Detach模式,默認爲守護進程模式,即容器以後臺方式運行。
–rm=false 若容器內的進程終止則自動刪除容器,禁止和-d選項一起使用。
–sig-proxy=true 將所有信號傳遞給進程,非TTY模式也一樣,但不能傳遞SIGCHLD、SIGKILL、SIGSTOP信號。

運行一個在後臺執行的容器,同時使用控制檯管理。

$ docker run -i -t -d ubuntu:latest

運行一個帶命令且在後臺不斷執行的容器,不直接展示容器內部信息。

$ docker run -d ubuntu:latest ping www.docker.com

運行一個在後臺不斷執行的容器,同時帶有命令,程序被終止後還能重啓繼續跑,可用控制檯管理。

$ docker run -d --restart=always ubuntu:latest ping www.docker.com

爲容器指定一個名字

$ docker run -d --name=ubuntu_server ubuntu:latest

容器暴露80端口並指定宿主機81端口與其通信(宿主機端口:容器端口)

$ docker run -d --name=ubuntu -p 81:80 ubuntu:latest

指定容器內目錄與宿主機目錄共享(宿主機目錄:容器目錄)

$ docker run -d --name=ubuntu_server -v /home/www:/var/www ubuntu:latest

設置宿主機與docker的共享目錄

$ docker run -d -i -t -p 80:80 -v /share/swoft:/var/www/swoft --name swoft swoft/swoft /bin/bash

使用docker run啓動容器,docker在後臺的標準操作流程:

  1. 檢查本地是否存在指定的鏡像,若不存在則從公有倉庫下載。
  2. 使用鏡像創建並啓動容器
  3. 分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀可寫層。
  4. 從宿主機配置的網橋接口中橋接一個虛擬機接口到容器中去
  5. 從地址池分配一個IP地址給容器
  6. 執行用戶指定的應用程序
  7. 執行完畢後容器被終止
docker run

docker create

# create 使用指定的鏡像創建容器,與run命令不同的是,使用create命令只能創建容器而並不啓動。
$ docker create [選項] <鏡像名稱,id> <命令> [參數]

選項

-a, --attach=[] 將標準輸入、標準輸出、標準錯誤鏈接到容器
-C, --cpu-shares=0 設置CPU資源分配,默認爲1024。
-e, --env=[] 向容器設備環境變量,用於傳遞設置或密碼。
-h, --hostname="" 設置容器主機名
-i, --interactive=false 激活標準輸入,即使未與容器連接,也維持標準輸入。
-m, --memory="" 設置內存限制,格式<數字><單位>,單位可用b、k、m、g。
-P, --publish-all=false 將連接到主機的容器的所有端口暴露在外
-p, --publish=[] 將連接到主機的容器的特定端口暴露在外,主要用於暴露web服務器的端口。
-t, --tty=false 使用TTY模式,若要使用Bash則必須設置該選項。
-u, --user="" 設置容器運行時要使用的Linux用戶賬戶和UID
-v, --volume=[] 設置數據卷,設置要與主機共享的目錄,不將文件保存到容器而是直接保存到主機,在主機目錄後添加:ro與:rw進行讀寫設置,默認未:rw。
-w, --workdir="" 設置容器內部要運行進程的目錄
-add-host=[] 向容器的/etc/hosts添加主機名與IP地址
–cap-add=[] 設置容器中使用的cgroups的特定capablity,若設置爲all則使用所有的capablity。
–cap-drop=[] 從容器中刪除cgroup的特定capablity。
–cidfile="" 設置cid文件路徑,cid中存儲着所創建容器的id。
–cpuset="" 在多核CPU中設置要運行容器的核心數
–device=[] 添加主機設備到容器,格式爲<主機設備>:<容器設備>
–dns=[] 設置容器中使用的DNS服務器
–dns-search=[] 設置docker中要使用的DNS搜索域
–entrypoint="" 忽略Dockerfile的ENTRYPOINT設置,強制設置爲其他值。
–env-file=[] 向容器應用設置環境變量文件
–expose=[] 僅連接容器的端口和主機,並不暴露在外。
–link=[] 進行容器連接,格式 <容器名稱>:<別名>
–lxc-conf=[] 若使用LXC驅動則可設置LXC選項
–name 設置容器名稱
–net=“bridge” 設置容器的網絡模式
–privileged=false 在容器內部使用主機的所有linux內核功能
–restart="" 設置容器內部進程終止時重啓策略
–security-opt=[] 設置SELinux、AppArmor選項
–volumn-from=[] 連接數據卷容器,設置格式未<容器名稱,id>:<:ro, :rw>,默認讀寫設置遵從-v選項的設置。

使用docker鏡像nginx:latest創建一個容器名爲ubuntu_serve

$ docker create --name ubuntu_serve ubuntu:latest
$ docker create -it --name ubuntu_server ubutnu:latest /bin/bash

docker start

# start用於啓動容器
$ docker start <選項><容器名稱, id>

選項

-a, --attach=false 將標準輸入、標準輸出、標準錯誤連接到容器,傳遞所有信號。
-i, --interactive=false 激活標準輸入

docker stop

# stop用於終止容器
$ docker stop <選項><容器名稱, id>

選項

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

docker restart

# restart 用於重啓容器
$ docker restart [選項] <容器名稱, id>

docker pause

# pause 用於暫停容器中所有的進程
$ docker pause [選項] <容器名稱, id>

docker unpause

# unpause用於重啓使用pause命令暫停的容器
$ docker unpause <容器名稱, id>

docker kill

# kill用於殺掉一個運行中的容器,發送SIGKILL信號來停止的主進程。
$ docker kill [選項] <容器名稱, id>

選項

-s 向容器發送一個信號

殺死運行中的容器nginx

$ docker kill -s KILL nginx

docker rm

# rm用於刪除一個或多個容器
$ docker rm [選項] <容器名稱,id>

選項

-f 通過SIGKILL信號強制刪除一個運行中的容器
-l 移除容器間的網路連接而非容器本身
-v 刪除與容器關聯的卷

強制刪除容器test

$ docker rm -f test

刪除容器test並刪除掛載的數據卷

$ docke rm -v test

docker exec

# exec 用於在運行中的容器中執行命令
$ docker exec [選項] <容器名稱, id> <命令> [參數]

選項

-d 分離模式即在後臺運行
-i 即使沒有附加也保持STDIN標準輸入打開
-t 分配一個僞終端

在容器test中以交互模式執行容器內/root/test.sh腳本

$ docker exec -it test /bin/sh /root/test.sh

容器操作

docker ps

# ps用於輸出容器列表
$ docker ps <選項>

選項

-a, --all=false 列出所有容器,不帶-a則輸出當前正在運行的容器。
–before="" 列出特定容器創建前的容器,包含停止的容器。
-f, --filter=[] 設置輸出過濾
-l, --latest=false 列出最後創建的容器包含停止的容器
-q, --quiet=false 只輸出容器的ID

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

docker top

# top用戶顯示容器中正在 運行的進程信息
$ docker top <容器名稱, id><ps選項>

$ docker top

docker attach

# attach 用於將標準輸入與標準輸出連接到正在運行的容器
$ docker attach <選項><容器名稱, id>

docker logs

# logs用於獲取容器的日誌
$ docker logs [選項] <容器名稱,id>

選項

-f 跟蹤日誌輸出
–since 顯示某個開始時間的所有日誌
-t 顯示時間戳
–tail 僅僅列出最新n條容器日誌

跟蹤查看test容器的日誌

$ docker logs -f test

查看test容器從2019年4月1日以後的最新10條日誌

$ docker logs --since=“2019-04-01” --tail=10 test

如何動態跟蹤並查看myswoft容器的日誌詳情呢?

docker@ ~$: docker logs -tf --details myswoft

如何清理日誌文件呢?

Docker日誌默認存儲位於:/var/lib/docker/containers/<container_id>/*.log

# 在docker中切換爲root用戶
docker@default: ~$ su -i

查看docker容器的id

root@default: ~$ docker ps -a | grep myswoft
d26ff0ff1bc0 swoft/swoft “php /var/www/swoft/…” 2 weeks ago Up 22 minutes 0.0.0.0:80->80/tcp myswoft

查看容器日誌文件大小

root@default: ~$ ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
-rw-r----- 1 root root 0 May 14 13:32 /var/lib/docker/containers/d26ff0ff1bc0dc0221ce5be7f78da96123a0ddbb379ab8befd2d1403f44e820b/d26ff0ff1bc0dc0221ce5be7f78da96123a0ddbb379ab8befd2d1403f44e820b-json.log

進入日誌目錄

root@default: ~$ cd /var/lib/docker/containers/d26ff0ff1bc0dc0221ce5be7f78da96123a0ddbb379ab8befd2d1403f44e820b

臨時清理日誌文件

root@default: /var…/$ truncate -s 0 /var/lib/docker/containers/<container_id>/*-json.log

臨時清理日誌文件

root@default: /var…/$ cat /dev/null > *-json.log

使用rm刪除日誌文件後是需要重啓容器的,如果容器運行狀態下Linux進程會引用着不會釋放磁盤空間。

root@default /var/…/$ rm -rf *-json.log

docker port

# port用於列出指定容器的端口映射,或者用於查找將PRIVATE_PORT NAT到面向公衆的端口。
$ docker port [選項] <容器名稱,id> [PRIVATE_PORT[/PROTO]]

查看test容器的端口映射情況

$ docker port test

鏡像倉庫

docker search

# search用於在docker hub中搜索鏡像
$ docker search <選項><搜索關鍵詞>

選項

–automated=false 只顯示由docker hub的automated build創建的鏡像
–no-trunc=false 顯示所有因內容過長而省略的部分
-s, --stars=0 顯示有特定星級以上的鏡像

本地鏡像

docker images

# images用於輸出鏡像列表
$ docker images <選項><鏡像名稱, id>

選項

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

$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

docker rmi

# rmi 用於刪除鏡像,若沒有指定標籤則會刪除latest標籤。
$ docker rmi <註冊名稱>/<鏡像名稱, id>:<標籤>

選項

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

刪除所有鏡像

$ docker rmi docker images -aq

docker tag

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

選項

  • f, --force=false 強制設置,即使已擁有標籤,如遠程倉庫設置標籤。

docker save

# save用於將鏡像保存爲tag包文件
$ docker save <選項><鏡像名稱>:<標籤>

選項

-o, --output="" 設置保存時的文件名稱

若不設置-o選項,tar包文件會輸出到標準輸出,所以必須設置重定向。如果僅指定鏡像名稱但沒有指指定標籤,則會將所有標籤都保存到一個tar包文件中。

信息查看

docker info

# info用於顯示當前系統信息、docker容器和鏡像數量、設置等信息。
$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 18.09.5
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.14.111-boot2docker
Operating System: Boot2Docker 18.09.5 (TCL 8.2.1)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 989.4MiB
Name: default
ID: 7ST2:CIQM:GLVF:AUF2:QFKR:N2LB:FSO7:V6UJ:5IFN:MQVZ:WK7L:TGSS
Docker Root Dir: /mnt/sda1/var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
 provider=virtualbox
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

docker version

# version用戶輸出docker的版本信息
$ docker version
Client:
 Version:       18.03.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    0520e24302
 Built: Fri Mar 23 08:31:36 2018
 OS/Arch:       windows/amd64
 Experimental:  false
 Orchestrator:  swarm

Server: Docker Engine - Community
Engine:
Version: 18.09.5
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: e8ff056dbc
Built: Thu Apr 11 04:50:00 2019
OS/Arch: linux/amd64
Experimental: false

未完待續...

轉載:https://www.jianshu.com/p/afb20541d781

發佈了78 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章