应用程序二进制文件应该在装载或卷中,还是应该只存在于 docker 容器中?
Should app binaries be in mounts or volumes or should they exist only within a docker container?
这方面的最佳做法是什么?比如说,我正在 运行 宁一个 java 或 python 应用程序。所以我会 运行 基于 java 或 python 的容器,但我的应用程序应该放在哪里?它们应该位于基本映像中的文件夹中,还是应该位于主机上的挂载文件夹中?
您应该将 jar 复制到开发、阶段、生产或测试环境的容器中。
有时开发人员可以挂载二进制文件,但这是后置的。
这是标准的 Dockerfile 示例,"init" 是应用程序统计的脚本:
FROM openjdk:8-jdk-slim
ENV MYSQL_URL="mysql-master:3306"
EXPOSE 8080
COPY build/libs/app-*SNAPSHOT.jar /opt/app.jar
COPY init /opt/
WORKDIR /opt
VOLUME /logs
ENTRYPOINT ["/opt/init"]
其中一个优点是您可以测试、部署到阶段、部署到生产相同的容器,开发人员可以获得它以在本地 运行 重现问题。
您还可以在容器标签中包含版本控制。你会从 docker image ls
知道哪个版本的应用程序需要什么环境。
这方面的最佳做法是什么?比如说,我正在 运行 宁一个 java 或 python 应用程序。所以我会 运行 基于 java 或 python 的容器,但我的应用程序应该放在哪里?它们应该位于基本映像中的文件夹中,还是应该位于主机上的挂载文件夹中?
您应该将 jar 复制到开发、阶段、生产或测试环境的容器中。 有时开发人员可以挂载二进制文件,但这是后置的。 这是标准的 Dockerfile 示例,"init" 是应用程序统计的脚本:
FROM openjdk:8-jdk-slim
ENV MYSQL_URL="mysql-master:3306"
EXPOSE 8080
COPY build/libs/app-*SNAPSHOT.jar /opt/app.jar
COPY init /opt/
WORKDIR /opt
VOLUME /logs
ENTRYPOINT ["/opt/init"]
其中一个优点是您可以测试、部署到阶段、部署到生产相同的容器,开发人员可以获得它以在本地 运行 重现问题。
您还可以在容器标签中包含版本控制。你会从 docker image ls
知道哪个版本的应用程序需要什么环境。