如何为Azure Virtual Machine配置CI/CD以部署Docker应用?
Azure VM + Docker + DevOps仓库 快速配置CI/CD流程方案
一、先确保Azure VM的Docker可远程访问
- 修改Docker配置文件
/etc/docker/daemon.json,添加远程连接配置:{ "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"] } - 重启Docker服务:
sudo systemctl restart docker - 在Azure门户的VM网络设置里,添加入站安全规则,开放2375端口(生产环境务必配置TLS加密,避免裸端口暴露)
- 本地测试连接有效性:
能返回Docker系统信息即为配置成功docker -H tcp://<你的VM公网IP>:2375 info
二、配置CI流水线(以Azure DevOps为例)
新建流水线并关联你的代码仓库,修改流水线配置文件azure-pipelines.yml,核心步骤如下:
trigger: - main # 监听主分支提交 pool: vmImage: 'ubuntu-latest' steps: - script: | docker build -t my-app:$(Build.BuildId) . docker tag my-app:$(Build.BuildId) <你的ACR名称>.azurecr.io/my-app:latest displayName: '构建Docker镜像' - script: | docker login <你的ACR名称>.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) docker push <你的ACR名称>.azurecr.io/my-app:latest displayName: '推送镜像到Azure容器注册表(ACR)'
注:
ACR_USERNAME和ACR_PASSWORD需要在DevOps的流水线变量里配置,避免明文暴露
三、配置CD自动部署流水线
- 在DevOps中新建发布流水线,添加空白部署作业
- 配置SSH服务连接:关联你的Azure VM的SSH密钥(需提前在VM上配置公钥)
- 添加SSH任务,执行以下部署命令:
# 停止并清理旧容器 docker stop my-app-container || true docker rm my-app-container || true # 登录ACR并拉取最新镜像 docker login <你的ACR名称>.azurecr.io -u $(ACR_USERNAME) -p $(ACR_PASSWORD) docker pull <你的ACR名称>.azurecr.io/my-app:latest # 启动新容器(根据你的应用端口调整映射) docker run -d -p 80:80 --name my-app-container <你的ACR名称>.azurecr.io/my-app:latest
四、常见问题排查
- Docker远程连接失败:检查Azure防火墙规则是否生效、VM本地防火墙是否放行2375端口、Docker daemon配置是否重启生效
- 镜像拉取失败:核对ACR的用户名/密码、镜像标签是否与CI流水线一致、ACR是否允许VM所在网络访问
- 容器启动异常:执行
docker logs my-app-container查看日志,排查端口冲突、应用配置错误等问题
内容的提问来源于stack exchange,提问作者l.diazborg
相关产品推荐
相关产品推荐

