帮助命令
命令
docker version # 查看docker版本
docker info # 查看docker系统信息,包括镜像和容器的数量
docker -h # 查看帮助命令 --- = docker --help
文档
镜像命令
docker iamges 查看所有本地主机上的镜像
root@lsMusKVEqm:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库员
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
root@lsMusKVEqm:~# docker images -h
Options:
-a, --all # 列出所有镜像
--digests Show digests
-f, --filter filter # 过滤条件
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet # 只显示id
docker search 搜索镜像
root@lsMusKVEqm:~# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11876 [OK]
mariadb MariaDB Server is a high performing open sou… 4540 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 888 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 407 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
# 可选项
root@lsMusKVEqm:~# docker search -h
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
--filter=STARS=3000 # 搜索出来的镜像STARS大于3000
root@lsMusKVEqm:~# docker search mysql -f=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11876 [OK]
mariadb MariaDB Server is a high performing open sou… 4540 [OK]
docker pull 下载镜像
# 下载镜像:docker pull 镜像名[:tag]
root@lsMusKVEqm:~# docker pull mysql
Using default tag: latest # 如果不写tag,默认就是latest
latest: Pulling from library/mysql
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
root@lsMusKVEqm:~# 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 删除镜像
root@lsMusKVEqm:~# docker rmi -f 3218b38490ce # 删除制定容器, 后面跟镜像id,多个id用空格分割
Untagged: mysql:8
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
# 删除所有镜像
docker rmi -f $(docker images -aq)
容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个Ubuntu镜像来测试学习
docker pull ubuntu
docker run 新建容器并启动
docker run [可选参数] image
# 参数说明
-- name="Name" # 容器名字 tomcat01 tomcat02
-d # 后台方式运行。
-i -t # 使用交互方式运行,进入容器查看内容
-p # 制定容器的端口 -p 8080:8080
# -p ip:主机端口:容器端口
# -p 主机端口:容器端口 (常用)
# -p 容器端口
# 容器端口
-P # 随机制定端口
# 测试 启动并进入容器
root@lsMusKVEqm:~# docker run -it ubuntu /bin/bash
root@4ea627b7c255:/#
root@4ea627b7c255:/# ls # 查看容器内的ubuntu,基础版本,很多命令不完善
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 退出容器
root@4ea627b7c255:/home# exit
exit
root@lsMusKVEqm:~#
docker ps 正在运行的容器
root@lsMusKVEqm:~# docker ps # 正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@lsMusKVEqm:~# # 没有正在运行的容器
oot@lsMusKVEqm:~# docker ps -a # 曾经运行过的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ea627b7c255 ubuntu "/bin/bash" 5 minutes ago Exited (0) 3 minutes ago cranky_bartik
ee63101e476f hello-world "/hello" 8 hours ago Exited (0) 8 hours ago priceless_maxwell
29d6816aaa47 hello-world "/hello" 8 hours ago Exited (0) 8 hours ago elastic_goldwasser
# 可选参数
# 空参数,列出当前正在运行的容器
-a # 列出当前正在运行的容器 + 历史运行过的容器
-n=? # 显示最近创建的容器 docker ps -a -n=1
-q # 只显示容器id
退出容器
exit # 退出容器并停止
Ctrl + P + Q # 不停止容器退出
删除容器
docker rm 4b2b57590da3 # 删除制定容器,容器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 # 杀掉容器
常用其他命令
后台启动容器
# 命令 docker run -d 镜像名
docker run -d ubuntu
# 问题 docker ps 查看发现 ubuntu已经停止了
# 常见问题:
# docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx容器启动后,发现自己没有提供服务,就会立即停止
docker logs 查看日志
docker logs --help
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:37Z) or relative (e.g. 42m for 42 minutes)
-n, --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:37Z) or relative (e.g. 42m for 42 minutes)
docker logs -tf -n=10 255f4b63ef23
查看容器中的进程信息
# 命令:docker top 容器id
root@lsMusKVEqm:~# docker top 255f4b63ef23
UID PID PPID C STIME TTY TIME CMD
root 1191157 1191134 0 09:34 pts/0 00:00:00 /bin/bash
查看镜像元数据
# 命令:docker inspect
root@lsMusKVEqm:~# docker inspect --help
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
# 例子 -- 显示容器的所有信息
root@lsMusKVEqm:~# docker inspect 255f4b63ef23
[
{
"Id": "255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82",
"Created": "2021-12-27T16:09:27.949725379Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1191157,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-12-28T01:34:11.120985515Z",
"FinishedAt": "2021-12-27T16:10:15.107839115Z"
},
"Image": "sha256:ba6acccedd2923aee4c2acc6a23780b14ed4b8a5fa4e14e252a23b846df9b6c1",
"ResolvConfPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/hostname",
"HostsPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/hosts",
"LogPath": "/var/lib/docker/containers/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82/255f4b63ef2309b17603834222706cdf419f7f27db88f528a76137eb4d10ce82-json.log",
"Name": "/funny_tharp",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"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,
"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": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e-init/diff:/var/lib/docker/overlay2/b665f84ac478003a910181e73bfd8e0bed2891c671c4ea7a86e3718487044f47/diff",
"MergedDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/merged",
"UpperDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/diff",
"WorkDir": "/var/lib/docker/overlay2/91f43371b4ef12d59fa1726f9b050259c5a28d8ad53d69c2562e7a90d353de6e/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "255f4b63ef23",
"Domainname": "",
"User": "",
"AttachStdin": true,
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"OpenStdin": true,
"StdinOnce": true,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "ubuntu",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "e2a30cb0edf85f0dc419787bafcd52b9e142543b99cfb67503da5eceeb206a03",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/e2a30cb0edf8",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "8708f90f5190e907860f4e5f539a36c45f1aaeabd1b0bd9ff4008295ff995173",
"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": "8ec57ea61f637a998ded26822378b01b9573a01dae6b3ecfcf022d159cd00f4c",
"EndpointID": "8708f90f5190e907860f4e5f539a36c45f1aaeabd1b0bd9ff4008295ff995173",
"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
}
}
}
}
]
进入当前正在运行的容器
- exec
# 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
# 命令: docker exec -it 容器id /bin/bash
root@lsMusKVEqm:~# docker exec -it 255f4b63ef23 /bin/bash
root@255f4b63ef23:/# ll
- attach
# 命令:docker attach 容器id
root@lsMusKVEqm:~# docker attach 255f4b63ef23
root@255f4b63ef23:/#
# 正在执行的容器
- 区别
# docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
# docker attach 进入容器正在进行的终端,不会开启新的
从容器拷贝文件到主机上
# 命令:docker cp 容器id:容器内路径 目标主机路径
# 进入docker容器
root@lsMusKVEqm:~# docker attach 255f4b63ef23
root@255f4b63ef23:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@255f4b63ef23:/# cd home/
root@255f4b63ef23:/home# ls
# 在容器内/home目录下创建文件
root@255f4b63ef23:/home# touch test.java
root@255f4b63ef23:/home# ls
test.java
# 退出容器 可以不停止
root@255f4b63ef23:/home# exit
exit
root@lsMusKVEqm:~#
root@lsMusKVEqm:~#
root@lsMusKVEqm:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9f08a73c819f ubuntu "bash" 6 hours ago Exited (0) 6 hours ago romantic_kowalevski
255f4b63ef23 ubuntu "/bin/bash" 15 hours ago Exited (0) 9 seconds ago funny_tharp
# 拷贝文件到主机/home目录下
root@lsMusKVEqm:~# docker cp 255f4b63ef23:/home/test.java /home
root@lsMusKVEqm:~# cd /home/
# 查看主机home目录
root@lsMusKVEqm:/home# ls
jenkins test.java
root@lsMusKVEqm:/home#