CMD 指令的详细解释和实际应用

news/2025/2/11 9:42:36/文章来源:https://www.cnblogs.com/autopwn/p/18709158

以下是关于 CMD 指令的详细解释和实际应用


CMD 指令概述

  • 作用

    • CMD 用于指定容器启动时运行的默认命令。
    • 它与 RUN 的主要区别在于执行时机:
      • RUN:在镜像构建阶段执行,用于安装软件或配置环境。
      • CMD:在容器启动阶段执行,用于指定容器内需要运行的程序。
  • 重要特点

    • 如果在 docker run 命令中指定了其他命令,则会覆盖 CMD 指令中定义的默认命令。
    • 每个 Dockerfile 只能有一个 CMD 指令,如果定义了多个,只有最后一个会生效。

CMD 的使用场景

  • 启动容器时运行服务,例如 Nginx、Tomcat。
  • 执行某些特定的脚本或程序。

CMD 的语法

1. Exec 格式

  • 使用 JSON 数组的形式,指定可执行文件及其参数。
  • 格式:
    CMD ["可执行文件", "参数1", "参数2"]
    
  • 示例:
    CMD ["nginx", "-g", "daemon off;"]
    
  • 优点:
    • 推荐使用此格式,因为它不会调用默认的 Shell,适合不需要 Shell 解析的场景。

2. Shell 格式

  • 使用 Shell 的命令形式,默认使用 /bin/sh -c 解析。
  • 格式:
    CMD <命令>
    
  • 示例:
    CMD nginx -g 'daemon off;'
    
  • 注意:
    • Shell 格式依赖 Shell 解析,可能产生不必要的复杂性,建议在简单命令中使用。

3. CMD 参数作为 ENTRYPOINT 的默认参数

  • CMD 指定的内容将作为 ENTRYPOINT 命令的默认参数。
  • 格式:
    CMD ["参数1", "参数2"]
    
  • 示例:
    CMD ["-Djava.security.egd=file:/dev/./urandom"]
    

CMD 与 RUN 的区别

特性 RUN CMD
执行时机 构建镜像时执行 容器启动后执行
用途 安装软件、配置环境等 定义容器的启动命令
覆盖 不可被覆盖 可被 docker run 的参数覆盖
层的影响 每条指令创建一个镜像层 仅作为容器启动时的元数据

CMD 使用示例

示例 1:运行 Nginx

使用 CMD 启动 Nginx 服务,并确保它在前台运行。

# 基础镜像
FROM centos# 安装 Nginx
RUN yum install -y nginx# 声明暴露的端口
EXPOSE 80# 容器启动时运行 Nginx
CMD ["nginx", "-g", "daemon off;"]

构建镜像:

docker build -t nginx:v1 .

运行容器:

docker run -d -p 8080:80 nginx:v1

示例 2:运行 Python 脚本

启动容器时自动运行 Python 脚本。

# 基础镜像
FROM python:3.9# 拷贝 Python 脚本到镜像
COPY app.py /app.py# 声明暴露的端口
EXPOSE 5000# 容器启动时运行脚本
CMD ["python", "/app.py"]

CMD 的应用细节

1. CMD 参数可被覆盖

  • 如果在 docker run 中指定了其他命令,则会覆盖 CMD 指令。
  • 示例:
    CMD ["nginx", "-g", "daemon off;"]
    
    运行容器时覆盖:
    docker run nginx:v1 nginx -v
    
    • 结果:CMD 指定的 nginx -g 'daemon off;' 被覆盖,运行 nginx -v

2. CMD 与 ENTRYPOINT 联合使用

  • 用法

    • ENTRYPOINT 定义不可更改的主程序。
    • CMD 定义默认的参数,可以在运行时根据需要进行覆盖。
  • 示例

    FROM ubuntu# 定义不可更改的主程序
    ENTRYPOINT ["top", "-b"]# 定义默认参数
    CMD ["-n", "1"]
    

    运行容器时:

    docker run ubuntu:v1
    
    • 默认执行:top -b -n 1

    修改参数运行:

    docker run ubuntu:v1 -n 5
    
    • 执行:top -b -n 5

CMD 的典型用途

  1. 前台运行服务

    • 例如运行 Nginx、Tomcat 等服务时,使用 CMD 指令启动服务并保持容器运行。
    • 示例:
      CMD ["nginx", "-g", "daemon off;"]
      
  2. 运行脚本

    • 自动执行某些初始化任务,比如启动应用程序、配置环境等。
    • 示例:
      CMD ["bash", "/startup.sh"]
      
  3. 灵活的参数定义

    • 使用 CMD 定义默认参数,让用户可以在 docker run 命令中覆盖这些参数。

总结与注意事项

  1. CMD 是容器启动时的默认命令

    • 如果未指定其他命令,则容器会执行 CMD 中的内容。
  2. CMD 是可被覆盖的

    • 如果在 docker run 命令中指定了其他命令或参数,则会覆盖 CMD 的默认命令。
  3. CMD 推荐使用 Exec 格式

    • 比 Shell 格式更安全,避免依赖 Shell 的问题。
  4. CMD 与 ENTRYPOINT 配合使用

    • 定义不可更改的主程序(ENTRYPOINT)和可覆盖的默认参数(CMD)。
  5. 前台与后台运行

    • 启动服务时,如果需要保持服务一直运行,通常需要在命令中加入参数以确保服务运行在前台,例如:
      CMD ["nginx", "-g", "daemon off;"]
      

通过合理使用 CMD 指令,可以简化容器运行时的配置,确保容器按照预期加载服务或执行程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881977.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java安全中的类加载

java安全中的类加载本文所涉及的内容仅供参考与教育目的,旨在普及网络安全相关知识。其内容不代表任何机构、组织或个人的权威建议,亦不构成具体的操作指南或法律依据。作者及发布平台对因使用本文信息直接或间接引发的任何风险、损失或法律纠纷不承担责任。对应的代码我发在…

cvat nuclio serverless pip install安装失败

cvat nuclio serverless 安装自动标注插件失败./serverless/deploy_cpu.sh serverless/onnx/WongKinYiu/yolov7主要pip安装失败的原因是部分依赖包不能够在大陆下载 只需要将function.yaml内的脚本添加依赖加速即可-i https://pypi.tuna.tsinghua.edu.cn/simple

Qt写Word文档-Windows

电脑没有安装微软的office,安装的是wps,用的是 QAxObject,所以只支持Windows系统一、pro文件添加 axcontainer 二、实现代码#include <QAxObject> #include <QDebug> // 创建Word应用程序对象 QAxObject* word = new QAxObject("kwps.Application");…

绝了,一招解决DeepSeek 提示“服务器繁忙,请稍后再试” 卡顿问题!(保姆级教程)

大家好,我是狂师。 现在 AI 圈里讨论最多的话题就是:"国产之光DeepSeek了"。 但用过的人也知道,是真的卡。动不动就提示:“服务器繁忙,请稍后再试”用官方App或网页版,估计10条回复中至少有8条会卡爆。对于重度使用的我来讲,经常会被官网的卡顿搞得差点吐血。…

揭秘 Sdcb Chats 如何解析 DeepSeek-R1 思维链

在上一篇文章中,我介绍了 Sdcb Chats 如何集成 DeepSeek-R1 模型,并利用其思维链(Chain of Thought, CoT)功能增强 AI 推理的透明度。DeepSeek-R1 强大的思维链能力给用户留下了深刻印象。本文将深入剖析 Sdcb Chats 实现这一功能的技术细节,重点介绍如何基于 OpenAI .NET…

全网最全的DeepSeek的使用指导资源,拿去用来操作其他的大模型也一样有用,你去找付费培训不如打赏我一毛

最近全网都在为火热的DeepSeek疯狂,不少商家培训都是出了付费培训,不少人都上当受骗。我就搜刮全网最全的使用,供大家使用,有使用文档,有提示词培训,有视频,应有尽有,现在我们就开始吧! 一、如何使用提示词 DeepSeek官网提供了很全面的提示词规则手册,包含了13个方向…

0帧起手将腾讯混元大模型集成到Spring AI的全过程解析

在前面,我们已经为大家铺垫了大量的知识点,并深入解析了Spring AI项目的相关内容。今天,我们将正式进入实战环节,从零开始,小雨将带领大家一步步完成将第三方大模型集成到Spring AI中的全过程。为了方便讲解,本次实战的示范将以腾讯的混元大模型为主,我们将逐步向你展示…

【5大误区】选择跨网文件安全交换系统的注意事项

网络隔离后,企业采用跨网文件安全交换系统可以显著提升工作效率、保障信息安全、满足合规要求、支持灵活工作模式以及增强市场竞争力。这些优势使得跨网文件交换系统成为现代企业不可或缺的工具。 一、选择跨网文件安全交换系统的常见误区 选择跨网文件安全交换系统时,企业和…

C# 深度学习:对抗生成网络(GAN)训练头像生成模型

通过生成对抗网络(GAN)训练和生成头像 目录通过生成对抗网络(GAN)训练和生成头像说明简介什么是 GAN什么是 DCGAN参数说明数据集处理权重初始化生成器判别器损失函数和优化器训练 说明 https://torch.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch Maomi.Torc…

开源的 DeepSeek-R1「GitHub 热点速览」

春节假期回来,一睁眼全是王炸级的开源模型 DeepSeek-R1!GitHub 地址→github.com/deepseek-ai/DeepSeek-R1DeepSeek-R1 开源还不到一个月,Star 数就飙升至冲破天际的 70k。虽然目前仅开源了模型权重,但同时发布的技术论文详细地介绍了 DeepSeek-R1 所采用的训练技术,如模型…

C#/.NET/.NET Core优秀项目和框架2025年1月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的详细介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附…

Palo Alto Cortex XSOAR 6.13 for Linux - 安全编排、自动化和响应 (SOAR) 平台

Palo Alto Cortex XSOAR 6.13 for Linux - 安全编排、自动化和响应 (SOAR) 平台Palo Alto Cortex XSOAR 6.13 for Linux - 安全编排、自动化和响应 (SOAR) 平台 Security Orchestration, Automation and Response (SOAR) platform 请访问原文链接:https://sysin.org/blog/cort…