azure - 如何使用 Jenkins 管道从 docker-compose 创建 docker 映像?
问题描述
我正在尝试为 elasticsearch 构建一个 docker 映像并部署该映像(到 Azure 注册表并让它作为 Azure Web 应用程序运行)。
我用 . 做的很好Dockerfile
,但不知道如何用docker-compose.yml
文件做。
这是我的码头工人撰写:
version: '3.8'
services:
elasticsearch:
container_name: elasticsearch
image: library/elasticsearch:6.8.15
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- ./data:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- backend
networks:
backend:
name: backend-network-elasticsearch
和我的 Jenkinsfile
pipeline {
environment {
APP = 'elasticsearch01'
registry = "utilitaweb.azurecr.io/${APP}"
registryUrl = "https://___.azurecr.io"
registryCredential = 'azureregistry'
dockerImage = ''
buildNumber = "build_$BUILD_NUMBER"
}
agent any
stages {
stage('Building image') {
steps{
???
}
}
stage('Deploy Image') {
steps{
script {
docker.withRegistry(registryUrl, registryCredential) {
dockerImage.push()
dockerImage.push(buildNumber)
}
}
}
}
}
}
在构建步骤中我应该有什么?
以前我有过dockerImage = docker.build("${registry}:latest", "--build-arg APP=${APP} --build-arg -f Dockerfile .")
或类似的,但显然这行不通。
我认为这是因为我对 Docker 而不是 Jenkins 缺乏了解。
解决方案
Docker Compose 使用 Dockerfiles 来构建镜像。在上面,docker-compose.yml
您不是在构建图像,而只是使用从注册表中构建的图像(正如@David Maze 已经指出的那样)。
大多数人不会在生产中使用 compose 文件,除非他们使用 Swarm 模式。虽然它可以在生产环境中使用,但人们倾向于只在开发环境中使用 Docker Compose。
您有两个选择:a) 将 Docker 映像的构建与您的应用程序项目绑定,或者;b) 有一个单独的管道来构建你的 Docker 镜像,如果你有很多镜像,这是首选;
在 A 的情况下,只需在项目存储库中的某处有一个 Dockerfile,并在管道中创建阶段以构建、上传然后将该映像部署到容器编排器基础架构。它可以是 Docker 主机、Kubernetes 集群、Swarm、Fargate、ECS 等。在 B 的情况下,您已经有一个基础镜像,您将通过另一个 Dockerfile 将其导入到您的项目中。在这个辅助 Dockerfile 中,您很可能只需复制源代码。然后,只需将其上传到您的注册表,最后将其部署到您的基础架构。
此致。
推荐阅读
- c++ - 当我尝试运行我的 c++ 程序时,它说“使用未声明的标识符”,但它在标题中声明
- python - “ValueError : list.remove(x): x not in list”当 x 在列表中时
- repository - 安装 RCU for Oracle Data Integrator 运行时出错
- ios - Swift - 在 UIStackView 中以编程方式创建 UIPickerView
- android - 如何使用 FusedLocationProviderClient 获取当前位置
- python - 如何将值的数组列表移动到 Pandas DataFrame 中的不同列中?
- javascript - 基于过滤器的mongoose聚合模型
- python - UnboundLocalError:分配前引用的局部变量“BMI”
- android - 为什么使用导航组件在android应用程序中调用onViewCreated两次
- matlab - Numpy 相当于 MATLAB 的 hist