Docker容器命令
1. docker run命令
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
启动容器
OPTIONS说明(常用):--name="容器新名字"
为容器指定一个名称;-d
: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);-i
:以交互模式运行容器,通常与-t同时使用;-t
:为容器重新分配一个伪输入终端,通常与-i同时使用;也即启动交互式容器(前台有伪终端,等待交互);-P
: 随机端口映射,大写P;-p
: 指定端口映射,小写p,格式为hostPort:containerPort, 比如-p 8080:80 对外访问8080端口,内部暴露出去的端口为80;
# 使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
[jack@hadoop104 ~]$ sudo docker run -it ubuntu /bin/bash
root@661c8c5766e5:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
# 如需退出,使用exit即可
root@661c8c5766e5:/# exit
exit
[jack@hadoop104 ~]$
退出容器
- 直接退出容器:输入exit回车即可
- 容器不停止退出: 使用快捷键ctrl+P+Q即可
1.1 启动守护式容器
[root@hadoop104 ~]# docker run -d -p 8080:8080 --name tomcat80 tomcat
b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b859f41f9816 tomcat "catalina.sh run" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat80
# 但是后台运行ubuntu时,会发现启动后马上退出
[root@hadoop104 ~]# docker run -d --name ubuntu ubuntu
a12982244c800b3a7612412da26f042107ccacca0cc004394f41c2f0df5e0873
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b859f41f9816 tomcat "catalina.sh run" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat80
Docker容器后台运行,就必须有一个前台进程(比如运行top,tail),否则会自动退出的。这个是Docker的机制设计的问题,所以最佳的解决方案是,将你要运行的程序以前台进程的形式运行, 比如ubuntu执行交互模式命令就不会退出进程。
2. docker ps命令
格式:docker ps [OPTIONS]
列出当前所有正在运行的容器
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的。
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。
--no-trunc :不截断输出。
[root@hadoop104 ~]# docker run --name tomcat -p 8080:8080 -d tomcat
fa0a57589dff1cb683d150220c9b4d9fde58073b5c4e79a27a95824dcea8b935
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa0a57589dff tomcat "catalina.sh run" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat
3. docker start命令
格式:docker start 容器ID或者容器名
启动容器
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43a8e5ae0118 ubuntu "/bin/bash" 14 minutes ago Up 14 minutes busy_cerf
fa0a57589dff tomcat "catalina.sh run" 23 minutes ago Up 23 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat
[root@hadoop104 ~]# docker kill fa0a57589dff
fa0a57589dff
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43a8e5ae0118 ubuntu "/bin/bash" 14 minutes ago Up 14 minutes busy_cerf
[root@hadoop104 ~]# docker start fa0a57589dff
fa0a57589dff
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43a8e5ae0118 ubuntu "/bin/bash" 15 minutes ago Up 15 minutes busy_cerf
fa0a57589dff tomcat "catalina.sh run" 24 minutes ago Up 2 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat
4. docker restart命令
格式:docker restart 容器ID或者容器名
重启容器
[root@hadoop104 ~]# docker restart fa0a57589dff
fa0a57589dff
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43a8e5ae0118 ubuntu "/bin/bash" 16 minutes ago Up 16 minutes busy_cerf
fa0a57589dff tomcat "catalina.sh run" 25 minutes ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat
可以看到tomcat被重启了。
5. docker stop命令
格式:docker stop 容器ID或者容器名
停止容器
[root@hadoop104 ~]# docker stop fa0a57589dff
fa0a57589dff
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
43a8e5ae0118 ubuntu "/bin/bash" 17 minutes ago Up 17 minutes busy_cerf
6. docker kill命令
格式:docker kill 容器ID或者容器名
强制停止容器
# 停止ubuntu容器,由于启动没有指定容器名称,busy_cerf为Docker随机生成的名字
[root@hadoop104 ~]# docker kill busy_cerf
busy_cerf
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7. docker rm命令
格式:docker rm 容器ID
删除已停止的容器
如果一次性删除多个容器, 有两种方式:
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
# 清空已经停止的容器,生产上面慎用
[root@hadoop104 ~]# docker rm -f $(docker ps -q -a)
5bf1ae2adb70
06e82da29ff9
0dfd8ec14717
43a8e5ae0118
f08ec6d92d9b
2aa01ed8f0e1
e31de493c48f
a379947215b9
b4ad63650fdc
fa0a57589dff
a74a08db4849
f732a04696d1
f46368af3f47
675f8261f4a4
7516e9febcb2
87c9590bf0ec
14595fefc0b6
92119b938e0f
6f9e0eb8bffd
661c8c5766e5
01effec270f5
06ee3502e53d
3521443f6ffd
a3a239208eb3
8. docker logs命令
格式:docker logs -f -t --tail 容器ID
查看容器日志
9. docker top命令
格式:docker top 容器ID
查看容器内运行的进程
[root@hadoop104 ~]# docker top b859f41f9816
UID PID PPID C STIME TTY TIME CMD
root 41620 41598 0 17:36 ? 00:00:09 /opt/java/openjdk/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED --enable-native-access=ALL-UNNAMED -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
10. docker inspect命令
格式:docker inspect 容器ID
查看容器内部细节
[root@hadoop104 ~]# docker inspect b859f41f9816
[
{
"Id": "b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124",
"Created": "2024-10-20T09:36:07.871496676Z",
"Path": "catalina.sh",
"Args": [
"run"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 41620,
"ExitCode": 0,
"Error": "",
"StartedAt": "2024-10-20T09:36:08.267995403Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:0bcf1082c8a095b7f862a2f6e19c07036dab2fc57506d5ae9f20cfc66e2106f4",
"ResolvConfPath": "/var/lib/docker/containers/b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124/hostname",
"HostsPath": "/var/lib/docker/containers/b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124/hosts",
"LogPath": "/var/lib/docker/containers/b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124/b859f41f981606e7ef1e1b02445858dbeb5b1e85ffc1e36770e2bfa6159f8124-json.log",
"Name": "/tomcat80",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "bridge",
"PortBindings": {
"8080/tcp": [
{
"HostIp": "",
"HostPort": "8080"
}
]
},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
36,
149
],
"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",
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": [],
"BlkioDeviceWriteBps": [],
"BlkioDeviceReadIOps": [],
"BlkioDeviceWriteIOps": [],
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": null,
"OomKillDisable": false,
"PidsLimit": null,
"Ulimits": [],
"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",
"/sys/devices/virtual/powercap"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/acee9045d8fc92626d7a090e605e1f2fc14ca96581578d3f348df8f15f39fe8c-init/diff:/var/lib/docker/overlay2/d22b82e4e254af411bcd5ca18ed245408326f2b8f0bb4ef5255e5b94a92b887a/diff:/var/lib/docker/overlay2/d4709eaa6146103af13c4267ab5566d5ba70d773b4dddd6dcec5e4f2ff8246a0/diff:/var/lib/docker/overlay2/859d2917cb6877004f5491ac7e5cd17e0b1349ed22c758e0035206a3654ba3e3/diff:/var/lib/docker/overlay2/da525f52209ae8b77906df68d35b38469ac73a6e2161cbaf872c109f1304288b/diff:/var/lib/docker/overlay2/27155cf114ddbcd5e0beaba705a7730f87bceed59b9a4a2d4f95c874ab14add6/diff:/var/lib/docker/overlay2/82813ccbd75f81ae57b7b799d654cd9de8c5a44f59ed9d07f11911ff101ea169/diff:/var/lib/docker/overlay2/f596cee1597b56fc92aa72578bb83fb3d63daa812e937e5d481f65a46738b892/diff:/var/lib/docker/overlay2/da818fcb23ac32eb572b9fae313b695781dd16ddd390c2b10d636f0994511346/diff:/var/lib/docker/overlay2/0989664ad566807c6b2eee2d3362f1253cdc3da302b0679906751c4faf02ae60/diff",
"MergedDir": "/var/lib/docker/overlay2/acee9045d8fc92626d7a090e605e1f2fc14ca96581578d3f348df8f15f39fe8c/merged",
"UpperDir": "/var/lib/docker/overlay2/acee9045d8fc92626d7a090e605e1f2fc14ca96581578d3f348df8f15f39fe8c/diff",
"WorkDir": "/var/lib/docker/overlay2/acee9045d8fc92626d7a090e605e1f2fc14ca96581578d3f348df8f15f39fe8c/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "b859f41f9816",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/opt/java/openjdk",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk-21.0.4+7",
"CATALINA_HOME=/usr/local/tomcat",
"TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib",
"LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib",
"GPG_KEYS=48F8E69F6390C9F25CFEDCD268248959359E722B A9C5DF4D22E99998D9875A5110C01C5A2F6059E7",
"TOMCAT_MAJOR=11",
"TOMCAT_VERSION=11.0.0",
"TOMCAT_SHA512=f23c533f257725cd673eb39423459799b6647e6fa9dc14a0b252cb7186935870a36a657741f72578935a4b52330e128e15372fb6bb678a7fd26ae942710a1f1e"
],
"Cmd": [
"catalina.sh",
"run"
],
"Image": "tomcat",
"Volumes": null,
"WorkingDir": "/usr/local/tomcat",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.version": "24.04"
}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "1c6e2d49c534dd17b6f1049d9a0d5efdb97d28a5cb4067d95f381f32a006fe4a",
"SandboxKey": "/var/run/docker/netns/1c6e2d49c534",
"Ports": {
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
},
{
"HostIp": "::",
"HostPort": "8080"
}
]
},
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "f84725b558b6bbd0d4b6a6d77529de98f1f19f05f10c323411600096839d1db9",
"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,
"MacAddress": "02:42:ac:11:00:02",
"NetworkID": "969c3bf150e4d91211fe63046b8913703d077cee8b2167c384eb43d9e4f61a7d",
"EndpointID": "f84725b558b6bbd0d4b6a6d77529de98f1f19f05f10c323411600096839d1db9",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DriverOpts": null,
"DNSNames": null
}
}
}
}
]
11. docker exec命令
格式:docker exec -it 容器ID bashShell
进入正在运行的容器并以命令行交互
[root@hadoop104 ~]# docker exec -it b859f41f9816 /bin/bash
root@b859f41f9816:/usr/local/tomcat# java -version
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
12. docker attach命令
格式:docker attach 容器ID
进入正在运行的容器并以命令行交互
[root@hadoop104 ~]# docker run -it ubuntu /bin/bash
root@7ff71fb0ec7e:/# [root@hadoop104 ~]#
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ff71fb0ec7e ubuntu "/bin/bash" 9 seconds ago Up 8 seconds infallible_herschel
[root@hadoop104 ~]# docker attach 7ff71fb0ec7e
root@7ff71fb0ec7e:/# date
Sun Oct 20 10:08:31 UTC 2024
root@7ff71fb0ec7e:/# exit
exit
[root@hadoop104 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
attach和exec命令的区别
- exec命令:是在容器中打开新的终端,并且可以启动新的进程。
- attach命令:直接进入容器启动命令的终端,不会启动新的进程。
推荐使用exec命令,因为退出终端不会导致容器的停止。
13. docker cp命令
格式:docker cp 容器ID:容器内路径 目的主机路径
将容器内拷贝文件到主机上
# 拷贝日志用来分析
[root@hadoop104 ~]# docker cp a2e728a2f60e:/usr/local/tomcat/logs /tmp/tomcat_logs/
Successfully copied 10.2kB to /tmp/tomcat_logs/
14. docker导入导出命令
格式:docker export 容器ID > 文件名.tar
导出容器的内容流作为一个tar归档文件
格式:cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号
将镜像tar包导入为镜像中
[root@hadoop104 ~]# docker export a2e728a2f60e > abcd.tar
[root@hadoop104 ~]# ll
总用量 460584
-rw-r--r--. 1 root root 471633920 10月 20 18:40 abcd.tar
[root@hadoop104 ~]# cat abcd.tar | docker import - jack/bak_tomcat:10
sha256:21bcb0153c1053c00770d2a84a259c23a55d78dfc104044024b9e3b6d947d340
[root@hadoop104 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jack/bak_tomcat 10 21bcb0153c10 11 seconds ago 466MB
ubuntu latest 59ab366372d5 9 days ago 78.1MB
tomcat latest 0bcf1082c8a0 10 days ago 465MB
redis latest f02a7f566928 2 weeks ago 117MB
nginx latest 3b25b682ea82 2 weeks ago 192MB
redmine latest 4c3c82c1166d 4 months ago 633MB
mysql 5.7 5107333e08a8 10 months ago 501MB
hello-world latest d2c94e258dcb 17 months ago 13.3kB