我正在尝试为elasticsearch构建一个docker镜像并部署该镜像(到Azure注册表,并让它作为Azure Web应用程序运行)。
我用Dockerfile做得很好,但是我不知道如何用docker-compose.yml文件做这件事。
这是我的docker-compose:
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的理解。
发布于 2021-04-14 23:10:44
Docker Compose使用Dockerfiles构建镜像。在上面的docker-compose.yml中,您不是在构建镜像,而是使用已经从注册表构建的镜像(正如@David Maze已经指出的)。
大多数人在生产环境中不使用compose文件,除非他们使用Swarm模式。虽然Docker Compose可以在生产环境中使用,但人们倾向于仅在开发环境中使用Docker Compose。
您有两个选择: a)将Docker镜像的构建与您的应用程序项目绑定;b)使用单独的管道仅用于Docker镜像的构建,如果您有大量镜像,这是首选;
在A的情况下,只需在项目存储库中的某个位置创建Dockerfile,并在管道中创建阶段,以构建、上传映像,然后将其部署到容器编排基础设施中。它可以是Docker主机、Kubernetes集群、Swarm、Fargate、ECS等。在B示例中,您已经有了一个基础镜像,您将通过另一个Dockerfile将其导入到您的项目中。在这个辅助Dockerfile中,最有可能的是复制源代码。然后,只需将其上传到您的注册表,并最终将其部署到您的基础设施。
诚挚的问候。
https://stackoverflow.com/questions/67093124
复制相似问题