从 docker run 到 Compose:每个参数真正代表什么
从 docker run 到 Compose:每个参数真正代表什么
解释如何把 docker run 命令翻译成 Compose 服务,同时保留端口、卷、环境变量、重启规则和密钥边界。
原创流程图
从 docker run 到 Compose:每个参数真正代表什么
理解原理
检查后再进入下一步
检查边界
检查后再进入下一步
使用工具
检查后再进入下一步
镜像名告诉 Docker 从哪个文件系统和默认命令启动,但它不说明如何连接主机、数据保存在哪里、需要哪些环境变量或重启后会怎样。Compose 让这些决定可见,服务块应该让别人读懂容器需要什么、暴露什么。
-p 8080:80 表示主机 8080 端口映射到容器 80 端口。把方向看反是常见错误。迁移到 Compose 时应确认用户或反向代理连接哪个主机端口,应用在容器内监听哪个端口。不要无必要公开端口。
容器本身应可丢弃,卷和绑定挂载决定哪些数据在重建后仍存在。绑定挂载指向主机路径,命名卷由 Docker 管理。迁移时必须保留这种差异,错误挂载可能隐藏镜像内文件或把数据写到意外位置。
-e 很方便,但复制来的命令常包含密码、token 或连接串。Compose 可以把配置放到 environment 或 env 文件,但这不等于密钥安全。真实密钥不应提交到仓库,示例里应使用清晰占位符。
一次性 docker run 退出后可能保持停止,服务则常需要 restart 策略。是否 always、unless-stopped 或手动重启是运维决策。崩溃循环容器如果自动重启过强,可能掩盖错误或制造噪音。
有些 docker run 参数能直接转成 Compose 键,有些需要不同结构或人工评审。交互参数、设备访问、网络模式、capabilities、用户 ID、DNS 和平台限制都可能有安全含义。转换结果应视作草稿。
从包含镜像、端口、卷、环境变量和重启行为的代表命令开始;转成服务;清晰命名服务和卷;移除密钥;运行配置验证;在安全前提下本地启动、看日志并确认数据写入位置。目标是可维护运维,而不只是更漂亮的命令。
常见问题
不能。常见参数可以映射,但网络、设备、安全选项和交互行为需要人工复核。
真实密钥不应提交。应使用环境注入、密钥管理或项目现有部署机制。
值得。Compose 能把端口、卷、环境、重启策略和服务身份写成可重复文件。
运行 Compose 配置验证,检查镜像、命令、端口、卷、环境变量、用户、重启策略和网络。
检查主机路径、容器路径、只读标志、权限、备份预期,以及是否遮蔽镜像内文件。
固定名称在同主机多 stack 或本地多副本时容易冲突,服务名和项目名通常足够。
注释不明显的端口、主机路径、权限和重启选择,不要注释真实密钥或临时调试值。