三、Docker 命令
1、帮助命令
docker version #显示docker版本信息
docker info #显示doker的系统信息,包括镜像和容器命令
docker 命令 --hlep #帮助命令
2、帮助文档
Reference documentation | Docker Docs
3、镜像命令
①docker images #查看所有镜像
#docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 9c7a54a9a43c 4 months ago 13.3kB
#解释
REPOSIRORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像id
CREATED 镜像创建的时间
SIZE 镜像大小
#可选项
-a, --all Show all images (default hides intermediate images) #显示全部镜像源
-q, --quiet Only show image IDs #只显示id
②docker search 搜索镜像
#docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14424 [OK]
mariadb MariaDB Server is a high performing open sou… 5507 [OK]
percona Percona Server is a fork of the MySQL relati… 619 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 856 [OK]
bitnami/mysql Bitnami MySQL Docker Image 96 [OK]
#可选项
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
--no-trunc Don't truncate output
--filter=STARS=3000 #搜索镜像源收藏值大于3000
#docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 14424 [OK]
mariadb MariaDB Server is a high performing open sou… 5507 [OK]
③docker pull 下载镜像
#下载镜像 docker pull 镜像名[:tag]
#docker pull mysql
Using default tag: latest #如果不写tag,默认就是最新版本
72a69066d2fe: Pull complete #分层下载:docker image的核心 联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
#指定版本下载
# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
④docker rmi 删除镜像
# docker rmi -f c20987f18b13 删除单个镜像
Untagged: mysql:5.7
Untagged: mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
# docker rmi -f $(docker images -aq) #删除全部镜像命令
Untagged: hello-world:latest
Untagged: hello-world@sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
Deleted: sha256:9c7a54a9a43cca047013b82af109fe963fde787f63f9e016fdc3384500c2823d
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
4、容器命令
说明:有了镜像才可以创建容器,linux,下载一个centos系统镜像测试学习
docker pull centos
① 新建容器并创建启动
docker run [可选参数] image
#参数说明
--name="Name" #容器名字 区分容器
-d 后台运行
-it 交互方式运行,进入容器查看内容
-p 指定容器端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-p 容器端口
容器端口
-P 随机指定端口
#测试,启动并进入容器
# docker run -it centos /bin/bash
[root@1c808aef7e20 /]# ls 查看容器内的centos,基础版本,很多命令是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#从容器退出到主机
#exit
exit
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
②列出所有运行的容器
[root@localhost /]# docker ps 列出正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]# docker ps -a 列出曾经运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c808aef7e20 centos "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago interesting_heyrovsky
95cd6a6b503f 9c7a54a9a43c "/hello" 2 hours ago Exited (0) 2 hours ago zen_benz
-n= #显示最近创建的容器
-q #只显示容器的编号
③退出容器
exit #直接退出并停止
Ctrl + p + q
[root@localhost /]# docker run -it centos /bin/bash
[root@5979a18fe589 /]# [root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5979a18fe589 centos "/bin/bash" 35 seconds ago Up 34 seconds angry_hermann
④删除容器
docker rm 容器id #删除指定容器 ,不能直接删除正在运行的容器,可以通过删除全部容器去删除
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 #杀死
⑥常用的其他命令
后台启动命令
[root@localhost /]# docker run -d centos
f8827323c421352cf56ae70fe86e2d2511ba362605217680eff4f2b483aab163
#问题docker ps 发现centos停止了
#常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#nginx,容器启动后,会发现,自己没有提供服务就停止了
查看日志
docker logs -f -t --tail 容器
#显示日志
-tf 显示日志
--tail numble #要显示日志条数
#自己编写shell脚本 看日志
[root@localhost /]# docker run -d centos /bin/sh -c "while true;do echo yang;sleep 1;done"
[root@localhost /]# docker logs -f -t --tail 10 93687b37047c
2023-09-05T13:13:34.918066639Z yang
2023-09-05T13:13:35.920491612Z yang
2023-09-05T13:13:36.922566943Z yang
2023-09-05T13:13:37.924663167Z yang
2023-09-05T13:13:38.927232711Z yang
2023-09-05T13:13:39.929725832Z yang
2023-09-05T13:13:40.932565669Z yang
2023-09-05T13:13:41.935026144Z yang
2023-09-05T13:13:42.938028101Z yang
2023-09-05T13:13:43.941016022Z yang
2023-09-05T13:13:44.943148741Z yang
2023-09-05T13:13:45.945288231Z yang
2023-09-05T13:13:46.947436210Z yang
···
查看docker进程信息
#命令 docker top 容器id
[root@localhost /]# docker top 93687b37047c
UID PID PPID C STIME TTY TIME CMD
root 79029 79011 0 21:12 ? 00:00:00 /bin/sh -c while true;do echo yang;sleep 1;done
root 79436 79029 0 21:17 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
#docker inspect 容器id
[root@localhost /]# docker inspect 93687b37047c
[
{
"Id": "93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57",
"Created": "2023-09-05T13:12:43.147813942Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo yang;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 79029,
"ExitCode": 0,
"Error": "",
"StartedAt": "2023-09-05T13:12:43.704139563Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57/hostname",
"HostsPath": "/var/lib/docker/containers/93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57/hosts",
"LogPath": "/var/lib/docker/containers/93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57/93687b37047cd33eeeab9b15acc6fee104e1ef0b8f90a33b4a1b1719acfdca57-json.log",
"Name": "/unruffled_bhaskara",
"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,
"ConsoleSize": [
24,
116
],
"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": 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/cf7c18307adef077b63b65e9b6cc30987032d69a5bc3fdf7281bc21552f6eb50-init/diff:/var/lib/docker/overlay2/090106f456caf6b4ea482fba7861e704cb805034bde5eae7477fcc397f30279d/diff",
"MergedDir": "/var/lib/docker/overlay2/cf7c18307adef077b63b65e9b6cc30987032d69a5bc3fdf7281bc21552f6eb50/merged",
"UpperDir": "/var/lib/docker/overlay2/cf7c18307adef077b63b65e9b6cc30987032d69a5bc3fdf7281bc21552f6eb50/diff",
"WorkDir": "/var/lib/docker/overlay2/cf7c18307adef077b63b65e9b6cc30987032d69a5bc3fdf7281bc21552f6eb50/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "93687b37047c",
"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 yang;sleep 1;done"
],
"Image": "centos",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20210915",
"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": "cd9c443ef9a3b26cd75a8cefbdc6df30e5486a0d8e30e75f05fbc14213af07df",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/cd9c443ef9a3",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "380717333bc5e2e4bf1592858633a66399253e91539e10d1477af1514c54b9c2",
"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": "b9a2d9428291d292b0a99b72f2e1015d5d8ce9164bf2d4f8feb2f88a5111e043",
"EndpointID": "380717333bc5e2e4bf1592858633a66399253e91539e10d1477af1514c54b9c2",
"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@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93687b37047c centos "/bin/sh -c 'while t…" 11 minutes ago Up 11 minutes unruffled_bhaskara
[root@localhost /]# docker exec -it 93687b37047c /bin/bash
[root@93687b37047c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@93687b37047c /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:12 ? 00:00:00 /bin/sh -c while true;do echo yang;sleep 1;done
root 748 0 0 13:25 pts/0 00:00:00 /bin/bash
root 783 1 0 13:25 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 784 748 0 13:25 pts/0 00:00:00 ps -ef
#方式二
docker attach 容器id
[root@localhost /]# docker attach 93687b37047c
#正在执行的代码
yang
yang
yang
yang
yang
# docker exec #进入容器后开启一个新的终端,可以在里面操作
# docker attact #进入容器正在执行的终端,不会启动新的进程
从容器拷贝到主机中
docker cp 容器id:容器内路径 目的的主机路径
[root@localhost home]# docker cp bbe97f897449:/home/test.java /home/
Successfully copied 1.54kB to /home/
[root@localhost home]# ll
总用量 4
-rw-r--r--. 1 root root 0 9月 5 21:35 test.java
drwx------. 15 yanghang yanghang 4096 9月 5 21:28 yanghang
-rw-r--r--. 1 root root 0 9月 5 21:34 yang.java
#拷贝是一个手动过程,未来我们可以使用 -v卷使用