Docker命令行与DockerCompose实用技巧

容器停了,数据挂在卷上,镜像可能被删了,服务下线。日志还在,能追溯到停机前的每条输出。

Docker命令行与DockerCompose实用技巧

按这个顺序看,容器的生命周期实则就是一系列明确的命令在一步步推进。别把它想得太玄乎,运行、暂停、停止、删掉,每一步都有对应的指令,像流水线上的几个按钮,按对了机器就正常;按错了就得查日志、看状态、再调整。

先说停掉容器这档事。想优雅关机,就给进程时间收尾,用 docker stop,这个命令先发信号让程序自己收尾,超时后才强制结束。要是要立刻干掉,直接用 docker kill,没商量,立马结束。要临时中断但不想删进程,可以用 docker pause,把进程挂起,等着再用 docker unpause 继续。需要把容器关了再开回原来的样子,就 docker restart。容器真的不需要了才用 docker rm 去清理,但要记住,只有停掉的容器才能被删。想一口气跑完就自动清理,可以 docker run 时加上 –rm,程序一退出就顺手把容器删了,适合短期任务。

Docker命令行与DockerCompose实用技巧

倒回去说容器怎么创建和运行。一般敲 docker run,这个命令像个瑞士军刀,选项许多也很实用。想后台跑就加 -d;给容器起个好记的名字用 –name;对外暴露端口用 -p 主机端口:容器端口;把主机目录或卷挂进去用 -v;需要环境变量就 -e,或者用 –env-file 从文件读;想交互式进容器干活就 -it;有时候要指定运行的用户就用 -u。还有些重大的选项,像 –restart 设置重启策略,–network 指定网络模式,–rm 让容器退出就自动删。把这些选项搭配好,能把运行时的隔离、网络、数据都安排妥当。

容器运行时有几种常见状态,懂这些有助于排错。刚创建但没启动的是 Created,说明镜像拉下来了但没有执行启动命令;开始跑起来就是 Running;进程被挂起的是 Paused,资源还占着但不工作;正常停下来是 Stopped;彻底不在了就是 Deleted。碰到 Created 常见缘由是忘记指定 CMD 或 ENTRYPOINT,或者启动时命令拼错。处于 Paused 则可能是人为暂停,或者信号误发。

要看哪些容器在跑,用 docker ps;想把已经停止的也看见,docker ps -a。排查问题时,日志是第一手资料,docker logs 可以把容器输出拉出来,跟着看用 -f,就像 tail -f 那样。想了解容器里到底跑了哪些进程可以用 docker top;看实时资源占用用 docker stats。需要查看容器的详细配置、环境变量、挂载、网络信息,docker inspect 会给出一大堆 JSON,虽然信息多但很有用。还有个命令 docker events,可以看实时事件流,哪天容器被谁什么时候停掉都能追溯。

网络这块不小心就让人懵。普通场景多用 bridge 模式,容器通过 Docker 的桥接网络跟主机及其它容器通信,外部要访问得做端口映射。要性能或直接用主机网络时,可以用 host 模式,容器直接用主机的网卡。想让容器在物理网络里像独立主机那样出现,可以用 macvlan,它能给容器分配自己的 MAC 地址。跨主机通信常见 overlay,用于集群场景。还有 none,彻底禁网,这个比较极端,适合最严格的隔离场景。按需要选,别盲目套用默认。

数据持久化是实践里最容易踩坑的地方。数据不会随着容器消失,除非你用了 tmpfs 或者没有挂持久化卷。常见三种方式:Docker 管理的 Volume,和容器生命周期分离,适合备份和迁移;Bind Mount 把主机目录直接挂进容器,开发时最方便,但可移植性差;tmpfs 把数据放内存里,速度快但一停就没了。选择哪种,按数据重大性和性能需求决定,不要只图方便。

镜像管理是每天要碰的活儿。把远程仓库里的镜像拉到本地用 docker pull,本地镜像列表用 docker images。要删本地镜像就 docker rmi。基于 Dockerfile 自行构建镜像用 docker build,打标签用 docker tag,推到远端仓库是 docker push。镜像可以保存成文件用 docker save,恢复用 docker load。想看镜像的历史层信息可以 docker history,找镜像时还有 docker search。处理镜像时,注意不要随意删掉被容器依赖的镜像,可能会引起启动失败。

说到构建,Dockerfile 就像把做饭步骤写成菜谱。常见指令有 FROM、COPY、RUN、CMD、ENTRYPOINT、EXPOSE、ENV 等,把基础镜像、要拷贝的文件、构建时要执行的命令、容器启动默认行为、暴露端口、环境变量都写清楚。docker build 支持一些参数,能指定构建上下文和标签,写好 Dockerfile,构建就能自动化重复。

多容器场景下,Docker Compose 很方便。把服务、网络、卷、环境、依赖写到同一个 YAML 文件,一条命令就能把整个应用拉起来。常用 docker-compose up(后台跑加 -d),退场时用 docker-compose down(带 -v 可把卷删掉)。看日志用 docker-compose logs,进入运行中的服务执行命令用 docker-compose exec。像 WordPress + MySQL 这种组合,Compose 文件一般列出两个服务、一个持久化卷、环境变量和端口映射,准备好镜像和配置后 docker-compose up 就能把整个堆栈启动。

平时敲得最多的命令,还是那些和容器生命周期、日志、镜像构建相关的。像 docker run、docker ps、docker stop、docker rm、docker logs 这些天天会用;镜像相关的 docker build、docker images、docker pull 也常常碰。网络和卷的管理命令用得相对少些,Compose 在多服务环境下出现频率很高。日常操作里,按场景组合这些命令就能把容器从无到有、从运行到停止,再从停止到删除,控制得清清楚楚。

这些步骤可以按顺序来理解,也可以根据实际问题拆开查,每一步背后都有对应的命令和选项,按需配置就行。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...