Docker 容器管理必修课:创建、进入、日志、停止与删除
理解镜像与容器的关系用一句话概括镜像是类容器是对象。 镜像是只读的模板容器是镜像运行起来的实例。特性镜像Image容器Container本质只读的静态文件可读写的运行实例类比饼干模具压出来的饼干能否修改不能直接修改可以修改在容器层生命周期永久存在除非手动删除临时存在停止后保留删除后消失创建方式docker build或docker pulldocker run重要同一个镜像可以生成无数个容器每个容器之间相互隔离。你修改了一个容器的内容不会影响镜像也不会影响其他容器。docker run详解docker run 是 Docker 最重要的命令没有之一。它负责创建并启动一个容器。docker run [参数] 镜像名[:标签] [要执行的命令]示例docker run -d --name mynginx -p 8080:80 nginx参数详解参数全称作用示例-d--detach后台运行守护进程模式-d--name--name给容器起一个名字--name mynginx-p--publish端口映射宿主机端口容器端口-p 8080:80-v--volume目录挂载宿主机目录容器目录-v /app/data:/data-it--interactive --tty交互式终端进入容器内部用-it--restart--restart重启策略always、on-failure--restart always-e--env设置环境变量-e MY_VARvalue命令详解docker run调用 Docker 创建并启动容器-d后台运行不加的话终端会被日志刷屏--name mynginx给容器起名叫 mynginx-p 8080:80把宿主机的 8080 端口映射到容器的 80 端口nginx使用 nginx:latest 镜像不指定标签默认 latest注意左边宿主机端口不能与其他正在运行的容器冲突右边容器端口必须与容器内应用监听的端口一致。例如 Nginx 默认监听 80MySQL 默认监听 3306。查看容器状态查看运行中的容器的命令docker ps运行结果详解字段含义CONTAINER ID容器ID前1位IMAGE使用的镜像名称COMMAND容器启动时执行的命令CREATED创建时间STATUS运行状态Up / Exited / RestartingPORTS端口映射关系NAMES容器名称你指定的--name查看所有容器包括已停止的命令docker ps -a运行结果常用过滤示例# 只显示已停止的容器 docker ps -a --filter statusexited # 只显示特定名称的容器 docker ps -a --filter namemynginx详解-a:显示所有容器包括已停止的-q只显示容器ID批量操作时有用--filter按条件过滤运行结果进入容器内部与修改文件进入正在运行的容器命令docker exec -it 容器名 /bin/bash命令解析docker exec在正在运行的容器中执行命令-it-i保持输入打开让你能敲命令-t分配一个虚拟终端让你能看到命令行界面合起来就是给我一个可交互的终端容器名你要进入的容器可以是名称或 ID/bin/bash执行的命令打开 Bash Shell如果容器是精简版如 Alpine Linux可能没有 /bin/bash改用 /bin/sh。日志查看与实时监控查看容器日志命令docker logs 容器名示例# 实时查看日志最常用 docker logs -f mynginx # 查看最后 50 行 docker logs --tail 50 mynginx # 查看最近 30 分钟的日志 docker logs --since 30m mynginx退出docker logs -f按Ctrl C详解-f实时跟踪--tail N显示最后N行--since 10m显示最近10分钟的日志-t显示时间戳查看资源占用命令docker stats 容器名运行结果详解CPU%CPU使用率MEM USAGE/LIMIT内存使用量/总限额NET I/O网络收发数据量BLOCK I/O磁盘读写数据量PIDS容器内的进程数不加参数查看所有容器命令docker stats按Ctrl C退出stats监控界面。停止、启动、重启与删除停止容器命令docker stop 容器名特点发送 SIGTERM 信号让容器优雅地关机容器内的进程有机会做清理工作如保存数据、关闭连接等待 10 秒默认后如果还没停止会强制杀死。停止所有运行中的容器命令docker stop $(docker ps -q)启动已停止的容器命令docker start 容器名注意docker start 启动的是已存在但已停止的容器而不是创建新容器。容器内的修改如你改的 index.html会保留。重启容器命令docker restart 容器名删除容器命令docker rm 容器名注意只能删除已停止的容器如果容器正在运行需要先docker stop再docker rm强制删除即使正在运行命令docker rm -f 容器名批量删除命令# 删除所有已停止的容器 docker rm $(docker ps -aq) # 删除所有容器包括运行中的强制 docker rm -f $(docker ps -aq)优雅停止与强制删除的对比操作命令效果适用场景优雅停止docker stop发送终止信号等待进程自行退出生产环境保护数据强制杀死docker kill直接发送SIGKILL立即终止容器卡死无法响应删除已停止docker rm移除容器的文件系统清理空间强制删除docker rm -f先杀死再删除紧急清理总结命令速查表操作命令说明创建并启动容器docker run -d --name 名 -p 端口:端口 镜像最常用的启动方式查看运行中的容器docker ps只显示正在运行的查看所有容器docker ps -a包括已停止的进入容器内部docker exec -it 容器名 /bin/bash打开交互式终端执行单条命令docker exec 容器名 命令不进容器执行命令查看日志docker logs -f 容器名-f 实时跟踪查看资源占用docker stats 容器名按 CtrlC 退出停止容器docker stop 容器名优雅停止启动已停止的容器docker start 容器名保留修改重启容器docker restart 容器名停止启动删除已停止的容器docker rm 容器名需先停止强制删除容器docker rm -f 容器名运行中也能删练习任务# 1. 拉取 Nginx 镜像 docker pull nginx:1.26.0 # 2. 后台运行容器映射端口 8888:80命名为 myweb docker run -d --name myweb -p 8888:80 nginx:1.26.0 # 3. 查看运行中的容器 docker ps # 4. 进入容器修改首页 docker exec -it myweb /bin/bash echo h1Hello Docker Learner!/h1 /usr/share/nginx/html/index.html exit # 5. 验证修改 curl http://localhost:8888 # 6. 查看日志最后 10 行 docker logs --tail 10 myweb # 7. 查看资源占用 docker stats myweb # 8. 停止容器 docker stop myweb # 9. 查看所有容器确认状态变为 Exited docker ps -a # 10. 重新启动 docker start myweb # 11. 再次验证修改依然存在 curl http://localhost:8888 # 12. 删除容器 docker stop myweb docker rm myweb # 13. 确认已删除 docker ps -a | grep myweb下期预告 《实战修改 Nginx 默认页并发布自己的 Docker 镜像到 Hub》我们将解决一个关键问题容器删了数据怎么办敬请期待