一、幫助指令
docker version # 顯示docker的基本資訊
docker info # 系統資訊,鏡像和容器的數量
docker 指令 --help # 全部資訊
- 官網文檔:https://docs.docker.com/reference/
二、鏡像指令[增删改查]:
- 檢視所有鏡像 docker images
- 搜尋鏡像 docker search 鏡像名
- 下載下傳鏡像 docker pull 鏡像名[:tag]
- 删除鏡像 docker rmi -f 鏡像id
- 删除所有鏡像 docker rmi -f $(docker images -aq)
1、檢視所有鏡像:docker images
- 檢視所有本地主機上的鏡像
[root@192 ~]# docker images
# 解釋
REPOSITORY # 鏡像倉庫源
TAG # 鏡像的标簽
IMAGE ID # 鏡像的ID
CREATED # 鏡像的建立時間
SIZE # 鏡像的大小
--all , -a Show all images (default hides intermediate images) # 顯示所有
--digests Show digests
--filter , -f Filter output based on conditions provided
--format Pretty-print images using a Go template
--no-trunc Don’t truncate output
--quiet , -q Only show numeric IDs # 隻顯示id
2、搜尋鏡像:docker search
- 搜尋倉庫中的鏡像,相當于網頁搜尋
- 推薦到docker hub官網搜尋:http://hub.docker.com
docker search mysql
docker search --help
- 設定搜尋條件:
# 解釋
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
docker search mysql --filter=STARS=3000 # 搜尋出Stars大于3000的
3、下載下傳鏡像:docker pull
- 版本到官網檢視,官網:https://hub.docker.com/_/mysql
★ docker的精髓:
image的核心,聯合檔案系統
分層下載下傳
(1)下載下傳鏡像指令:docker pull 鏡像名[:tag]
- 不寫tag,預設是lasest
docker的精髓: 分層下載下傳
分層下載下傳
4、删除鏡像:docker rmi
- 删除鏡像指令:docker rmi 鏡像id/鏡像名稱
# 删除一個 可以通過名稱 也可以指定id -f表示強制
docker rmi -f 9cfcce23593a
# 删除多個 用空格分隔id
docker rmi -f 鏡像id 鏡像id 鏡像id
# 删除所有
docker rmi -f $(docker images -aq) # images -aq就是查所有鏡像id,進而遞歸删除
三、容器指令
- 鏡像建立運作一個docker容器執行個體 docker run [可選參數] image
# 啟動并進入容器 docker run -it centos /bin/bash # 等價于:先run啟動,然後通過exex /bin/bash 進入容器 docker run -it centos docker exec -it 容器id /bin/bash
- 檢視運作的容器:docker ps [可選參數]
- 退出容器:【停止容器】exit 【非停止容器】ctr+p+q
- 删除容器:docker rm [可選參數] 容器id
# 删除所有容器 -f 強制的 docker rm -f $(docker ps -aq) # 删除所有容器 docker ps -a -q|xargs docker rm
- 啟動、重新開機、停止、殺死容器:
- 啟動:docker start 容器id
- 重新開機:docker restart 容器id
- 停止:docker stop 容器id
- 殺死:docker kill 容器id
1、案例:centos容器的測試
(1)下載下傳centos 鏡像
docker pull centos
(2)建立容器執行個體并啟動
docker run [可選參數] image
# 參數說明
--name="Name" # 容器名字,用于區分容器
-d 背景方式運作
-it 使用互動方式運作,進入容器檢視内容
-p 指定容器的端口 如-p 8080::8080
-p ip:主機端口:容器端口
-p 主機端口:容器端口(常用)
-p 容器端口
-p 随機指定端口
# 測試,啟動并進入容器
docker run -it centos /bin/bash
# 等價于:
docker run -it centos
docker exec -it 容器id /bin/bash
# 檢視目錄,檢視容器内的centos,基本版本,很多指令都是不完善的!
ls
# 退出,從容器中退回主機
exit
(3)檢視運作的容器
# 檢視正在運作的容器
docker ps
# 檢視所有(包括曾經)運作的容器
docker ps -a
# 顯示最近建立的容器,設定顯示個數
docker ps -a - n=?
# 隻顯示容器的編号(容器id)
docker ps -aq
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9939864fa2e6 centos "bin/bash" 4 minutes ago Exited (0) 4 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 8 minutes ago Exited (0) 4 minutes ago lucid_cannon
a89ddb393d3d bf756fb1ae65 "/hello" 19 hours ago Exited (0) 19 hours ago gracious_bhabha
[root@192 ~]# docker ps -a -n=2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9939864fa2e6 centos "bin/bash" 6 minutes ago Exited (0) 6 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago
[root@192 ~]# docker ps -aq
9939864fa2e6
5f42e9930435
a89ddb393d3d
(4)退出容器
# 容器停止退出
exit
# 容器不停止退出 注意必須在英文輸入法下,中文輸入法不行
Ctrl + P + Q
[root@192 ~]# docker run -it centos /bin/bash
[root@bfcea13c40cd /]# [root@192 ~]# docker ps ##注意這裡會自動給個指令,删掉
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" About a minute ago Up About a minute stoic_wilson
edbd9366d959 centos "/bin/bash" 7 minutes ago Up 7 minutes affectionate_bartik
[root@192 ~]# docker exec -it edbd9366d959 /bin/bash ## 再次進入
[root@edbd9366d959 /]# exit ##停止并推出
exit
(5)删除容器
# 删除指定容器 不能删除正在運作的容器,如果強制删除 rm -f
docker rm 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有容器
docker ps -a -q|xargs docker rm
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" 29 minutes ago Up 29 minutes stoic_wilson
edbd9366d959 centos "/bin/bash" 35 minutes ago Up 35 minutes affectionate_bartik
9939864fa2e6 centos "bin/bash" 48 minutes ago Exited (0) 48 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 52 minutes ago Exited (0) 49 minutes ago lucid_cannon
a89ddb393d3d bf756fb1ae65 "/hello" 20 hours ago Exited (0) 20 hours ago gracious_bhabha
[root@192 ~]# docker rm 5f42e9930435
5f42e9930435
[root@192 ~]# docker rm edbd9366d959 # 注意正在運作的容器不能删除
Error response from daemon: You cannot remove a running container edbd9366d9596c744dd449119269b04de2f2a494e7fc471f6396bcefd94c33fe. Stop the container before attempting removal or force remove
[root@192 ~]# docker ps -aq # 所有容器id
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d
[root@192 ~]# docker rm -f $(docker ps -aq) # 全部删除
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d
(6)啟動和停止/殺死容器的操作
docker start
docker restart
docker stop
docker kill
四、常用其他指令
docker run -d 鏡像名/鏡像id
- 背景啟動docker指令:參數是 -d
docker logs [-f -t --tail n] 容器id
-
docker logs
檢視日志[沒有報錯資訊或者報錯資訊不足以解決問題時,需要檢視日志]:
- 檢視程序(ps): docker top 容器id
- 檢視正在運作的容器資訊: docker inspect 容器id
- 進入目前正在運作的容器 docker exec -it 容器id /bin/bash
- 從容器内拷貝檔案到主機上 容器資料拷貝到主機: docker cp 容器id 主控端的檔案目錄
- 檢視内容占用:docker stats
1、背景啟動docker,參數是 -d
docker run -d 鏡像名
問題:docker 容器使用背景運作,用docker ps 檢視的時候 發現停止了
原因:背景運作,docker發現前台沒有,容器啟動後,發現自己沒有提供服務,會立刻停止
2、檢視日志
docker logs
docker logs -f -t --tail n 容器id
[root@192 ~]# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g.
2013-01-02T13:23:37) or relative
(e.g. 42m for 42 minutes)
--tail string Number of lines to show from the
end of the logs (default "all")
-t, --timestamps Show timestamps # 時間戳
--until string Show logs before a timestamp (e.g.
2013-01-02T13:23:37) or relative
(e.g. 42m for 42 minutes)
# 腳本
while true;do echo shenzai;sleep
# 檢視日志,由于沒有運作腳本,是以啥也沒顯示
[root@192 ~]# docker logs -f -t --tail 10 c2887d35c71d
^C # ctrl+c退出
# 運作centos裡面加個腳本
[root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo shenzai;sleep 1;done"
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb6d7fbc3f27 centos "/bin/sh -c 'while t…" 7 seconds ago Up 6 seconds
# 檢視日志 發現隔一秒列印一條
[root@192 ~]# docker logs -f -t --tail 10 cb6d7fbc3f27
3、檢視運作的容器,檢視容器中的程序資訊 ps
- top 指令,友善以後殺死程序
- 指令:docker top 容器id
docker top 3cdbca722bab
UID PID PPID C STIME TTY TIME
root 24624 24603 0 22:22 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
4、檢視正在運作的容器資訊(鏡像中繼資料):inspect
- 指令:docker inspect 容器id
[root@192 ~]# docker inspect cb6d7fbc3f27
[
{
# 容器的完整id
"Id": "cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388",
# 建立時間
"Created": "2020-06-17T12:00:50.706906186Z",
# 腳本位置
"Path": "/bin/sh",
# 運作的腳本
"Args": [
"-c",
"while true;do echo shenzai;sleep 1;done"
],
"State": {
"Status": "running", # 狀态,正在運作
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1909, # 父程序id
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-06-17T12:00:51.093617477Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
# 來源鏡像
"Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f",
"ResolvConfPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hostname",
"HostsPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hosts",
"LogPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388-json.log",
"Name": "/dreamy_almeida",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
# 主機配置
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Capabilities": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"KernelMemory": 0,
"KernelMemoryTCP": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
# 其他配置
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907-init/diff:/var/lib/docker/overlay2/7f79322e0f58d651a84a555dadd83d92537788172525945d3f538dd95dce336c/diff",
"MergedDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/merged",
"UpperDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/diff",
"WorkDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/work"
},
"Name": "overlay2"
},
"Mounts": [], # 挂載
# 基本配置
"Config": {
"Hostname": "cb6d7fbc3f27",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
], # 基本環境變量,這裡沒有Java
# 基本指令
"Cmd": [
"/bin/sh",
"-c",
"while true;do echo shenzai;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200611",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
# 網卡,比如現在用的是橋接的網卡
"NetworkSettings": {
"Bridge": "",
"SandboxID": "4d701985d7e77aa153790b697b2f38a61e20555c224b7675e4bf650b82799882",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/4d701985d7e7",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "22b0fd2290ccbc4e066a75d3f01bd8bf32ee4352c5bbcfc9f911287219219571",
"EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03",
"DriverOpts": null
}
}
}
}
]
5、進入目前正在運作的容器
- 指令:docker exec -it 容器id bashSHELL
● 差別:是否開啟一個新的線程
docker exec 進入容器後開啟一個新的終端,可以在裡面操作(
)
常用
docker attach 進入容器正在執行的終端,不會啟動新的程序
# 我們通常容器都是使用背景方式運作的
docker exec -it 容器id bashSHELL
# 測試
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2887d35c71d centos "/bin/bash" 35 minutes ago Up 35 minutes
[root@192 ~]# docker exec -it c2887d35c71d /bin/bash
[root@c2887d35c71d /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@c2887d35c71d /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 11:57 pts/0 00:00:00 /bin/bash
root 14 0 0 12:32 pts/1 00:00:00 /bin/bash
root 28 14 0 12:32 pts/1 00:00:00 ps -ef
[root@c2887d35c71d /]# c2887d35c71d
[root@c2887d35c71d /]# exit
exit
# 方式二
[root@192 ~]# docker attach c2887d35c71d
[root@c2887d35c71d /]#
6、從容器内拷貝檔案到主機上 cp
# 運作
[root@192 ~]# docker run -it centos
# ctrl P Q 不關閉退出,檢視
[root@0569081aa89c /]# [root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0569081aa89c centos "/bin/bash" 19 seconds ago Up 19 seconds
hopeful_chebyshev
# 檢視主機home下無檔案
[root@192 ~]# cd /home
[root@192 home]# ls
# 進入正在運作的容器
[root@192 home]# docker attach 0569081aa89c
# 進入容器home目錄
[root@0569081aa89c /]# cd /home
# 在目錄中建立java檔案
[root@0569081aa89c home]# touch test.java
# 退出并停止容器
[root@0569081aa89c home]# exit
exit
# 檢視現在運作的容器
[root@192 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 容器雖然被停止,但是資料都會保留
[root@192 home]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0569081aa89c centos "/bin/bash" 3 minutes ago Exited (0) 8 seconds ago hopeful_chebyshev
f589e5684a01 centos "/bin/bash" 44 minutes ago Exited (0) 44 minutes ago cranky_easley
cb6d7fbc3f27 centos "/bin/sh -c 'while t…" 54 minutes ago Exited (137) 42 minutes ago dreamy_almeida
c2887d35c71d centos "/bin/bash" 58 minutes ago Exited (127) 16 minutes ago vigorous_kare
8ce188e5fee3 centos "/bin/bash" About an hour ago Exited (0) About an hour ago tender_dirac
7b1a7dd10ea4 centos "/bin/bash" 9 hours ago Exited (0) 9 hours ago fervent_mirzakhani
# 容器資料拷貝到主機
[root@192 home]# docker cp 0569081aa89c:/home/test.java /home
[root@192 home]# ls
test.java
# 拷貝是一個手動過程,未來我們使用 -v 卷的技術,可以實作自動同步 /home /home
7、檢視内容占用 stats
docker stats
如果本文對你有幫助的話記得給一樂點個贊哦,感謝!