01-ENTRYPOINT和CMD
...大约 3 分钟DockerDockerfile
FROM openjdk:8-oracle
MAINTAINER yagote
# 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp
# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD Docker_boot-1.0-SNAPSHOT.jar /springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]
# SpringBoot项目配置的端口号为6001,需要将6001暴露出去
EXPOSE 6001
ENTRYPOINT
和 CMD
是 Dockerfile 中用于指定容器启动时执行的命令和参数的指令。
ENTRYPOINT
- 作用:
ENTRYPOINT
指令用于指定容器启动时执行的主命令。它使得容器始终以指定的命令启动,通常用于定义容器的主要任务。 - 格式:
- Shell 格式:
ENTRYPOINT command param1 param2
- Exec 格式:
ENTRYPOINT ["executable", "param1", "param2"]
- Shell 格式:
- 特点:
ENTRYPOINT
更加固定,通常用于指定容器的主要任务。- 可以与
CMD
配合使用,CMD
的参数会被传递给ENTRYPOINT
指定的命令。
CMD
- 作用:
CMD
指令用于指定容器启动时的默认命令和参数。如果在docker run
命令中提供了命令和参数,CMD
指令会被覆盖。 - 格式:
- Shell 格式:
CMD command param1 param2
- Exec 格式:
CMD ["executable", "param1", "param2"]
- 参数格式:
CMD ["param1", "param2"]
(与ENTRYPOINT
配合使用时)
- Shell 格式:
- 特点:
CMD
用于提供默认的命令和参数,可以被docker run
命令中的参数覆盖。- 如果 Dockerfile 中没有指定
ENTRYPOINT
,则CMD
指定的命令会作为容器的主命令。
使用示例
仅使用 CMD
FROM ubuntu:latest
CMD ["echo", "Hello, World!"]
在这个示例中,CMD
指令指定了默认的命令 echo Hello, World!
。如果运行容器时没有提供其他命令,容器将执行 echo Hello, World!
。
docker run myimage
# 输出: Hello, World!
如果在运行容器时提供了其他命令,CMD
指令会被覆盖:
docker run myimage echo "Goodbye, World!"
# 输出: Goodbye, World!
仅使用 ENTRYPOINT
FROM ubuntu:latest
ENTRYPOINT ["echo", "Hello, World!"]
在这个示例中,ENTRYPOINT
指令指定了主命令 echo Hello, World!
。无论运行容器时是否提供其他命令,容器都会执行 echo Hello, World!
。
docker run myimage
# 输出: Hello, World!
如果在运行容器时提供了其他命令,这些命令会作为参数传递给 ENTRYPOINT
指定的命令:
docker run myimage "Goodbye, World!"
# 输出: Hello, World! Goodbye, World!
ENTRYPOINT
和 CMD
配合使用
FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]
在这个示例中,ENTRYPOINT
指令指定了主命令 echo
,而 CMD
指令提供了默认参数 Hello, World!
。如果运行容器时没有提供其他参数,容器将执行 echo Hello, World!
。
docker run myimage
# 输出: Hello, World!
如果在运行容器时提供了其他参数,这些参数会覆盖 CMD
指定的默认参数:
docker run myimage "Goodbye, World!"
# 输出: Goodbye, World!
总结
ENTRYPOINT
:用于指定容器启动时执行的主命令,使得容器始终以指定的命令启动。可以与CMD
配合使用,CMD
的参数会被传递给ENTRYPOINT
指定的命令。CMD
:用于指定容器启动时的默认命令和参数。如果在docker run
命令中提供了命令和参数,CMD
指令会被覆盖。可以与ENTRYPOINT
配合使用,提供默认参数。
Powered by Waline v3.2.0