2017-02-22 57 views
0

我有一个关于最佳实践的问题。使用Docker-compose和vcs的Dockerfile的最佳实践

比方说,我有一个web前端开发的angularjs和API来获取数据。我把这两个放在不同的仓库中。 现在我想要dockerize整个事情。我的想法是在每个指定其环境的项目中放入一个Dockerfile。到现在为止它很好,但是当我还有一个docker-compose文件时,它同时启动了这两个服务?首先,我应该把这个文件放在哪个回放中,其次我该如何保证图像始终是最新的?

回答

1

可以使用的结构是这样的:

project/ 
- project/docker-compose.yaml 
- project/frontend/ (contains Dockerfile + necessary files) 
- project/api/ (contains Dockerfile + necessary files) 

在你docker-compose.yaml你可以写这样的事情对每个图像:

frontend: 
    build: ./frontend #folder in which Dockerfile of frontend is saved (to build the image) 
    image: my-frontend:1.0 #give a name to your image 
container_name: frontend-container #containername when a container instance of your image is running 

开始docker-compose可以运行docker-compose up --build--build标记将在有更改时重新创建图像,以便在dockerfile(图像)发生更改时保持最新的构图。

Docker-compose是从上到下的“阅读”。因此,您首先在docker-compose.yaml中描述的服务将首先创建。我认为这是你的API,因为它可能独立存在,你的前端需要与它连接。有时你的第一个服务启动太慢,这意味着第二个服务已经启动,但找不到第一个服务(连接)并且崩溃。这可以通过使用wait-for-it.sh脚本来解决。您的第二项服务将使用该脚本并检查第一项服务何时启动。当它启动时,它将开始自己的服务。

+0

嗨lorenzvth7感谢您的回复。在这种情况下,我必须创建另一个存储库,其中包含另外两个项目(前端和api)作为子模块? – hesyar

+1

我认为这将是最好的/最简单的解决方案。 – lvthillo