如何在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
相关产品推荐
相关产品推荐

