这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战
0, 前言
本编主要还是介绍Docker常用的命令,在实际工作中必须会使用的
1, 后端启动容器
# 命令 docker run -d 镜像名
[root@VM-0-7-centos /]# docker run -d centos
# 问题docker ps 发现 centos停止了
# 常见的坑, docker容器使用后台运行,就必须要有一个前台进程, docker发现没有应用,就会自动停止
# 比如:nginx容器启动后,发现自己没有提供服务, 就会立刻停止,就没有程序了
2, 查看日志
#命令 docker logs
[root@VM-0-7-centos /]# docker logs -f -t --tail 100 容器ID
# 显示日志
-tf
--taill number 要显示的日志条数
# 不加tail就是显示所有的日志
docker logs -ft 容器ID
# 显示指定的日志条数
docker logs -ft --tail 10 容器ID
3, 查看容器中进程信息
#命令:docker top 容器DI
[root@VM-0-7-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08213b58ef16 centos "/bin/bash" 26 hours ago Up 26 hours silly_vaughan
[root@VM-0-7-centos /]# docker top 08213b58ef16
UID PID PPID C STIME TTY TIME CMD
root 25254 25236 0 Nov13 pts/0 00:00:00 /bin/bash
[root@VM-0-7-centos /]#
4, 镜像源数据
#命令 docker inspect 容器ID
[root@VM-0-7-centos /]# docker inspect 08213b58ef16
[
{
"Id": "08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1",
"Created": "2021-11-13T10:53:30.720127052Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 25254,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-11-13T10:53:30.988378856Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/hostname",
"HostsPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/hosts",
"LogPath": "/var/lib/docker/containers/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1/08213b58ef16c250a8adbd99167c40e2c1e849e1310d600962c45b5719f3a8d1-json.log",
"Name": "/silly_vaughan",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383-init/diff:/var/lib/docker/overlay2/feb62e3993a48053ea8874247d96656f3938d4f8327ad2459e2615d085bd6dde/diff",
"MergedDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/merged",
"UpperDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/diff",
"WorkDir": "/var/lib/docker/overlay2/9a3f89f756239af691c4f97675b3fd54abc1af82da4179f1ee9421b75906e383/work"
},
"Name": "overlay2"
},
"Mounts": [],
"Config": {
"Hostname": "08213b58ef16",
"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": "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": "249404d41f6c80cc3acba6026d84c6eb416ecc0e814ca8d68a4ec6db0f0e6743",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {},
"SandboxKey": "/var/run/docker/netns/249404d41f6c",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "77115fb3fbe23edea3603626829b5b48cf02d73dcc20840f1222c0ea1c8b3e34",
"Gateway": "172.18.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:12:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "88b3a5d4df597d2b8fcf9064a672be74d3daf06cf5c1d2e0f0e4e5850ad408e9",
"EndpointID": "77115fb3fbe23edea3603626829b5b48cf02d73dcc20840f1222c0ea1c8b3e34",
"Gateway": "172.18.0.1",
"IPAddress": "172.18.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": null
}
}
}
}
]
5, 进入当前正在运行的容器
#通常容器都是使用后台方式运行的,如果我们需要进入容器,修改一些配置
#命令 1
docker exec -it 容器ID /bin/bash
# 命令2
docker attach 容器ID
#命令1和命令2的区别
#docker exec #进入容器后开启一个新的终端,可以在里面操作
#docker attach #进入容器正在执行的终端,不会启动新的进程
6, 从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的的主机路径
# 举例:从容器内把文件copy出来
# 1 进入容器内部
[root@VM-0-7-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08213b58ef16 centos "/bin/bash" 26 hours ago Up 26 hours silly_vaughan
[root@VM-0-7-centos ~]# docker attach 08213b58ef16
[root@08213b58ef16 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@08213b58ef16 /]# cd home/
[root@08213b58ef16 home]# ls
# 在容器内部创建一个文件
[root@08213b58ef16 home]# touch index.html
[root@08213b58ef16 home]# exit
exit
[root@VM-0-7-centos ~]# ls
app soft work
[root@VM-0-7-centos ~]# pwd
/root
# 将文件拷贝出来到主机上
[root@VM-0-7-centos ~]# docker cp 08213b58ef16:/home/index.html /root
[root@VM-0-7-centos ~]# ls
app index.html soft work
[root@VM-0-7-centos ~]#
## 注意:拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现双向同步
7, 命令小结
attach # 当前shell下, attach连接指定运行的镜像
build # 通过Dockerfile定制镜像
commit # 提交当前容器为新的镜像
cp # 从容器中拷贝指定文件或者目录到宿主机中
create # 创建一个新的容器, 同run, 但是不启动容器
diff # 查看docker容器变化
events # 从docker 服务获取容器实时事件
exec # 在已存在的容器上运行命令
export # 导出容器的内容流作为一个tar归档文件
history # 展示一个镜像形成历史
images # 列出系统当前镜像
import # 从tar包中的容器创建一个新的文件系统映像
info # 显示系统系统相关信息
inspect # 查看容器详细信息
kill # kill掉指定docker容器
load # 从一个tar包中加载一个镜像
login # 注册或者登陆一个docker源服务器
logout # 从当前docker registry 退出
logs # 查看当前容器日志信息
port # 查看映射端口对应的容器内部源端口
pause # 暂停容器
ps # 列出容器列表
pull # 从docker镜像源服务器拉取指定镜像
push # 推送指定镜像或者库镜像至docker源服务器
restart # 重启运行的容器
rm # 移除一个或者多个容器
rmi # 移除一个或多个镜像
run # 创建一个新的容器并运行
save # 保存一个镜像为一个tar包
search # 在docker hub中搜索镜像
start # 启动容器
stop # 停止容器
tag # 给源中镜像打标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
version # 查看docker版本号
wait # 截取容器停止时的退出状态值