我工作的公司的开发人员要求我用 Docker 做一些不同的事情,然后我也习惯了。目标是拥有 2 个具有以下职责的容器:
容器 A:节点容器,它将构建前端反应应用程序并将捆绑包放入名为app/dist/
. 完成后,容器将停止运行。
容器 B:一个高山 nginx 容器,它将从/usr/share/nginx/html/app
.
已在容器 A 中构建的文件将使用将安装<Container A>/app/dist
到的卷提供给容器<Container B>/usr/share/nginx/html/app
B。
请注意,在公共可访问端口和 nginx 容器之间有一个 HAProxy 层,该容器称为app
.
上面的任务正在使用 docker compose 文件进行编排,如下所示:
version: '2'
volumes:
webapp_build_volume: {}
services:
webapp_build:
build:
context: .
dockerfile: 'config/nginx/dockerfile-builder'
volumes:
- webapp_build_volume:/app/dist
- webapp_static_volume:/app/src/app/static
app:
build:
context: 'config/haproxy'
dockerfile: 'dockerfile-app-haproxy'
links:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- '80:80'
- '1936:1936'
web:
build:
context: .
dockerfile: 'config/nginx/dockerfile-web'
environment:
- EXCLUDE_PORTS=443
- VIRTUAL_HOST=*
depends_on:
- webapp_build
volumes:
- webapp_build_volume:/usr/share/nginx/html/app
这目前仅在第一次构建 docker compose 文件时有效。创建卷后,卷中的文件不再更新。我读过命名卷在建立后无法更新,但我无法确认。我找到了涉及运行的解决方法,docker-compose rm --force && docker volume webapp_build rm
但如果可能的话,我不想杀死缓存的容器,因为 CI 服务会变得太慢。
如果我能澄清任何事情,请告诉我(我知道这里有很多活动部分)。请注意,我也在使用 docker 2 beta,尽管我看不出这会如何改变我在这里所做的任何事情。