目录

前言

一、搭建环境

二、使用步骤

1.引入库

2.读入数据

二、使用步骤

总结


 


前言

在Centos上使用docker(docker-compose)部署开发环境(nginx,jenkins,mysql),并在jenkins中持续集成发布springboot项目(maven,git)、web前端项目。


 

一、搭建环境

docker官方安装教程

docker-compose官方安装教程

自己写的一键安装脚本

tip: 用国内docker-compose下载源更快

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

服务器提前安装好docker环境,使用docker-compose来部署开发所需的环境。

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    volumes:
      - /usr/local/docker/data/jenkins/jenkins_home:/var/jenkins_home #数据文件挂载
      - /etc/localtime:/etc/localtime #同步时间
      - /var/run/docker.sock:/var/run/docker.sock#为了可以在docker容器中使用宿主机docker命令
      - /usr/bin/docker:/usr/bin/docker
    environment:
      - 'TZ="Asia/Shanghai"'
      - 'JAVA_OPTS=-Duser.timezone=Asia/Shanghai'#解决jenkins时差问题
    ports:
      - 8080:8080
      - 50000:50000
  mysql:
    image: mysql:5.7
    container_name: mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root #设置root帐号密码
    ports:
      - 3306:3306
    volumes:
      - /usr/local/docker/mysql/db:/var/lib/mysql #数据文件挂载
      - /usr/local/docker/mysql/conf:/etc/mysql/conf.d #配置文件挂载
      - /usr/local/docker/mysql/log:/var/log/mysql #日志文件挂载
  nginx:
    image: nginx:1.17.10
    container_name: nginx
    volumes:
      - /usr/local/docker/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf #配置文件挂载
      - /usr/local/docker/data/nginx/html:/usr/share/nginx/html #静态资源根目录挂载
      - /usr/local/docker/data/nginx/log:/var/log/nginx #日志文件挂载
      - /usr/local/docker/data/public/cert/:/var/cert #密匙目录
    ports:
      - 80:80
      - 443:443

tips:

1.提前拷贝nginx.conf到指定目录

2.docker 运行后, 执行docker logs -f jenkins时报错:

touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

需要修改下目录权限, 因为当映射本地数据卷时,/home/docker/jenkins目录的拥有者为root用户,而容器中jenkins user的uid为1000
执行如下命令即可:

chown -R 1000:1000 /usr/local/data_center/docker/data/jenkins/jenkins_home

 

二、springboot工程

1.DockerFile文件

在src/main下新建docker文件夹(目录随意,后面对应的路径随之更改即可),并创建DockerFile文件,代码如下:

# 该镜像需要依赖的基础镜像
FROM java:8
  # 将当前目录下的jar包复制到docker容器的/目录下
ADD storage-0.0.1.jar /storage.jar
  # 运行过程中创建一个api.jar文件
RUN bash -c 'touch /storage.jar' && \
echo "Asia/Shanghai" > /etc/timezone
  # 声明服务运行在8082端口
EXPOSE 8082
  # 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar","/storage.jar"]
  # 指定维护者的名字
MAINTAINER mouxiaoshi

三、Jenkins搭建

Jenkins官网安装教程

1.运行成功后访问Jenkins

运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码,可以使用以下命令从容器启动日志中获取管理密码:

docker logs jenkins

或者在 /jenkins_home/secrets/initialAdminPassword 文件中查看初始密码

2.修改插件下载地址

默认下载地址都是海外地址,初次安装非常慢,建议先替换地址

修改default.json

上面的地址改了之后,插件下载还是会很慢找到 /jenkins_home/updates/default.json文件

使用vi编辑文件,如下,替换所有插件下载的url

:1,$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g

替换连接测试url

:1,$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g

tips:记得先查看下文件中的插件下载地址,是否与上文中的“updates.jenkins-ci.org”匹配

笔者这里Json里下载地址为:https://updates.jenkins.io/download/

3.安装所需的插件

Maven Integration plugin

Deploy to container Plugin

docker-build-step

Publish Over SSH

NodeJS Plugin

4.配置Jdk

cd 到 存放docker-compose文件的目录,然后进入到Jenkins容器中

docker-compose -f env.yml exec jenkins /bin/bash

查看java安装的路径

which java

docker部署集群服务器 docker集成部署_mysql

docker部署集群服务器 docker集成部署_docker_02

5.git

docker部署集群服务器 docker集成部署_docker_03

6.maven

docker部署集群服务器 docker集成部署_mysql_04

7.node js

docker部署集群服务器 docker集成部署_java_05

 

四、搭建springboot项目

docker部署集群服务器 docker集成部署_docker_06

docker部署集群服务器 docker集成部署_docker部署集群服务器_07

maven构建 跳过test

clean package -Dmaven.test.skip=true

docker部署集群服务器 docker集成部署_docker_08

最终执行shell命令将镜像打包到docker中并启动

#!/bin/sh
#docker 镜像/容器名字或者jar名字 这里都命名为这个
SERVER_NAME=storage
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#镜像id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')
#当前日期
DATE=`date +%Y%m%d`

#清除旧容器
if [ -n "$CID" ]; then
echo "存在$SERVER_NAME容器,CID=$CID"
echo "停止旧容器"
docker stop $SERVER_NAME
echo "删除旧容器"
docker rm $SERVER_NAME
fi

# 清除旧镜像
if [ -n "$IID" ]; then
echo "存在$SERVER_NAME镜像,IID=$IID"
echo "删除镜像"
docker rmi $IID
fi

#构建镜像
echo "开始构建镜像"
docker build -f ./src/main/docker/Dockerfile -t $SERVER_NAME:v${DATE} ./target
echo "构建镜像成功!"


# 运行docker容器
echo "创建并启动$SERVER_NAME容器..."
docker run --name $SERVER_NAME -d -p 8082:8082 $SERVER_NAME:v${DATE}
echo "$SERVER_NAME容器启动完成"

docker部署集群服务器 docker集成部署_docker部署集群服务器_09

 

五、搭建web项目

docker部署集群服务器 docker集成部署_docker部署集群服务器_10

git

docker部署集群服务器 docker集成部署_mysql_11

node环境

docker部署集群服务器 docker集成部署_nginx_12

构建执行shell

# 查看版本信息
npm -v
# 解决存放在Github上的sass无法下载的问题
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass
# 将镜像源替换为淘宝的加速访问
npm config set registry https://registry.npm.taobao.org
# 安装项目依赖
npm install
# 项目打包
npm run build

docker部署集群服务器 docker集成部署_java_13

链接宿主机的ssh把项目部署到docker中的nginx中,需提前在配置中添加ssh service

docker部署集群服务器 docker集成部署_nginx_14

添加构建后续步骤

docker stop nginx
echo '----stop nginx----'
rm -rf /usr/local/docker/data/nginx/html/web
echo '----rm html dir----'
cp -r /usr/local/docker/data/jenkins/jenkins_home/workspace/data-center-web/dist /usr/local/docker/data/nginx/html/web
echo '----cp dist dir to html dir----'
docker start nginx
echo '----start nginx----'

docker部署集群服务器 docker集成部署_java_15

 


总结

步骤不会特别难,善于搜索可解决大部分问题,文章只做自己搭建的记录,目录请按自己定义的修改,技术大佬口下留情!