官方文档:https://docs.docker.com/install/linux/docker-ce/centos/
第一步:安装依赖软件(yum-utils提供yum-config-manager包,用来管理yum配置文件)
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
第二步:添加docker-ce安装源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
第三步:安装docker-CE 默认安装的是最新版本的稳定版 yum install docker-ce
如果要安装特定版本的docker-CE请使用如下命令格式: install docker-ce-
查看版本列表请使用如下命令: yum list docker-ce --showduplicates | sort -r
第四步:配置 配置docker服务开机启动 systemctl enable docker
配置镜像加速器(镜像加速地址我用的是阿里云的)
#修改镜像地址后,复制下面一坨直接丢掉centos执行
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的阿里云镜像地址"]
}
EOF
#配置生效
systemctl daemon-reload
#重启docker
systemctl restart docker
#验证镜像加速器是否修改成功
docker info
配置阿里云的docker镜像加速器
docker常用命令如下:
#CENTSOS7开启docker
systemctl start docker
#docker查看所有容器(运行的和没运行的)
docker ps -a
#删除容器
docker container rm 5156e78a4e9e
#docker查看镜像
docker images
#docker删除镜像
docker rmi e76a6ec6e22e
#docker 进入容器
docker exec -it 775c7c9ee1e1 /bin/bash
本文使用docker版的jekins,方便
docker pull jenkins/jenkins:lts #这个是安装最新版的jenkins,如果安装旧版本,很多插件安装不上,docker环境下升级又比较麻烦。
docker inspect ba607c18aeb7 #查看是否是最新版
mkdir -p /export/service/jenkins_home #创建一个jenkins目录
chmod 777 -R /export/service/jenkins_home #jekins会使用jekins用户往该目录写入数据
mkdir -p /export/service/repository/ #创建maven仓库,用于构建maven项目下载的jar包
chmod 777 -R /export/service/repository/ #必须授权,要不然没有权限写
docker run -d -p 9988:8080 -p 50000:50000 \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/mv:/usr/bin/mv \
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java \
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 \
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \
-v /export/service/repository:/export/service/repository \
-v jenkins:/export/service/jenkins_home \
-v /etc/localtime:/etc/localtime \
--name jenkins jenkins/jenkins:lts
#参数简介
-v /usr/bin/docker:/usr/bin/docker 有了这个配置在docker容器内部可以使用docker命令
-v /usr/bin/mv:/usr/bin/mv 有了这个配置在docker容器内部可以使用mv命令
-v /usr/java/jdk1.8.0_131/bin/java:/usr/java/jdk1.8.0_131/bin/java,这个配置可以再在docker容器内部使用java命令(直接使用宿主机的java)
-v /usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131 这个配置会在docker容器创建/usr/java/jdk1.8.0_131目录,并映射到宿主机的java_home目录
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9这个配置会在docker容器创建/export/service/apache-maven-3.3.9目录,并映射到宿主机的maven_home目录
/export/service/repository:/export/service/repository这个配置会在docker容器创建/export/service/repository目录,并映射到宿主机的/export/service/repository目录
-v /etc/localtime:/etc/localtime 使用宿主机的时间(宿主机和容器时间同步)
-d 后台运行镜像
-p 9988:8080 将镜像的8080端口映射到服务器的9988端口
-p 50000:50000 将镜像的50000端口映射到服务器的50000端口
--name jenkins 给容器起一个别名
为什么要挂载(映射)目录:docker通过镜像创建并启动容器,一个容器就是一个独立隔离的沙箱,所以并不能识别服务器上的环境配置,需要我们在启动容器时通过-v参数命令将服务器目录挂载到docker容器指定目录!拿jenkins举例来说,如果你是用docker运行的jenkins,那么是不识别你服务器上配置的jdk环境和maven环境的,你在jenkins里系统配置中去填写你服务器上的jdk目录和maven目录以及配置文件目录,后面项目构建是肯定会报错不识别的。jenkins所在的容器是docker某个具体容器,它只能识别出这个容器里的东东,容器自己有一套独立完整的目录,可以通过命令 docker exec -it containerID /bin/bash 进入指定的容器id查看(containerID换成你的docker容器id)。
#如果目录挂载完成,启动了容器,又想修改挂载怎么办?
参考:https://blog.csdn.net/zedelei/article/details/90208183
在浏览器输入http://ip:9988进入Jenkins登录页面。页面会提示你到服务器的指定位置获取初始化密码。
这一步大概要等个5-10分钟。
注意:因为我们是docker版的jenkins,所以这个路径不是服务器的路径,而是容器内的路径。我们可以通过如下命令从容器中获取到初始化密码。
docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword
在页面输入密码,点击Continue,进入插件安装页面。安装推荐插件就好。
选择【安装推荐的插件】,如下图,耐心等待各插件安装完成。
注意:这步插件下载速度快慢取决于服务器的网速,与本地网络环境无关
安装好插件后,系统会提示建立管理员账户。
管理->Global Tool Configuration
配置JDK,
注意:这里配置的是jekins的jdk,由于jekins挂载目录和宿主机目录相同,所以别以为是宿主机目录,一定是jekins的jdk目录,jekins的jdk目录映射到宿主机目录
/usr/java/jdk1.8.0_131:/usr/java/jdk1.8.0_131
配置maven
注意:这里配置的是jekins的maven,由于jekins挂载目录和宿主机目录相同,所以别以为是宿主机目录,一定是jekins的maven目录,jekins的maven目录映射到宿主机目录
-v /export/service/apache-maven-3.3.9:/export/service/apache-maven-3.3.9 \
gitlab+jekins是企业套餐,但是为了偷懒就不安装gitlab了 直接使用码云
详细信息参考:https://gitee.com/help/articles/4193
6.3.1 添加凭据
6.3.2 码云官网上,生成一个令牌
添加maven插件
怎么添加账户,看下面截图:
意思是:满足什么条件就触发我们任务的构建
下图我选择的是,只要有代码提交到码云就开始构建(其实这种方式不太推荐,万一提交到码云的是半成品代码,触发构建就会报错)
建议:最好选择手动构建,言外之意这里什么都不勾选
Build指定源代码拉下来之后需要做的事情,Post Steps指定编译好之后需要做的事情。
上面填写的Goals and options命令
clean install -Dmaven.test.skip=true
进行下面的操作前,要先添加[ssh]插件
编译之后要做的事情 1:将编译后的jar传送到目的地服务器【使用SSH Publishers】 2:运行jar,启动工程【使用shell脚本】
SSH Publishers是专业将编译好的产物传送到目的地的插件。使用插件之前需要配置插件,如下图:
配置你【码云】上的代码与配置的SSH服务进行关联
# 必须加,不然jekins会kill 应用程序
export BUILD_ID=dontKillMe
# 应用存放地址
APP_HOME=/export/server/
# 应用名称
APP_NAME=jdy_manager_web-0.0.1-SNAPSHOT.jar
# 获取PID
PID=$(ps -ef |grep ${APP_NAME} |grep -v grep |awk '{print $2}')
if [ -z "${PID}" ]; then
echo "进程不存在启动进程"
cd ${APP_HOME}
chmod 777 ${APP_NAME}
source /etc/profile
#防止nohup.out文件过大
cat /dev/null > nohup.out
nohup java -jar ${APP_NAME} --spring.profiles.active=dev &
if [ $? = 0 ];then
sleep 1
tail -n 50 nohup.out
fi
echo "finished!!!"
else
echo "进程已经存在杀死进程"
kill -9 ${PID}
echo "${APP_NAME} process stop, PID=${PID}"
cd ${APP_HOME}
chmod 777 ${APP_NAME}
source /etc/profile
#防止nohup.out文件过大
cat /dev/null > nohup.out
nohup java -jar ${APP_NAME} --spring.profiles.active=dev &
if [ $? = 0 ];then
sleep 1
tail -n 50 nohup.out
fi
echo "finished!!!"
fi
#编译好的jar在docker容器里面,具体目录如下:
#进入容器
docker exec -it 89f7dc9c71a7 /bin/bash
#切换到workspace目录
jenkins@89f7dc9c71a7:/$ cd /var/jenkins_home/workspace/
jenkins@89f7dc9c71a7:~/workspace$ ls
项目首次启动时,docker虚拟机会联网下载项目所依赖jar包
启动成功后,尝试远程访问服务器上的工程,效果如下
总结