Docker 容器的生命周期有好几个状态,这里先说最实用的那一块——用 Compose 把一套服务拉起来的流程。一般是把各个服务的配置信息写到一个 docker-compose.yml 里,然后一条命令把整套东西启动起来。常见命令是 docker-compose up,想在后台跑就加 -d。停掉并把相关容器、网络清理掉用 docker-compose down,若还想把卷删掉,就再加 -v。查看当前项目里都有哪些容器用 docker-compose ps,追日志用 docker-compose logs,带 -f 就是实时跟着看。需要在运行中的容器里执行命令,惯用 docker-compose exec。重建镜像时会用 docker-compose build,拉镜像用 docker-compose pull。

举个常见例子,WordPress 和 MySQL 的组合。yml 里会有两个服务,一个是数据库,指定镜像、卷挂载、环境变量(像 MYSQL_ROOT_PASSWORD、MYSQL_DATABASE 等);另一个是 WordPress,配置好端口映射、连接数据库的环境变量、挂载持久化存储。部署流程就是把 yml 写好,拉镜像,运行起来,等 WordPress 能访问到数据库,浏览器就能打开安装界面。配置出问题时看日志、看容器状态和 inspect,排查很快。工作的时候,就靠这些命令把整套服务一次性起起来,方便又可复现。
再往前一步说镜像管理。这些操作决定了你在不同环境之间搬运应用的能力。拉镜像用 docker pull,列如 docker pull nginx:latest。列出本地镜像是 docker images,删除本地某个镜像用 docker rmi。要把自己的应用打包成镜像,用 docker build,一般是在包含 Dockerfile 的目录跑 docker build -t my-app:latest .。给镜像打标签用 docker tag,推到远程仓库则用 docker push。把镜像保存成 tar 文件可以用 docker save,恢复用 docker load。想看镜像构建历史则 docker history,想在 Docker Hub 查镜像就 docker search。

说到 Dockerfile,它就是一份文本,写明了如何一步步构建镜像。常见指令有 FROM、RUN、COPY、CMD、EXPOSE、ENV 等。把构建步骤写清楚,团队就能按同样方式复刻镜像。把构建步骤写清楚,团队就能按同样方式复刻镜像。
接着说数据和网络这两块。容器本身是短命的,数据要想持久化就得依赖卷或把宿主目录挂进来。Docker 推荐用 Volume,由于 Docker 管理、便于迁移和备份,数据和容器生命周期分离,但要直接在主机上查看比较麻烦。Bind Mount 就是把宿主目录直接映射进容器,方便调试或同步代码,但可移植性差。tmpfs 是把数据放内存里,速度快但停止后数据就没了,适合临时敏感数据。常见命令有 docker volume ls、docker volume create、docker network ls 之类。
网络方面,Docker 提供多种模式以适配不同场景。默认的 bridge 模式适合单主机内的容器互通,配合端口映射使用最多。host 模式是直接用宿主网络,表演(性能)好但隔离少,适合对网络表演要求高的场景。none 模式把网络完全禁用,适合极端隔离需求。overlay 用于跨主机的容器通信,常见于 Swarm 或 Kubernetes 集群。macvlan 可以给容器分配独立的 MAC 地址,让容器在物理网络上像一台独立机器,适合需要直接暴露在物理网络的情况。
再向回退一步,说说运行时常用的 docker run 选项。后台运行用 -d,给容器起名字用 –name,端口映射是 -p 主机端口:容器端口,数据挂载用 -v 主机路径:容器路径,设置环境变量用 -e。想容器退出就自动删掉可以加 –rm,交互式终端组合用 -it。指定网络用 –network,重启策略用 –restart,指定运行用户用 -u,环境变量文件用 –env-file。举例子:docker run -d –name my-nginx nginx:alpine,后台运行 nginx 镜像并命名为 my-nginx;或者 docker run -p 8080:80 nginx,做端口转发。后台运行用 -d,给容器起名字用 –name。
再归到容器生命周期的具体命令。创建并启动一个容器常用 docker run;想先创建但不马上启动可以用 docker create;对已停止的容器重新启动用 docker start。停止正在运行的容器一般用 docker stop(会发送 SIGTERM,等待一段时间让进程优雅退出),如果想立即强制停止则用 docker kill(会发送 SIGKILL)。重启容器用 docker restart。删除一个停止的容器用 docker rm。要查看当前运行的容器列表用 docker ps,想看所有(包括停止的)加 -a。查看容器日志用 docker logs,带 -f 可以实时跟踪输出。监控容器资源用 docker stats,查看容器内进程用 docker top,查看容器的配置信息和状态用 docker inspect。你还可以用 docker events 监听实时事件流(列如创建、启动、停止等),用 docker wait 等到容器停止并拿到退出码。
这些命令中,像 docker run、docker ps、docker stop、docker rm、docker logs 这样的几乎每天都会用。docker start、docker restart、docker exec 也常常用。镜像管理里 docker build、docker images、docker pull 是工作里的主力。网络和存储相关命令平时也会碰到,列如 docker network ls、docker volume ls。Compose 的命令在多容器项目里是日常操作:docker-compose up/down、docker-compose logs、docker-compose ps、docker-compose exec。
开发和运维的工作流大致是这样:先把镜像准备好,写好 Dockerfile,本地或 CI 构建镜像并打标签,推到仓库;把服务需要的环境变量、卷、端口和网络配置写到 run 命令或 docker-compose.yml;启动后用 ps、logs、inspect、stats 来检查运行状态;出问题按日志和配置逐项排查。这个流程看起来是条线性的,但实际中会反复来回调试。
在日常使用中会发现一些小细节,列如停容器时给它一点缓冲时间比直接 kill 更好,卷的选择会影响备份和迁移成本,网络模式的选用会直接影响安全和表演。我自己常常在项目里复用这些套路,工作的时候,就靠这些命令把整套服务一次性起起来,方便又可复现。




















- 最新
- 最热
只看作者