Contos7.X 下使用docker+jenkins+springcloud安装部署文档

概述

本文档所有部署均使用docker镜像进行部署。

Docker安装与更新

1. 储存库方式安装docker【官方推荐

  • 更新 yum 缓存:

    yum makecache fast

  • 卸载docker:

    yum remove docker
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

  • 安装必要工具:

    yum install -y yum-utils
    device-mapper-persistent-data
    lvm2

     1.yum-utils提供了yum-config-manage效用
     2.devicemapper存储驱动程序则需要device-mapper-persistent-data和lvm2这两个工具支持
    
  • 设置稳定存储库:

    yum-config-manager
    –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

      1.国内服务器 推荐使用阿里镜像库
    
  • 安装docker-ce:

    yum install docker-ce docker-ce-cli containerd.io

      1.安装的为最新版本的docker-ce
    
  • 设置开机启动:

    systemctl start docker
    systemctl enable docker

  • 更新docker:

    参照储存库方式按装docker

按装mysql数据库

  • 拉取mysql镜像

    docker pull mysql

  • 运行mysql容器

    docker run \
    -p :8000:3306
    –name server_mysql
    -v /zoo/mysql/conf:/etc/mysql/conf.d
    -v /zoo/mysql/logs:/logs
    -v /zoo/mysql/data:/var/lib/mysql
    -e MYSQL_ROOT_PASSWORD=123456
    -d mysql

      -p:映射本机8000端口到容器3306端口
      --name:容器名称 server_mysql
      -v:(配置卷) 映射本机/zoo/mysql/conf目录到容器/etc/mysql/conf.d容器
      -v:(日志卷) 映射本机/zoo/mysql/logs目录到容器/logs目标
      -v:(数据卷) 映射本机/zoo/mysql/data目录到容器/var/lib/mysql目录
      -e:初始化密码
      -d:后台运行
      mysql: 使用mysql镜像
    
  • 登陆mysql容器

    docker exec –it server_mysql bash # 进入容器命令行
    mysql –uroot –p 123456 # 登陆mysql

      现在使用远程连接工具可能失败: 
      		plugin caching_sha_password could not be loaded
      mysql安全机制致使首次登陆需重置密码
      		ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    
  • 配置阿里云安全组规则
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档

安装jenkins

  • 拉取jenkins镜像【jenkinsci/blueocean版本】

    docker pull jenkinsci/blueocean

  • 运行jenkins容器

	docker run \
  			--rm \
		    -u root \
  			-p 8001:8080 \
  			-d \
			--name server_jenkins\
  			-v /zoo/jenkins:/var/jenkins_home \
  			-v /var/run/docker.sock:/var/run/docker.sock \
  			-v /zoo/project:/home \
  			jenkinsci/blueocean
	--rm :容器运行退出后自动删除容器
	-d :后台运行(首次不要以后台运行因为要获取密码)
	-v:jenkins安装文件由本机/zoo/jenkins目录映射到/var/jenkins_home 目录
	-v:jenkins部署的项目由本机/zoo/project目录映射到/home目录
  • 登录jenkins控制台
  1. 获取初始密码:
    执行安装jenkins容器时,复制命令行间多排星号之间字符串。
  2. 初始化jenkins
    浏览器输入 服务器ip:jenkins端口,按照提示操作。
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档
  1. 创建流水线
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档
  2. 流水线配置
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档Contos7.X 下使用docker+jenkins+springcloud安装部署文档
  3. 项目Jenkinsfile编写

    Jenkinsfile文件在项目的跟目录中。Jenkinsfile文件可以定义:
    使用maven参数化打包项目;
    使用docker命令构建镜像;
    使用dockerfile文件构建镜像;

pipeline {
    agent any
    // 环境变量
    environment {
        // 阿里云docker仓库凭证 :这是jenkins管理界面中定义的凭证名称为“aliyun-docker”
        FRESH_CREDS = credentials('aliyun-docker')
        BUILD_NUMBER = credentials('aliyun-docker')
        // 仓库docker 地址、镜像名、容器名称
        FRESH_HOST = 'registry.cn-hongkong.aliyuncs.com'
        DOCKER_IMAGE = 'meeek/fresh-eureka'
        DOCKER_CONTAINER = 'fresh-eureka'
    }
    stages {
        // 拉取项目 - 使用docker maven打包
        stage('Maven Build') {
            agent {
                docker {
                    image 'maven:3-jdk-8-alpine'
                    // maven仓库位置映射
                    args '-v /zoo/maven/.m2:/root/.m2'
                }
            }
            // maven打包命令
            steps {
                sh 'mvn -B -DskipTests clean package install'
                echo '-->> -->>maven打包构建完成!'
            }
        }
        // dockerfile构建镜像 -- 推送到远程仓库
        stage('Docker Build') {
            agent any
            steps {
                 script {
                    // 停止并删除列表中有 ${DOCKER_CONTAINER} 的容器
                    def container = sh(returnStdout: true, script: "docker ps -a | grep $DOCKER_CONTAINER | awk '{print \$1}'").trim()
                    if(container.size() > 0){
                        sh "docker ps -a | grep $DOCKER_CONTAINER | awk  '{print \$1}' | xargs docker stop"
                        sh "docker ps -a | grep $DOCKER_CONTAINER | awk '{print \$1}' | xargs docker rm"
                        echo '-->> 1#停止并删除容器 -->>'
                    }
                    // 删除列表中有 ${DOCKER_IMAGE} 的镜像
                    def image = sh(returnStdout: true, script: "docker images | grep $DOCKER_IMAGE | awk '{print \$3}'").trim()
                    if(image.size() > 0){
                        sh "docker images | grep $DOCKER_IMAGE | awk '{print \$3}' | xargs docker rmi"
                        echo '-->> 2#停止并删除镜像 -->>'
                    }
                 }
                // 构建镜像并运行容器
                sh "docker build -t ${DOCKER_IMAGE}:${env.BUILD_ID} ."
                sh "docker run -p 9010:9010 --name ${DOCKER_CONTAINER} -d ${DOCKER_IMAGE}:${env.BUILD_ID}"
                echo '-->> 3#构建成功-->>'
            }
        }
    }
}
	注意:只需要更改环境变量中的“DOCKER_IMAGE”, “DOCKER_CONTAINER”,“docker端口号”
  1. 项目dockerfile编写
	FROM openjdk:8-jdk
	MAINTAINER Meeek <351264833@qq.com>
	VOLUME /zoo/project/fresh/fresh-eureka
	ADD target/fresh-eureka-1.0-SNAPSHOT.jar app.jar
	RUN bash -c 'touch /app.jar'
	EXPOSE 9010
	ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
	注意:只需要更改ADD中的包名称
  1. 运行流水线
    Contos7.X 下使用docker+jenkins+springcloud安装部署文档