You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS上配置Jenkins服务器与Docker服务器实现通信及流水线构建?

实现AWS上Jenkins与Docker实例通信及镜像构建推送流水线

一、配置两台实例的网络通信

1. 安全组规则设置

  • 给Jenkins实例的安全组添加入站规则:允许来自Docker实例私有IP(或对应安全组)的SSH端口(默认22)访问;若需Web管理Jenkins,保留8080端口的外部访问权限。
  • 给Docker实例的安全组添加入站规则:允许来自Jenkins实例私有IP(或对应安全组)的SSH端口(22)访问;测试环境可临时开放Docker daemon默认端口2375,生产环境必须使用TLS加密的2376端口。

2. 配置Jenkins到Docker实例的SSH免密登录

在Jenkins实例生成SSH密钥对:

ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/jenkins_docker_key

将公钥复制到Docker实例的授权列表:

ssh-copy-id -i ~/.ssh/jenkins_docker_key.pub ec2-user@<Docker实例私有IP>

测试免密登录是否成功:

ssh -i ~/.ssh/jenkins_docker_key ec2-user@<Docker实例私有IP>

二、配置Jenkins与Docker实例的连接

1. 安装Jenkins Docker插件

进入Jenkins「插件管理」页面,搜索并安装Docker Pipeline插件,用于流水线中操作Docker资源。

2. 选择连接方式二选一

方式一:TCP连接Docker daemon

  • 进入Jenkins「系统管理」→「系统配置」,找到「Docker」模块。
  • 点击「添加Docker服务器」,选择「TCP连接」:
    • 名称:自定义(如Docker-EC2)
    • URI:tcp://<Docker实例私有IP>:2375(生产环境替换为tcp://<Docker实例私有IP>:2376并配置TLS证书)
    • 点击「测试连接」确认连通性。

方式二:SSH远程节点连接更安全,无需开放Docker端口

  • 进入Jenkins「系统管理」→「节点管理」→「新建节点」:
    • 节点名称:Docker-Node
    • 选择「固定节点」,设置远程工作目录(如/home/ec2-user/jenkins_work)
    • 启动方式选择「通过SSH启动代理」,输入Docker实例私有IP,关联提前在Jenkins「凭据」中添加的SSH私钥
    • 保存后确认节点状态为在线。

三、创建Jenkins流水线构建并推送镜像到DockerHub

1. 准备代码与Dockerfile

在代码仓库中添加Dockerfile示例:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
CMD ["nginx", "-g", "daemon off;"]

2. 创建Jenkins流水线项目

  • 新建「流水线」类型项目。
  • 在「流水线」模块选择「Pipeline script from SCM」,配置代码仓库地址(如GitHub/GitLab),指定流水线脚本路径(如Jenkinsfile)。

3. 编写Jenkinsfile示例

对应TCP连接方式

pipeline {
    agent any
    environment {
        DOCKERHUB_CREDS = credentials('dockerhub-credentials') // Jenkins中提前配置的DockerHub凭据ID
        IMAGE_NAME = '你的DockerHub用户名/nginx-demo'
        IMAGE_TAG = 'latest'
    }
    stages {
        stage('拉取代码') {
            steps {
                git url: '你的代码仓库地址', branch: 'main'
            }
        }
        stage('构建Docker镜像') {
            steps {
                script {
                    docker.withServer('tcp://<Docker实例私有IP>:2375') {
                        docker.build("${IMAGE_NAME}:${IMAGE_TAG}")
                    }
                }
            }
        }
        stage('推送镜像到DockerHub') {
            steps {
                script {
                    docker.withServer('tcp://<Docker实例私有IP>:2375') {
                        docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-credentials') {
                            docker.image("${IMAGE_NAME}:${IMAGE_TAG}").push()
                        }
                    }
                }
            }
        }
    }
}

对应SSH节点连接方式

pipeline {
    agent {
        label 'Docker-Node' // 指定之前创建的Docker节点标签
    }
    environment {
        DOCKERHUB_CREDS = credentials('dockerhub-credentials')
        IMAGE_NAME = '你的DockerHub用户名/nginx-demo'
        IMAGE_TAG = 'latest'
    }
    stages {
        stage('拉取代码') {
            steps {
                git url: '你的代码仓库地址', branch: 'main'
            }
        }
        stage('构建镜像') {
            steps {
                sh "docker build -t ${IMAGE_NAME}:${IMAGE_TAG} ."
            }
        }
        stage('登录DockerHub') {
            steps {
                sh "docker login -u ${DOCKERHUB_CREDS_USR} -p ${DOCKERHUB_CREDS_PSW}"
            }
        }
        stage('推送镜像') {
            steps {
                sh "docker push ${IMAGE_NAME}:${IMAGE_TAG}"
            }
        }
        stage('清理资源') {
            steps {
                sh "docker logout && docker rmi ${IMAGE_NAME}:${IMAGE_TAG}"
            }
        }
    }
}

4. 配置DockerHub凭据

在Jenkins「凭据管理」中添加「用户名和密码」类型凭据,ID设为dockerhub-credentials,填入你的DockerHub账号信息。

四、测试流水线

保存项目配置后点击「立即构建」,查看控制台输出确认各阶段执行成功,最终验证DockerHub上是否出现推送的镜像。

内容的提问来源于stack exchange,提问作者Pratibha Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:23:26