我目前有一个Web应用程序,分为三个部分。每个部分都有自己的git存储库。
位于前面的NGINX服务器充当反向代理。目前,它们都与Jenkins服务器一起在VM上运行,这使我能够分别开发和部署我非常喜欢的每个部分。
我想对应用程序进行容器化,然后将其移至Azure Web Service for Containers。对于CD / CI,我想使用Azure DevOps和Azure Pipelines。由于Azure容器Web服务通过Docker Compose和Kubernetes支持多容器。
主要问题是: 如何在多容器(通过Docker Compose)环境中构建和部署一个特定的容器(例如Azure / frontend:10)? (不构建其他所有容器)
如果可能的话...
还是我需要使用Kubernetes?
或者,我可以在同一服务计划上使用三个不同的App Web,并按每个域/子域对其进行控制。
我不知道从哪里开始。这也是一个小项目。我不想让它变得太复杂。
任何提示都值得欢迎。 预先感谢!
答案 0 :(得分:2)
我没有使用Azure Pipelines的经验,但是对于Azure Container Registry和Azure Web App for Container有一些想法。
首先,如果您只想通过Docker compose在多容器中构建一个特定的容器,则可以在tutorial中进行设置:
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
compose也可以与文件中设置的一个容器一起使用。
第二,撰写文件可以在您运行命令以创建用于容器的Web App的任何地方。例如,您可以使用存储在本地计算机中的撰写文件在本地计算机中运行CLI命令。
第三,如果您将Azure Web App用于容器,则应在存储库中准备好docker映像,例如Azure容器注册表。它不像在本地计算机上安装docker compose一样。
AKS也是一个不错的选择。您可以一一创建服务,也可以在一个yaml文件中全部设置它们。非常灵活。
希望这会对您有所帮助。如果您需要有关AKS或ACR的更多帮助,请给出消息。
答案 1 :(得分:0)
您可以使用容器注册表,该注册表将允许您使用docker构建每个单独的容器。然后,您可以使用容器注册表中的容器来部署多容器应用。
构建容器文件遵循标准方法,使您可以复制configure等。构建完成后,您可以通过如下标记它们来推送它们:container_registry_name/container_name:{{.Run.ID}}
我建议根据提供的示例使用生产数据库而不是容器,因为我遇到了在容器重启时重置db数据的问题。文件卷可以通过以下方式持久保存:
用于容器的Docker-Compose不允许(当前)允许您在azure管道中使用build
作为其仅用于部署的目的
首先需要构建dockerfile,然后在docker-compose.yml中引用新存储的容器注册表映像。另外请注意,您不能简单地在同一撰写文件中引用docker hub镜像和容器注册表镜像。您需要拉出容器并对其进行标记或构建并对其进行标记,以这种方式使用它。您可以使用容器注册表图像或公共图像。
为了使您的应用程序能够连接到这些图像,您需要将此图像添加到您的应用程序设置中,并在容器注册表服务中允许管理员:
DOCKER_REGISTRY_SERVER_USERNAME = [azure-container-registry-name]
DOCKER_REGISTRY_SERVER_URL = [azure-container-registry-name].azurecr.io
DOCKER_REGISTRY_SERVER_PASSWORD = [password]
设置完基本的应用程序后,您就可以配置持续集成选项以进行进一步的开发,例如webhooks,构建选项等。