Contos7.X 下使用docker+jenkins+springcloud安装部署文档
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
lvm21.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.repo1.国内服务器 推荐使用阿里镜像库
-
安装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';
-
配置阿里云安全组规则
安装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控制台
- 获取初始密码:
执行安装jenkins容器时,复制命令行间多排星号之间字符串。 - 初始化jenkins
浏览器输入 服务器ip:jenkins端口,按照提示操作。
- Jenkins创建项目:
- 创建流水线
- 流水线配置
- 项目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端口号”
- 项目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中的包名称
- 运行流水线