最终的目的,是为了完成docker环境的Jenkins搭建使用,并从gitlab上获取代码,打出war包,war包通过目录挂载的方式,在tomcat容器中使用,总体思路如下
一、CentOS7下使用Docker
首先确保已经执行了yum源切换到阿里云,参考上一节内容
1.卸载已经安装的docker
yum list installed | grep docker
yum -y remove docker-engine.x86_64(根据上一步结果卸载)
2.安装Docker
参考:https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.58b01991Cb2eOJ
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
docker version
3.镜像搜索
如果直接使用docker pull,默认是从官方镜像走,速度也还行,但是国内也有两家可以使用,阿里云和网易云,如下:
阿里云
https://dev.aliyun.com/search.html
网易云-镜像中心
https://c.163yun.com/hub#/m/home/
官方Dockerhub
https://hub.docker.com/explore/
比如在阿里云上面搜索centos,可以搜索到如下
可以直接执行,pull这个镜像
docker pull registry.cn-hangzhou.aliyuncs.com/centos7-lnmp/centos7-lnmp
启动镜像docker run –it imageid
4.容器修改后提交为镜像(目前很少用到,可忽略)
在宿主机器上执行docker ps,查看正在运行的镜像实例
执行docker commit d5e2 centos7sshd,即可提交一个镜像并命名为centos7sshd,即可将容器内的修改提交为一个新的镜像,可以用此制作其他容器。
5.创建支持SSH服务的CentOS镜像(目前很少用到,可忽略)
l 启动sshd服务
[root@b5926410fe60 /]# yum install passwd openssl openssh-server -y
启动sshd:
# /usr/sbin/sshd -D
这时报以下错误:
[root@ b5926410fe60 /]# /usr/sbin/sshd
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
执行以下命令解决:
[root@b5926410fe60 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
[root@b5926410fe60 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@b5926410fe60 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''
然后,修改 /etc/ssh/sshd_config 配置信息:
UsePAM yes 改为 UsePAM no
UsePrivilegeSeparation sandbox 改为 UsePrivilegeSeparation no
[root@b5926410fe60 /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
[root@b5926410fe60 /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config
修改完后,重新启动sshd
[root@b5926410fe60 /]# /usr/sbin/sshd –D
l 修改root密码,执行passwd修改即可
l Commit此容器修改(参考上一节内容)
l 启动新的镜像
docker run -it -p 10022:22 80d /usr/sbin/sshd –D
l 在宿主机器上登陆
ssh root@localhost -p 10022
6.通过Dockerfile创建tomcat7容器(基于ubuntu镜像)
1)通过dockerfile,add war包、jdk方式制作镜像
所需内容,可以从CSDN下载:https://download.csdn.net/download/sdfiiiiii/10693805
使用dockerfile制作镜像。整体思路是:先要准备好apache-tomcat-8.0.53.tar.gz、jdk-8u144-linux-x64.tar.gz、demo.war(用于试验的war包,事先准备好),用网易云的ubuntu14.04镜像为基础,将tomcat、jdk和war包add到镜像中,并最后在容器启动的时候执行run.sh用于启动tomcat。
创建tomcat8-jdk目录,并按下图放好文件。
vim Dockerfile
FROM hub.c.163.com/library/ubuntu:14.04
MAINTAINER liukun <[email protected]>
# now add java and tomcat support in the container
ADD jdk-8u144-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.53.tar.gz /usr/local/
# configuration of java and tomcat ENV
ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.53
ENV CATALINA_BASE /usr/local/apache-tomcat-8.0.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# container listener port
EXPOSE 8080
# ADD war into tomcat under webapps directory
ADD demo.war /usr/local/apache-tomcat-8.0.53/webapps
ADD run.sh /usr/local/
ENTRYPOINT ["/usr/local/run.sh"]
run.sh文件内容(此文件需要设置执行权限)
#!/bin/bash
/usr/local/apache-tomcat-8.0.53/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.0.53/logs/catalina.out
2)构建镜像build
docker build -t tomcat8-jdk1.8-ubuntu14.04:1.0.0 .
注意最后有一个“.”
3)启动容器docker run(使用-v挂载主机目录,将tomcat日志输出到宿主机)
将主机上的/usr/local/tomcat/logs目录挂载到容器的/usr/local/apache-tomcat-8.0.53/logs目录(容器中的日志将会写回到宿主机上;--privileged=true要加,否则会报Permission denied,这个参数位置也不能放到最后)
docker run –itd -p 8080:8080 -v /usr/local/tomcat/logs:/usr/local/apache-tomcat-8.0.53/logs --privileged=true tomcat8-jdk1.8-ubuntu14.04:1.0.0
4)访问tomcat
浏览器访问http://192.168.74.154:8080/demo/sample
5)也可以通过-v挂载目录的方式,将war包目录在docker run的时候映射到容器的webapps目录下,启动容器即可
Dockerfile内容
FROM hub.c.163.com/library/ubuntu:14.04
MAINTAINER liukun <[email protected]>
# now add java and tomcat support in the container
ADD jdk-8u144-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.0.53.tar.gz /usr/local/
# configuration of java and tomcat ENV
ENV JAVA_HOME /usr/local/jdk1.8.0_144
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.0.53
ENV CATALINA_BASE /usr/local/apache-tomcat-8.0.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# container listener port
EXPOSE 8080
ADD run.sh /usr/local/
ENTRYPOINT ["/usr/local/run.sh"]
run.sh内容:
#!/bin/bash
/usr/local/apache-tomcat-8.0.53/bin/startup.sh && tail -f /usr/local/apache-tomcat-8.0.53/logs/catalina.out
Build镜像:
docker build -t tomcat-war-out:1.0.0 .
启动容器
docker run -it -p 8080:8080 -v /usr/local/tomcat/logs:/usr/local/apache-tomcat-8.0.53/logs -v /home/liukun/tomcat/webapps:/usr/local/apache-tomcat-8.0.53/webapps --privileged=true tomcat-war-out:1.0.0
注意:-p参数不能放在最后,否则启动是ok的,但是不能访问
6)其他常用命令
docker rm -f $(docker ps -a | grep "tomcat*" | awk '{print $1}')
批量删除无用的镜像(镜像名包含关键字)
docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字
7.整合Jenkins进行打包发布流程
整体思路:使用Jenkins容器打包,scp war包到tomcat容器宿主机,挂载war包目录到tomcat容器中,并重启tomcat容器
分解动作:
l Jenkins是一个docker容器,拉取代码并打war包(step1)
l war包scp到目标tomcat所在宿主机上,通过脚本scp到目标主机(step2)
l server.xml预先生成好,做成共享目录,挂载到容器conf目录(step3)
l war包目录挂载到容器里面(step4)
l 启动/重启容器(step5)
8.Jenkins using docker
对应上面的step1:目标:搭建Jenkins的docker环境,并从git上拉取代码并打出war包
需要准备的环境jdk1.8+tomcat8+jenkins2.138.1war包+maven3.5.0
l 所需内容,可以从CSDN下载:https://download.csdn.net/download/sdfiiiiii/10693920
l 不直接选用Jenkins镜像,否则安装完成之后,会有一些Jenkins插件找不到;下载2.138.1版本Jenkins的war包,通过tomcat8+jdk1.8+Ubuntu14.04安装
1)准备好的目录结构如下
2)构建镜像build
docker build -t jenkins-tomcat:1.0.0 .
3)启动容器docker run
sudo docker run -it -p 8080:8080 -p 50000:50000 --name jenkins3 --privileged=true-v /home/liukun/jenkins:/var/jenkins_home -v /root/.jenkins:/root/.jenkins jenkins-tomcat:1.0.0
4)访问Jenkins并完成配置
http://192.168.74.154:8080/jenkins2.138.1
l 通过docker exec –it jenkins3 /bin/bash进入到容器中,查看文件/root/.jenkins/secrets/initialAdminPassword内容,来获取admin密码
l 安装完成Jenkins,如果项目是maven+gitlab项目,那么需要安装maven插件和gitlab插件;进行“系统管理->插件管理->可选插件”勾选Maven Integration和gitlab两个插件进行安装
l Ubuntu软件源加速(用于安装git和maven)
由于默认的软件安装源速度较慢,需要切换到国内源
先执行apt-get install apt-transport-https
然后参考https://www.linuxidc.com/Linux/2017-11/148627.htm进行切换,之后再进行后续操作
l 由于镜像中没有加入git,所以需要通过apt-get install git进行安装
l Maven通过挂载目录的方式使用
Ø /home/liukun/jenkins:/var/jenkins_home,将maven包放在宿主机的/home/liukun/jenkins,即可在容器内/var/jenkins_home访问并使用
Ø Jenkins启动之后需要配置maven所在目录
在“系统管理->全局工具配置”找到MAVEN;里面的目录,是我们通过目录挂载到容器里面的,可以直接使用,maven的settings.xml中,mirror配置到阿里云
l Jenkins构建项目的时候报错,需要高版本jdk支持
高版本的Jenkins需要至少使用jdk1.8,所以在“系统管理->全局工具配置”找到JDK并按如下配置(jdk已经通过docker run命令挂载到了容器中)
重新构建即可
l Jenkins的项目构建参数如下
至此,Jenkins using docker完成,可以通过gitlab打出war包
后续step2、3、4、5,其实均已通过上述内容分步骤有所体现。