docker+jenkins实现自动化部署

使用 docker+jenkins 实现自动化部署个人网站,只记录过程和可能要注意的点。

Docker

docker 是一个应用容器引擎,可以理解为是操作系统上的软件包(容器)的集合,其容器之间相互独立,没有接口,完全使用沙箱机制隔离,容器内部的软件可以映射端口到宿主机。

使用 docker 可以更便捷的管理软件,性能开销也极低。

安装 docker

[官方文档](https://docs.docker.com/install/linux/docker-ce/centos/)

  • 注意:centos8 系统安装时可能会出现containerd.io装不上的情况,这是要自己手动安装
dnf install <https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm>

使用 docker 安装 jenkins

docker pull jenkinsci/blueocean

我这里使用的得是官方推荐的 LTS 版本,其他版本你可以使用 docker search jenkins 查看

运行 jenkins

docker run \\
  -u root \\
  --rm \\
  -d \\
  -p 8080:8080 \\
  -p 50000:50000 \\
  -v /home/jenkins:/var/jenkins_home \\
  -v /var/run/docker.sock:/var/run/docker.sock \\
  jenkinsci/blueocean

解释:

  • docker run: docker 运行镜像命令
  • u root: 使用 root 用户运行,这样我们就没有权限问题
  • -rm: 容器关闭时自动删除容器(可选)
  • d: 后台运行
  • p 8080:8080: 主机端口:容器端口,这样我们就能使用 ip:8080 端口访问到容器的 8080 端口。
  • p 50000:50000: 主站通信。
  • v /home/jenkins:/var/jenkins_home: 映射 jenkins 工作目录到宿主主机的/home/jenkins下,这样我们在双方下的操作都会映射到对方的文件里
  • v var/run/docker.sock:/var/run/docker.sock: 映射 docker 的主进程,这样我们就可以在 jenkins 内部调用宿主 docker 的 api

修改 jenkins 下载源

国内使用 jenkins 会有插件下载失败的情况,我们可以换成清华园的地址

  1. cd /home/jenkins/updates 进入工作目录
sed -i 's/http:\\/\\/updates.jenkins-ci.org\\/download/https:\\/\\/mirrors.tuna.tsinghua.edu.cn\\/jenkins/g' default.json && sed -i 's/http:\\/\\/www.google.com/https:\\/\\/www.baidu.com/g' default.json

修改 default.json 中的源地址

创建 nodejs 中的 Dockerfile

# 基础镜像为node:10.10.0
FROM node:10.10.0

# 创建容器内的项目存放目录
RUN mkdir -p /home/node
# 设定工作目录
WORKDIR /home/node

#  将Dockerfile当前目录下所有文件拷贝至容器内项目目录并安装项目依赖
COPY . /home/node
# 修改npm源地址
RUN npm config set registry <http://registry.npm.taobao.org>

RUN npm install

# 容器对外暴露的端口号
EXPOSE 8081

# 执行命令
ENTRYPOINT [ "npm", "start" ]

部署思路

我们部署的思路是 jenkins 连接 ssh 服务器(需要 Publish Over SSH)进入到/home/jenkins/workspace/website-node 工作目录里运行 docker build 和 docker run 命令,理解思路即可。

78467379-ce3cf300-773e-11ea-81e4-066a58754d28

单页面的部署思路

以上是 nodejs 的部署,前端单页面使用 linux scp 命令直接上传到 nginx 静态页面目录下,因为服务器在 npm install 的时候经常崩溃(内存太小),所以退而求其次,在本地 build 之后把 dist 目录上传到服务器上。

npm run build && scp -r build/* root@xxx.xxx.xxx.xxx:/home/nginx/www
posted @ 2025-11-17 18:31  jinzhepro  阅读(45)  评论(0)    收藏  举报