使用docker-compose将多个容器推送到注册表

50次阅读
没有评论

问题描述

在使用Jenkins流水线时,通过运行shell命令来启动链接的容器进行测试。测试完成后,他希望将这些容器推送到注册表(首选AWS ERC,但目前他愿意接受任何有效的示例)。他想知道正确的方法是什么?每个镜像应该放在不同的仓库中吗?如何将由compose文件创建的所有容器推送上去?他尝试使用docker-compose push命令来完成这个任务,但似乎无法正常工作,也找不到任何好的示例。

Jenkinsfile:

node('ec2-build-slave') {
    stage('Docker Build') {
        /* This builds the actual image; synonymous to
        * docker build on the command line */
        sh("docker network create aa_backend_network")
        sh("docker-compose up -d --build")
        //docker.build("$IMAGE")
    }
    stage ('Docker Push'){
        // /* This pushes the previously built image to the Amazon
        // * ECS Container Registry */
        sh("eval \$(aws ecr get-login --region us-west-2 --no-include-email | sed 's|https://||')")
        // docker.withRegistry(ECR_URL, ECR_CRED) {
        // docker.image(IMAGE).push()
        // }
        sh("docker-compose build")
        sh("docker-compose push")
    }
}catch (exc) {
    currentBuild.result = "FAILED"
    throw exc
}finally {
    // Success or failure, always send notifications
    notifyBuild(currentBuild.result)
    sh("docker-compose down -v")
    sh("docker network prune -f")
}

docker-compose:

version: "2"
services:
  db_setup:
    networks:
      - default
    build: .
    depends_on:
      - db
    container_name: db_setup
    image: db_setup
    command: python asteri_analytics_db.py
    working_dir: /asteri_analytics_db/asteri_analytics_db
  db:
    networks:
      - default
      - outside
    image: mongo:3.6.3
    container_name: mongo_db
    restart: always
    environment:
      MONGO_DATA_DIR: /data/db
      MONGO_LOG_DIR: /dev/null
      MONGO_INITDB_ROOT_USERNAME: ###edited####
      MONGO_INITDB_ROOT_PASSWORD: ###edited####
    ports:
      - 27017:27017
networks:
  outside:
    external:
      name: aa_backend_network

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案

要将使用docker-compose构建的所有镜像推送到注册表,可以使用docker-compose push命令。确保您已经登录并获得推送到注册表的授权。

以下是推送所有镜像的步骤:
1. 在Jenkinsfile中,确保已经创建了网络并启动了容器。使用docker network create命令创建网络,并使用docker-compose up -d --build命令启动容器。
2. 在Docker Compose文件中,定义了两个服务 db_setupdbdb_setup服务是您要推送的镜像,db服务是其依赖的镜像。
3. 在Jenkinsfile的Docker Push阶段中,使用docker-compose build命令构建所有镜像。
4. 使用docker-compose push命令将所有镜像推送到注册表。

请确保您已经登录到注册表,并具有推送镜像的权限。

以上是使用docker-compose将多个容器推送到注册表的解决方案。根据您的需求,您可以将每个镜像推送到不同的仓库,只需在Docker Compose文件中为每个服务指定不同的镜像名称即可。

希望对您有所帮助!

正文完