gpt4 book ai didi

docker - 多个 RUN 指令与单个 CMD 执行 Dockerfile 中的设置脚本以初始化容器

转载 作者:IT老高 更新时间:2023-10-28 21:38:10 31 4
gpt4 key购买 nike

在 Dockerfile 中使用多个 RUN 命令来设置镜像与在容器启动时使用单个 CMD 指令来执行脚本的最佳做法是什么?

例如:

FROM  centos:latest

RUN useradd myuser
RUN mkdir -p /usr/local/myapp
ADD ./resources/myapp.zip /usr/local/myapp
RUN unzip /usr/local/myapp/myapp.zip
RUN chown -R myuser:myuser /usr/local/myapp

CMD ["/usr/local/myapp/bin/app"]

对比

FROM  centos:latest

ADD ./resources/myapp.zip /
ADD ./resources/setup.sh /
RUN chmod +x /setup.sh

# setup.sh will create the user, extract the zip, execute the binary
CMD ["/setup.sh"]

最佳答案

第一个例子更适合多次运行app。如果你要使用 ENTRYPOINT 而不是 CMD 那么你可以让容器表现得好像它是 app (因为它会运行 app 与您在命令行上作为参数传递的任何内容)。如果您以后想将此图像用作另一个图像的基础,您仍然可以访问 app

第二个示例运行会慢一些,因为它必须在每次 docker run 时提取 zip 文件,并且如果将其设为父图像,则无法轻松使用 app ,因为 app 尚未安装。

一般来说,我建议使用第一种格式,但第二种格式适用于琐碎的 zipper 和一次性图像和容器。

关于docker - 多个 RUN 指令与单个 CMD 执行 Dockerfile 中的设置脚本以初始化容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23299398/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com