本文介绍在CentOS 7环境下,从零搭建Docker容器引擎与Jenkins持续集成工具,并结合Node.js应用实现自动化部署的完整流程。内容涵盖Docker基础安装与配置、Node.js项目Docker化、Jenkins容器化部署及插件配置,以及通过GitHub Webhook实现代码提交后自动构建与发布的详细步骤。
环境准备与前置条件
本案例采用CentOS 7操作系统
- 建议读者具备Docker使用经验
- 建议读者熟悉Linux命令行操作
Docker 基础安装与配置
一、Docker环境配置
1.1 Docker概述
Docker是开源应用容器引擎,可将应用及依赖打包为可移植容器,发布至各类Linux主机或实现虚拟化。容器采用沙箱机制,彼此隔离无接口
1.2 Docker架构原理
Docker本质为轻量级Linux系统,容器由镜像创建,关系类似面向对象编程中对象与类。架构示意图如下:

1.3 Docker虚拟机管理命令

1.4 Docker安装步骤
更新软件源库
yum update -y
执行Docker安装
yum install docker -y
1.5 启动Docker服务
启动Docker服务进程
service docker start
其他相关命令
service docker restart // 重启docker服务
service docker stop // 停止docker服务
Node.js 应用 Docker 化
二、Node.js应用配置
可使用Koa框架编写Hello World项目,并在项目根目录创建Dockerfile文件
Dockerfile为文本文件,包含构建指令。每条指令构建一层,内容描述该层构建方式
以下为笔者Dockerfile配置示例,熟悉Docker者可自行调整
# Dockerfile
# 使用node做为镜像
FROM node
# 在容器中创建该目录
RUN mkdir -p /home/project
# 设置容器的工作目录为该目录
WORKDIR /home/project
# 向外提供3000端口
EXPOSE 3000
# 容器创建完成后执行的命令
CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js
将项目发布至GitHub,为后续Jenkins部署做准备
Jenkins 容器化部署与配置
三、Jenkins环境配置
搜索Jenkins镜像
docker search jenkins

拉取最新版Jenkins镜像
docker pull jenkins:latest
启动Jenkins容器
sudo docker run -d -u 0 --privileged --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest
命令参数解析:
- -u 0
指定传入root用户ID,覆盖容器内置账号
- -v /root/jenkins_node1:/var/jenkins_home
将容器内/var/jenkins_home目录映射至宿主机/root/jenkins_node1
- --name jenkins_node1
指定容器名称为jenkins_node1
- -p 49003:8080
端口映射,将容器8080端口映射至宿主机49003端口
- --privileged
授予容器最高权限
完整命令释义
运行jenkins:latest镜像,命名为jenkins_node1,使用root账号覆盖容器账号,赋予最高权限,映射/var/jenkins_home至宿主机/root/jenkins_node1,映射容器8080端口至宿主机49003端口
检查Jenkins状态
执行后等待数十秒,直至Jenkins容器启动初始化完成
检查宿主机/root/jenkins_node1目录下是否生成大量文件
浏览器访问localhost:49003验证Jenkins是否启动成功
出现如下界面即表示启动成功:

获取初始密码
cat /root/jenkins_node1/secrets/initialAdminPassword
复制输出密码并粘贴至页面,点击Continue进入下一步

点击Install

等待安装完成,进入管理员账号创建界面

填写账号密码后点击Save(需填完所有信息),进入首页

配置Jenkins,进入系统管理页面管理插件

选择SSH插件

直接安装,等待完成并返回首页
进入系统管理 -> 系统配置

滚动至底部Publish over SSH区域

选择高级,输入服务器IP、用户名、密码,点击Test Configuration
显示Success表示配置无误,保存并返回首页
新建项目

输入项目名称

选择源码管理,使用Git管理,输入GitHub仓库地址,添加GitHub用户凭据



完成设置后进入构建环境选择

执行构建命令
sudo docker stop nodeapp || true \
&& sudo docker rm nodeapp || true \
&& cd /root/jenkins_node1/workspace/node \
&& sudo docker build --rm --no-cache=true -t node - < Dockerfile \
&& sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project node
保存后点击立即构建
构建成功后,在宿主机目录/root/jenkins_node1/workspace/node下可见项目文件
浏览器访问docker服务器地址localhost:3000即可访问页面
若启动失败,可查看日志确定原因
docker logs nodeapp
GitHub Webhook 自动部署配置
四、Jenkins与GitHub自动部署
若需本地代码Push至GitHub后Jenkins自动拉取最新代码重新部署,请继续操作
服务器需具备外网访问能力,本地测试可尝试内网穿透工具如natapp或ngrok
在首页点击用户
导航路径:首页 -> 用户 -> root

点击设置 -> 显示API Token

复制API Token值
返回首页 -> node -> 配置 -> 构建触发器,粘贴至身份验证令牌字段

登录GitHub项目页面,打开Setting -> Webhooks -> Add webhooks

添加Webhook

修改Jenkins安全策略
Jenkins首页,选择系统管理-->Configure Global Security(系统设置下方选项)进行如下设置

至此,已完成git push后Jenkins自动构建与部署配置
Docker 常用命令参考
五、Docker常用命令汇总
对Docker感兴趣者可进一步了解并深入学习
镜像相关操作
查询镜像
docker search [name]
拉取镜像
docker pull [name]
导入镜像
docker load < /home/node.tar.gz
导出镜像
docker save > /home/node.tar.gz
查询所有镜像
docker images
删除镜像
docker rmi [name]
修改镜像名称
docker tag docker.io/node node
容器相关操作
启动容器
# 运行并进入交互模式
docker run -it --name myjava java bash
# 在后台运行
docker run -d --name myjava java
端口映射
docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash
目录映射
docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash
进入后台运行的容器
docker exec -it name bash
设置自动重启
docker run --restart=always -it --name myjava -p 9000:8085 -p 9000:8086 java bash
暂停容器
docker pause node
停止暂停容器
docker unpause node
停止容器
docker stop node
启动容器
docker start -i node
查看容器
docker ps -a
Docker网段相关操作
创建网段
docker network create net1
查看网段信息
docker network inspect net1
删除网段信息
docker network rm net1
总结
六、总结
笔者近期学习Node.js,尝试通过Docker+Jenkins实现自动化部署流程。历经一天调试,最终配置成功。此前使用pm2管理Node项目及自动化部署,有兴趣者可参考。使用pm2自动化部署Node项目。本文旨在总结笔记,不足之处敬请指正
以上就是本文全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站