DevOps系列文章 之 Dockerfile的 CMD 与 ENTRYPOINT 命令区别
发布人:shili8
发布时间:2025-01-10 00:11
阅读次数:0
**DevOps系列文章之Dockerfile的CMD与ENTRYPOINT命令区别**
在Docker的世界中,`CMD`和`ENTRYPOINT`是两个非常重要的命令,它们决定了容器启动后执行什么命令。虽然这两个命令看起来很相似,但它们有着不同的用途和作用。
**CMD命令**
`CMD`命令用于指定容器启动后要执行的命令。如果你在Dockerfile中使用了`CMD`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。例如:
dockerfileFROM python:3.9-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages (e.g., requirements.txt) RUN pip install --no-cache-dir flask# Make port80 available to the world outside this containerEXPOSE80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"]
在上面的例子中,`CMD`命令指定了容器启动后要执行的命令是`python app.py`。当你运行`docker run`命令时,这个命令会被传递给容器内的进程。
**ENTRYPOINT命令**
`ENTRYPOINT`命令用于指定容器启动后要执行的命令。如果你在Dockerfile中使用了`ENTRYPOINT`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。例如:
dockerfileFROM python:3.9-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages (e.g., requirements.txt) RUN pip install --no-cache-dir flask# Make port80 available to the world outside this containerEXPOSE80# Define environment variableENV NAME World# Run app.py when the container launchesENTRYPOINT ["python", "app.py"]
在上面的例子中,`ENTRYPOINT`命令指定了容器启动后要执行的命令是`python app.py`。当你运行`docker run`命令时,这个命令会被传递给容器内的进程。
**CMD与ENTRYPOINT区别**
虽然`CMD`和`ENTRYPOINT`看起来很相似,但它们有着不同的用途和作用:
* `CMD`用于指定容器启动后要执行的命令。如果你在Dockerfile中使用了`CMD`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。
* `ENTRYPOINT`用于指定容器启动后要执行的命令。如果你在Dockerfile中使用了`ENTRYPOINT`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。
**CMD与ENTRYPOINT的区别示例**
dockerfileFROM python:3.9-slim# Set the working directory to /appWORKDIR /app# Copy the current directory contents into the container at /appCOPY . /app# Install any needed packages (e.g., requirements.txt) RUN pip install --no-cache-dir flask# Make port80 available to the world outside this containerEXPOSE80# Define environment variableENV NAME World# Run app.py when the container launchesCMD ["python", "app.py"] # Run another command when the container launchesENTRYPOINT ["python", "another_app.py"]
在上面的例子中,`CMD`命令指定了容器启动后要执行的命令是`python app.py`,而`ENTRYPOINT`命令指定了容器启动后要执行的命令是`python another_app.py`。当你运行`docker run`命令时,这两个命令会被传递给容器内的进程。
**CMD与ENTRYPOINT的区别示例**
bash$ docker build -t myapp . $ docker run -it --rm myapp python app.py
在上面的例子中,`docker run`命令将`python app.py`作为参数传递给容器内的进程。
bash$ docker build -t myapp . $ docker run -it --rm myapp python another_app.py
在上面的例子中,`docker run`命令将`python another_app.py`作为参数传递给容器内的进程。
**结论**
虽然`CMD`和`ENTRYPOINT`看起来很相似,但它们有着不同的用途和作用。`CMD`用于指定容器启动后要执行的命令,而`ENTRYPOINT`用于指定容器启动后要执行的命令。如果你在Dockerfile中使用了`CMD`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。同样,如果你在Dockerfile中使用了`ENTRYPOINT`命令,那么当你运行`docker run`命令时,会将该命令作为参数传递给容器内的进程。
**参考**
* Docker官方文档: />* Docker CMD和ENTRYPOINT命令区别: