Docker 常用命令
帮助命令
- docker version # 显示docker的版本信息
- docker info # 显示docker的系统信息 包括镜像和容器的数量
- docker --help # 帮助命令
可以直接从官网文档上面获取到所有的命令详情,是一个不错的学习途径。
镜像命令
- docker images # 查看本地主机上的镜像
[root@VM-87-165-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 6 months ago 13.3kB
[root@VM-87-165-centos ~]#
REPOSITORY 镜像的仓库名字
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 创建的时间
SIZE 大小
-a # 列出所有镜像
-q # 只显示镜像的ID
-
docker search # 搜索仓库中的镜像
和在网页上搜索是一样的,不过可以在网页上看到更详细的版本信息。
docker search mysql --filter=STARS=3000 # 搜索出Stars大于3000的
-
docker pull # 下载镜像
# 下载mysql镜像,default tag,默认最新版latest docker pull mysql # 指定版本下载 docker pull mysql:5.7
-
docker rmi # 删除镜像
# 删除一个 可以通过名称 也可以指定id -f表示删除所有 强制删除
docker rmi -f 9cfcce23593a
# 删除多个 用空格分隔id
docker rmi -f id id id
# 删除所有
docker rmi -f $(docker images -aq) # images -aq就是查所有镜像id,从而递归删除
容器命令
下载一个centos
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@VM-87-165-centos ~]#
我们有了镜像才可以创建容器
- 新建容器并启动容器
docker run [可选参数] image
## 参数说明
--name="name" 容器名字 用来区分容器 centos1 centos2...
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 随机指定端口
-P 指定容器端口
# 测试
[root@VM-87-165-centos ~]# docker run -it centos /bin/bash # 启动并进入centos
[root@bc219f0f9467 /]#
[root@bc219f0f9467 /]#
- 列出所有运行的容器
docker -ps
# 当前正在运行的容器
[root@VM-87-165-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@VM-87-165-centos /]#
-a # 列出当前正在运行的容器+历史运行过的容器
[root@VM-87-165-centos /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc219f0f9467 centos "/bin/bash" 3 minutes ago Exited (127) About a minute ago youthful_khorana
80eef72f1522 hello-world "/hello" 26 minutes ago Exited (0) 26 minutes ago keen_wright
[root@VM-87-165-centos /]#
-n=? # 显示最近创建的容器个数
[root@VM-87-165-centos /]# docker ps -n=4
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc219f0f9467 centos "/bin/bash" 8 minutes ago Exited (127) 6 minutes ago youthful_khorana
80eef72f1522 hello-world "/hello" 32 minutes ago Exited (0) 32 minutes ago keen_wright
[root@VM-87-165-centos /]#
-q # 只显示容器的编号
[root@VM-87-165-centos /]# docker ps -q
287256016c3a
[root@VM-87-165-centos /]#
-
退出容器
exit # 容器停止并退出 CTRL+P+Q # 容器退出且不停止
-
删除容器
docker rm 容器ID # 删除指定容器 不能删除正在运行的容器 如果要强制删除要加 -rf
docker rm -f $(docker ps -aq) # 删除所有容器
- 启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前正在运行的容器
常用的其他命令
- 后台启动容器
# docker run -d 镜像名
[root@VM-87-165-centos /]# docker run -d centos
360a51e37e1e263c38a93afb0df72f27e5dd94f34c9bd1fc5e7c62c4507936f7
注意: docker容器后台运行,就必须要有一个前台进程,docker发现没有应用就会自动停止
-
查看日志
docker logs -tf --tail numbers 容器ID # 写一个简单的shell脚本测试一下 [root@VM-87-165-centos /]# docker run -d centos /bin/bash -c "while true; do echo hello world.; sleep 1 ; done" 14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8 # 查看当前正在运行的容器 [root@VM-87-165-centos /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 14a75a12bbb5 centos "/bin/bash -c 'while…" 30 seconds ago Up 28 seconds jolly_satoshi [root@VM-87-165-centos /]# [root@VM-87-165-centos /]# # 显示日志 -tf # 显示日志 带时间戳 --tail numbers # 显示日志条数 [root@VM-87-165-centos /]# docker logs -tf --tail 10 14a75a12bbb5 2021-09-03T14:10:41.286786706Z hello world. 2021-09-03T14:10:42.287902900Z hello world. 2021-09-03T14:10:43.289016061Z hello world. 2021-09-03T14:10:44.290194615Z hello world. 2021-09-03T14:10:45.291417030Z hello world. 2021-09-03T14:10:46.292493843Z hello world. 2021-09-03T14:10:47.293625678Z hello world. 2021-09-03T14:10:48.294787058Z hello world. 2021-09-03T14:10:49.295927291Z hello world. 2021-09-03T14:10:50.297062082Z hello world. 2021-09-03T14:10:51.298160263Z hello world. 2021-09-03T14:10:52.299997841Z hello world. 2021-09-03T14:10:53.300332483Z hello world. 2021-09-03T14:10:54.301518379Z hello world. ^C
-
查看容器中的进程信息
docker top 容器id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsVQFybi-1631416514248)(C:\Users\hubertxxu.TENCENT\AppData\Roaming\Typora\typora-user-images\image-20210903221708450.png)]
-
查看镜像的元数据,这个指令也比较重要,后面我们要看docker网络和挂载点都需要用这条指令来查看
# docker inspect 容器id [root@VM-87-165-centos /]# docker inspect 14a75a12bbb5 [ { "Id": "14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8", # 正在的容器id "Created": "2021-09-03T14:09:55.983628589Z", "Path": "/bin/bash", "Args": [ "-c", "while true; do echo hello world.; sleep 1 ; done" ], "State": { "Status": "running", # 状态 "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 11744, "ExitCode": 0, "Error": "", "StartedAt": "2021-09-03T14:09:56.236141599Z", "FinishedAt": "0001-01-01T00:00:00Z" }, "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55", "ResolvConfPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/resolv.conf", "HostnamePath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/hostname", "HostsPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/hosts", "LogPath": "/data/docker/containers/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8/14a75a12bbb581d35a9371e1c6a02d11abc5f61c3eb7abd0319f04c18e1edea8-json.log", "Name": "/jolly_satoshi", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": { "max-size": "50m" } }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "CgroupnsMode": "host", "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": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043-init/diff:/data/docker/overlay2/e34b025d4270fbcf5a878e4e30644fb327255dbb987e6534d786bcbe931d6937/diff", "MergedDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/merged", "UpperDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/diff", "WorkDir": "/data/docker/overlay2/d1294dacf997f38bf66410c94bcce124f73472c403af0e2aadee1f5d940c6043/work" }, "Name": "overlay2" }, "Mounts": [], # 挂载 "Config": { "Hostname": "14a75a12bbb5", "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/bash", "-c", "while true; do echo hello world.; sleep 1 ; done" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20201204", "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": "0be4bfa5c3c46d50403605ea155cabc38130ef72917bb3059c81e0c15430258c", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/0be4bfa5c3c4", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "f871b71603b40d55d97a0ebcf1ed3cd56c7d2c528da350d23593996465c04a42", "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": "ca2ac8e50c311cc09ed6245a3cd263214bb91cedbb854b40997ff81600f46754", "EndpointID": "f871b71603b40d55d97a0ebcf1ed3cd56c7d2c528da350d23593996465c04a42", "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 } } } } ]
-
进入当前正在运行的容器
# 命令
docker exec -it 容器id bashShell
# 测试
[root@VM-87-165-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b468f286a7f0 centos "/bin/bash" 24 seconds ago Up 23 seconds admiring_jennings
[root@VM-87-165-centos /]# docker exec -it b46 /bin/bash
[root@b468f286a7f0 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@b468f286a7f0 /]#
[root@b468f286a7f0 /]#
[root@b468f286a7f0 /]#
[root@b468f286a7f0 /]#
# 命令
docker attach 容器id
# 测试
[root@VM-87-165-centos /]# docker attach b46
[root@b468f286a7f0 /]#
[root@b468f286a7f0 /]#
[root@b468f286a7f0 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@b468f286a7f0 /]#
# 两个命令的区别
docker exec # 进入容器后开启一个新的终端,可以在里面操作,比较常用
docker attach # 进入容器当前正在执行的终端 不会启动新的进程
- 拷贝文件
## 命令
docker cp 容器id:/容器内路径 容器外路径
## 测试
# 查看当前正在运行的容器
[root@VM-87-165-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b468f286a7f0 centos "/bin/bash" 24 seconds ago Up 23 seconds admiring_jennings
[root@VM-87-165-centos /]# docker exec -it b46 /bin/bash
[root@b468f286a7f0 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@b468f286a7f0 /]# read escape sequence
[root@VM-87-165-centos /]# docker attach b46
[root@b468f286a7f0 /]# cd home/
[root@b468f286a7f0 home]# ls
[root@b468f286a7f0 home]# touch a.c # 容器内新建文件
[root@b468f286a7f0 home]# exit # 退出容器
exit
[root@VM-87-165-centos /]# docker cp b468f286a7f0:/home/a.c /home/ # 拷贝容器内的文件到当前主机
[root@VM-87-165-centos /]# ls /home/
a.c
[root@VM-87-165-centos /]#
# 拷贝是一个手动的过程, 未来可以使用 -v卷的技术 自动同步
-
查看内容占用
docker stats
小结
ot@b468f286a7f0 home]# exit # 退出容器
exit
[root@VM-87-165-centos /]# docker cp b468f286a7f0:/home/a.c /home/ # 拷贝容器内的文件到当前主机
[root@VM-87-165-centos /]# ls /home/
a.c
[root@VM-87-165-centos /]#
拷贝是一个手动的过程, 未来可以使用 -v卷的技术 自动同步
7. 查看内容占用
```shell
docker stats
小结
[外链图片转存中…(img-1MSWOx0l-1631416514251)]
[外链图片转存中…(img-ZCPA4yw2-1631416514253)]
[外链图片转存中…(img-q9tnqjIZ-1631416514257)]
[外链图片转存中…(img-i9IWc8zD-1631416514259)]