前言
Hai 我們又見面了,上篇文章給大家講了是什么Docker,以及Docker的安裝部署,本篇文章之主要是給大家下常用的命令(重點建議收藏),
看完本文章可以掌握以下內容:
- 會使用幫助檔案(重點)
- 掌握常用的鏡像命令(重點)
- 掌握常用的容器命令(重點)

一、Docker常用命令
1.1 幫助命令
docker version #顯示docker版本資訊
docker info #顯示docker的系統資訊,包括鏡像和容器數量
docker 命令 --help #幫助檔案
官方幫助檔案
1.2 鏡像命令
1.2.1 docker imager 查看所有本地的主機上的鏡像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
#解釋
REPOSITORY 鏡像的倉庫源
TAG 鏡像標簽
IMAGE ID 鏡像的Id
CREATED 鏡像的創建時間
SIZE 鏡像的大小
#可選項
[root@192 ~]# docker images --help
-a, --all # 列出所有鏡像
-q, --quiet # 只顯示鏡像Id
1.2.2 docker search 搜鏡鏡像
[root@192 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10174 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3747 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 743 [OK]
percona Percona Server is a fork of the MySQL relati… 511 [OK]
#可選項
--filter STARS=3000 #會去搜索大于3000的即鏡像
[root@192 ~]# docker search mysql --filter STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10174 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3747 [OK]
頁面搜索
1.2.3 docker pull 下載鏡像
#默認下載最新版
[root@192 ~]# docker pull mysql
Using default tag: latest #如果不寫tage,默認就是latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete #分層下載 docker iamge的核心 聯合檔案系統
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 簽名 唯一表示
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真實地址
#等價
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定版本下載
[root@192 ~]# docker pull mysql:5.7

1.2.4 docker rmi 洗掉鏡像
[root@192 ~]# docker rmi -f 鏡像Id 洗掉指定鏡像
[root@192 ~]# docker rmi -f 鏡像Id 鏡像Id 鏡像Id 洗掉多個鏡像
[root@192 ~]# docker rmi -f $(docker images -qa) 洗掉所有鏡像
1.3 容器命令
說明: 我們有了鏡像才可以創建容器,Linux下載一個centos
docker pull centos
新建容器命令
docker run [可選參數] image
# 引數說明
--name 容器名 tomcat1/java/ 用來區分容器
-d 后臺方式運行
-it 使用互動方式運行,進入容器查看內容
-p 指定容器的埠 -p 8080:8080
-p ip:主機埠:容器埠
-p 主機埠:容器埠(常用)
-p 容器埠
-p 隨機指定埠
#測驗案例 啟動容器
[root@192 ~]# docker run -it centos /bin/bash
[root@c1afa7ccf7d6 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#退回容器到主機
[root@c1afa7ccf7d6 /]# exit
exit
1.3.1 查看Docker當前運行的容器
#docker -ps 命令
#引數介紹
# 列出當前運行的容器
-a # 列出當前在運行的容器+歷史容器
-n=n # 顯示容器的n個值
-q # 只顯示容器編號
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1afa7ccf7d6 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago lucid_mclean
536b2397c88f bf756fb1ae65 "/hello" 4 days ago Exited (0) 4 days ago competent_lamport
1.3.2 退出容器
exit # 直接退出容器不后臺運行
Ctrl + P + Q #退出如容器 后臺運行
1.3.3 洗掉容器
docker rm 容器Id #洗掉指定的容器,不能洗掉在運行程序也中的容器,如果要強制洗掉加-f
docker rm -f $( docker ps -aq) #洗掉所有容器器
docker ps -a -q | xargs docker rm #洗掉所有容器器
1.3.4 啟動和停止容器命令
docker start 容器 id #啟動容器
docker restart 容器 id # 重啟容器
docker stop 容器 id #停止當前正在運行的容器
docker kill 容器 id #強制停止當前容器
1.3.5 其他命令
#命令 docker run -d 鏡像名!
root@192 ~]# docker run -d centos
66cee4f4493944e503edbcd4477bed9b778d7a41cb5698f8334a7a23118f1c9c
# 問題 docker ps 發現 cnetos停止了
#常用的坑:
#docker 容器使用后臺運行,就必須要有一個前臺運行行程,docker發現沒有應用,就會自動停止
#nginx,容器啟動后,發現自己沒有提供服務,就會立刻停掉,就沒有程式了
1.3.6 查看日志
docerk logs -f -t --tail 容器 沒有日志
#自己撰寫一個shell腳本
[root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo hello 大資料老哥; sleep 1 ;done"
88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64
[root@192 ~]# docker ps
CONTAINER ID
88c647580c32
#顯示日志
-tf #顯示日志
--tail number #顯示日志條數
[root@192 ~]# docker logs -tf --tail 10 88c647580c32
2020-11-21T06:54:44.902712929Z hello 大資料老哥
2020-11-21T06:54:45.904301943Z hello 大資料老哥
2020-11-21T06:54:46.906363448Z hello 大資料老哥
2020-11-21T06:54:47.908508313Z hello 大資料老哥
1.3.7 查看容器行程資訊
docker top 容器ID
[root@192 ~]# docker top 88c647580c
UID PID PPID C STIME
root 2704 2688 0 14:52
root 3072 2704 0 14:57
1.3.8 查看鏡像的元資料新資訊
#命令
docker inspect 容器Id
#測驗
[root@192 ~]# docker inspect 88c647580c32
[
{
"Id": "88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64",
"Created": "2020-11-21T06:52:21.329138725Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello 大資料老哥; sleep 1 ;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 2704,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-11-21T06:52:21.566992956Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
"ResolvConfPath": "/var/lib/docker/containers/88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64/hostname",
"HostsPath": "/var/lib/docker/containers/88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64/hosts",
"LogPath": "/var/lib/docker/containers/88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64/88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64-json.log",
"Name": "/cool_nightingale",
"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/4b7ce116b43405a39e12c1a816b1d7c034410ed8a50491b50ec994bffdd61802-init/diff:/var/lib/docker/overlay2/d08d9c2126b9989feb820ace4e0779542fe32f6f5423787aa50f571b459161a2/diff",
"MergedDir": "/var/lib/docker/overlay2/4b7ce116b43405a39e12c1a816b1d7c034410ed8a50491b50ec994bffdd61802/merged",
"UpperDir": "/var/lib/docker/overlay2/4b7ce116b43405a39e12c1a816b1d7c034410ed8a50491b50ec994bffdd61802/diff",
"WorkDir": "/var/lib/docker/overlay2/4b7ce116b43405a39e12c1a816b1d7c034410ed8a50491b50ec994bffdd61802/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "88c647580c32",
"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"
],
"Cmd": [
"/bin/sh",
"-c",
"while true;do echo hello 大資料老哥; sleep 1 ;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20200809",
"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": "f5887061ecca23559bfc1c860c5b5133d4fae2f51a1be487ec8b3850fddcc32d",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/f5887061ecca",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "123de981bb9d0e01c73ebd538b584b63f216b9cfec368be568c45252ceef16ba",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "4c16d7d1e5efc8197db13862f7416453510904d989db0488798f2b4a709cefb0",
"EndpointID": "123de981bb9d0e01c73ebd538b584b63f216b9cfec368be568c45252ceef16ba",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
1.3.9 進入當前正在云行的容器
# 我們通常容器都是后臺運行的,需要進入容器進行修改一些配置
#命令
#方式一
[root@192 ~]# docker ps
CONTAINER ID
88c647580c32
[root@192 ~]# docker exec -it 88c647580c /bin/bashh
[root@88c647580c32 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@88c647580c32 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:52 ? 00:00:00 /bin/sh -c while true;do echo hello ???????????????; sleep 1 ;done
root 1121 0 0 07:10 pts/0 00:00:00 /bin/bash
root 1138 1 0 07:10 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 1139 1121 0 07:10 pts/0 00:00:00 ps -ef
[root@88c647580c32 /]# exit
exit
#方式二
[root@88c647580c32 /]# docker attach 88c647580c
正在運行的代碼
# attach 與 exec 區別
docker exec #進容器后開啟一個新的后端,可以直接在面進行操作
docker attach #進入容器正在執行終端,不會啟動新的行程
docker 與本地系統檔案進行拷貝
# 進入容器
[root@192 ~]# docker exec -it 88c647580c /bin/bash
[root@88c647580c32 /]# cd home/
#創建檔案
[root@88c647580c32 home]# touch test.txt
[root@88c647580c32 home]# exit
exit
#拷貝檔案
[root@192 ~]# docker cp 88c647580c:/home/test.txt /home/
[root@192 ~]# ls /home/
test.txt
[root@192 ~]#
二、總結
上述給大家講解了一些docker常用的命令,還不快多多的練起來,熟能生巧,無論是做高級工程師還是大資料運維 這個一個必會的技能,后面會給大家分享一下關于docker的實戰操作,如:安裝 nginx、Tomcat、commit鏡像的原理、MySQL資料同步、DockerFile 等,
三、 粉絲福利
以下內容是博主花費了1個星期的時間總結各大廠商的面試題與拜訪大佬總結的內容那個 關注公證號【大資料老哥】回復:Docker基礎面試題即可獲取,

關注老哥不迷路公證號搜索【大資料老哥】可以獲取可以獲取 大資料面經、Java面經、超級棒的開發軟體、各種書籍推薦…等(各種資源等著你呦),

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227497.html
標籤:其他
