当前位置: 首页 > 知识库问答 >
问题:

Dockerfile和docker-compose.yml之间的混淆

洪伟彦
2023-03-14

我只是在尝试用MySQL数据库将我的Spring Boot应用程序固定化,一开始我看到我可以通过运行一些必要的命令来做到这一点,如下所示:

docker pull mysql:8.0
docker network create springmysql-net
docker run --name mysqldb --network springmysql-net -e MYSQL_ROOT_PASSWORD=pass -e 
MYSQL_DATABASE=employee-db -e MYSQL_USER=user -e MYSQL_PASSWORD=****** -d mysql:8.0
// update application properties:
url: jdbc:mysql://<container-name>:3306/employee-db&useSSL=false
docker build -t backend .
docker run --network springmysql-net --name backend-container -p 8080:8080 -d backend

<code>Dockerfile</code>如下所示:

FROM openjdk:8
ADD target/employee-api-0.0.1-SNAPSHOT.jar employee-api-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "employee-api-0.0.1-SNAPSHOT.jar"]

以下是我无法确定或理解的要点:

1.假设我们将jar文件发送给客户,并希望他们在Docker上轻松运行应用程序。我认为我们可以使所有这些命令自动执行。但我不确定我们应该使用哪个文件。我们需要<code>Dockerfile</code>吗?还是docker-compose.yml?

2. 我还使用 docker-compose.yml 来创建容器并为开发进行必要的设置。但是,我不确定Dockerfile的目的是什么?似乎 tı 也用于此过程的自动化。请澄清一下?

3. 在大多数示例中,使用 FROM openjdk:8。我认为这与没有Java 11的JRE有关。那么,它也可以用作 Java 11 或 Java 17 应用程序的 Dockerfile 上的 FROM openjdk:8 吗?

共有1个答案

曹子平
2023-03-14
    < li >假设我们将jar文件发送给客户,并希望他们在Docker上轻松运行应用程序。我认为我们可以让所有这些命令自动执行。但是我不确定我们应该使用哪个文件。我们需要Dockerfile吗?还是docker-compose.yml?

您可以向客户发送一个 Dockerfile 以及构建和运行 Docker 容器的命令,或者您可以向他们发送一个 docker-compose.yml 文件,客户可能只需要运行 docker-compose up但是,如果客户将使用 docker-compose.yml 文件,您还需要提供从 Dockerfile 或 Dockerfile 本身构建的映像以及构建它所需的相关上下文。应通过与客户的对话来决定向客户提供与应用程序代码或更敏感变量相关的任何文件。

Dockerfile基本上包含构建Docker映像的说明,以便在任何机器上以相同的方式构建映像。

您应该注意到,该映像已被废弃,将不再被维护,因此您应该从Docker Hub上列出的变体中签出一个不同的基础映像来使用。例如,您可以使用amazoncorreto基本映像,该映像从您的目标Java版本开始。

 类似资料:
  • 我有一个用Django编写的应用程序,我正在尝试在Digital Ocean droplet上的docker中运行它。目前我有两个文件。 有人能建议如何摆脱docker compose吗。yml文件并集成Dockerfile中的所有命令??? 文档文件 docker编写。yml公司 我运行我的应用程序和docker映像,如下所示: docker compose运行web python jk/man

  • docker-compose.yml 启动一个 order 和 一个 peer 节点。 orderer: image: hyperledger/fabric-orderer environment: - ORDERER_GENERAL_LEDGERTYPE=ram - ORDERER_GENERAL_BATCHTIMEOUT=10s - ORDERER_GENERAL_BAT

  • docker-compose.yml 启动一个 5 个节点的服务,包括 zookeeper、fabric-order 和 3 个 kafka 节点。

  • 问题内容: 我研究猫鼬已经三天了,对这两种方法的使用我有点困惑(我知道将来会不推荐使用“ mongoose.connection()” …) 问题是:当我尝试转换(从“ mongoose.connection()”到“ mongoose.createConnection()”)此示例的action.js文件https://gist.github.com/2785463时,不为我工作… 有我的代码…

  • 问题内容: 我有几个docker- compose.yml文件,我希望将它们与同一个Dockerfile一起使用,但略有不同。因此,我想将参数传递给该Dockerfile,以便根据变量设置为什么值来做一些稍有不同的操作。 到目前为止我尝试过的 docker-compose-A.yml文件 docker-compose-B.yml文件 我有一个要在其中使用SOMETHING的dockerfile。

  • 问题内容: 我对何时应该使用vs 感到困惑。例如,要执行bash / shell命令(即),我将始终使用它,或者是否存在我会使用的情况?试图了解有关这两个类似指令的最佳实践。 问题答案: RUN是映像构建步骤,命令后将容器的状态提交到容器映像。一个Dockerfile可以有很多步骤相互叠加以构建映像。 CMD是启动构建映像时容器默认执行的命令。Dockerfile将仅使用最终定义的。使用启动容器时

  • 我很困惑什么时候应该使用和。例如,要执行bash/shell命令(即),我将始终使用,或者是否存在使用的情况?试图理解关于这两个类似的指令的最佳实践。

  • Numpy、scipy、matplotlib和pylab是使用python进行科学计算的人常用的术语。 我刚刚了解了一点派拉布,我感到困惑。每当我想导入numpy时,我都可以: 我只是想,一旦我做到了 numpy也将被导入(使用alias)。所以基本上第二个比第一个做得更多。 有几件事我想问: pylab只是numpy、scipy和matplotlib的包装器,对吗 由于np是pylab中的num