docker的安装直接访问以下地址安装即可:https://linzhefeng23.blog.csdn.net/article/details/78411199
1.1、 permission denied 问题安装完成docker以后,我们使用jenkins用户执行docker images会出现如下的错误信息:
这是因为docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
首先我们创建用户组(默认我们在安装docker的时候已经给安装了不过要是没有就添加下),如下所示:
groupadd docker
接着将jenkins添加到docker用户组
gpasswd -a jenkins docker
最后更新用户组
newgrp docker
接着我们就可以使用jenkins用户愉快的使用docker了。
2、安装基础镜像基础镜像基于CentOs里面包含了我们的JDK的环境。
2.1、拉取中央仓库的CentOs镜像直接执行以下代码,然后拉取我们的中央仓库的CentOs镜像到我们的本地的docker仓库
docker pull centos
完成以后我们执行以下命令
docker images
我们会看到如下的结果,则说明我们的镜像就拉取成功了。
2.2、安装JDK基础镜像 2.2.1、编写DockerFileFROM docker.io/centos MAINTAINER linzf <282245889@qq.com> ENV LANG zh_CN.UTF-8 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone RUN mkdir -p /usr/java/jdk1.8 ADD jdk1.8.0_191 /usr/java/jdk1.8 ENV JAVA_HOME /usr/java/jdk1.8 ENV PATH $PATH:$JAVA_HOME/bin
然后将我们的jdk和这个DockerFileJdk文件上传到:/home/jenkins/app/baseJdk这个目录,如下所示:
然后我们使用jenkins用户进入到/home/jenkins/app/baseJdk使用以下命令解压我们的JDK:
tar -xvf jdk.tar2.2.2、制作镜像
我们使用jenkins用户进入到/home/jenkins/app/baseJdk目录,然后使用以下命令来打包我们的基础镜像:
docker build -t "base-jdk8" . -f DockerfileJdk
然后我们会看到如下的执行结果则说明我们创建基础镜像成功了:
3、发布并启动项目我们直接打开我们前面的jenkins配置的vote-million-image这个流水线,然后在配置中如下所示的代码:
pipeline {
agent any
environment {
APP_NAME = "vote-million"
VERSION_NAME = "voteMillionVersion"
WORK_PATH = "/home/jenkins/.jenkins/workspace/vote-million-image"
DOCKER_LOG_PATH = "/home/app/docker/vote-million/log/"
MAPPER_LOG_PATH = "/home/jenkins/app/logs/vote-million/"
MAPPING_PORT = "8081:8080"
}
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'lazyboyl', url: 'https://github.com/lazyboyl/vote-million.git']]])
}
}
stage('构建工程') {
steps {
echo '开始编译构建'
sh 'cd ${WORK_PATH} && mvn clean package -Dmaven.test.skip=true'
}
}
stage('清理镜像信息'){
steps {
echo '停止启动的容器'
sh 'docker ps |grep "${APP_NAME}-*" |awk '{print $1}' | xargs -r docker stop'
echo '删除停止的容器'
sh 'docker ps -a |grep "${APP_NAME}-*" |awk '{print $1}' | xargs -r docker rm'
echo '删除镜像'
sh 'docker images | grep "${APP_NAME}-*" | awk '{print $1":"$2}' | xargs -r docker rmi'
}
}
stage('生成生成生DockerFile文件') {
steps {
echo '构建镜像'
sh '''cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && lowerVersion=${version,,} && cd ${WORK_PATH}/target && cat > Dockerfile << EOF
FROM base-jdk8
MAINTAINER linzf <282245889@qq.com>
RUN mkdir -p ${DOCKER_LOG_PATH}
ADD ${APP_NAME}-$version.jar /home/app/app.jar
CMD java -jar -Xms128m -Xmx1024m /home/app/app.jar'''
sh 'cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && cd ${WORK_PATH}/target && docker build -t "${APP_NAME}-${version,,}" .'
}
}
stage('启动项目'){
steps {
echo '启动APP'
sh 'cd ${WORK_PATH} && version=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'` && docker run -d -u root -p ${MAPPING_PORT} -v ${MAPPER_LOG_PATH}:${DOCKER_LOG_PATH} --privileged=true --name ${APP_NAME}-${version,,} ${APP_NAME}-${version,,}'
}
}
}
}
然后我们可以直接构建我们的项目了
3.1、xargs语法https://www.runoob.com/linux/linux-comm-xargs.html
3.2、sed语法https://www.runoob.com/linux/linux-comm-sed.html



