Ada*_*old 0 python continuous-integration docker microservices docker-compose
我有两个服务,位于两个不同的 GitLab 存储库,部署到同一主机。我目前正在使用supervisord来运行所有服务。每个存储库的 CI/CD 将代码推送到主机。
supervisord我正在尝试用 Docker替换。我所做的如下:
Dockerfile为每个服务设置一个。docker-compose.yml,该存储docker-compose up库在其 CI 中运行以构建和运行这两个服务。我希望这个存储库只部署一次。我正在寻找一种docker-compose在部署这两项服务之一时自动更新的方法。
编辑:本质上,我试图找出使用docker-compose多存储库设置和一台主机的最佳方法。
我的docker-compose:
version: "3.4"
services:
redis:
image: "redis:alpine"
api:
build: .
command: gunicorn -c gunicorn_conf.py --bind 0.0.0.0:5000 --chdir server "app:app" --timeout 120
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- redis
celery-worker:
build: .
command: celery worker -A server.celery_config:celery
volumes:
- .:/app
depends_on:
- redis
celery-beat:
build: .
command: celery beat -A server.celery_config:celery --loglevel=INFO
volumes:
- .:/app
depends_on:
- redis
other-service:
build: .
command: python other-service.py
volumes:
- .:/other-service
depends_on:
- redis
Run Code Online (Sandbox Code Playgroud)
如果您在 CI 系统的上下文中进行设置,则该docker-compose.yml文件应该只运行图像;它不应该也承担建设它们的责任。
不要使用覆盖容器中的代码volumes:。
您提到每个服务的存储库都有一个Dockerfile,这是正常设置。您的 CI 系统应该docker build在那里运行(通常docker push)。然后你的docker-compose.yml文件只需要提及image:CI 系统构建的:
version: "3.4"
services:
redis:
image: "redis:alpine"
api:
image: "me/django:${DJANGO_VERSION:-latest}"
ports:
- "8000:8000"
depends_on:
- redis
celery-worker:
image: "me/django:${DJANGO_VERSION:-latest}"
command: celery worker -A server.celery_config:celery
depends_on:
- redis
Run Code Online (Sandbox Code Playgroud)
我在上面暗示docker push。如果您使用 Docker Hub、云托管的 Docker 映像存储库,或者正在运行私有存储库,则 CI 系统应在docker push构建每个映像后运行,并且(如果不是 Docker Hub)这些image:行需要包含存储库地址。
这里的另一个重要问题是如何进行重建。我建议为每个构建提供一个唯一的 Docker 镜像标签、时间戳或源代码控制提交 ID,两者都可以很好地工作。在docker-compose.yml上面显示的文件中,我使用环境变量来指定实际的图像标签,以便您的 CI 系统可以运行
DJANGO_VERSION=20200113.1114 docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
然后 Compose 将了解更改后的镜像标签,并能够根据新镜像重新创建容器。
(这种方法与 Kubernetes 等集群系统的上下文高度相关。那里几乎需要将映像推送到注册表。在 Kubernetes 中,更改名称会触发重新image:部署,因此也几乎需要为每个映像使用唯一的映像标签。构建。除了有多个且更复杂的 YAML 文件之外,Kubernetes 中的整体方法与我在这里列出的非常相似。)
| 归档时间: |
|
| 查看次数: |
4970 次 |
| 最近记录: |