Docker 安装jenkins与tomcat
使用Docker安装jenkins或tomat并不难,但是试想让多个java与应用共享相同的jdk,那对于空间和管理上都是极大的方便,实际上docker就有这种功能。
环境:
Ubuntu 16.04
jdk 1.8
tomcat8.0.44
jenkins2.7.1
docker-engine-1.6.0
一、jdk镜像
/home/data/sshd_jenkins/jdk-install.sh
#!/bin/bash #################jdk源码安装################## #http://www.oracle.com/technetwork/java/javase/downloads/index.html mkdir /docker_tmp tar -zxf jdk-8u121-linux-x64.tar.gz -C /docker_tmp mv /docker_tmp/jdk1.8.0_121/ /docker_tmp/jdk cd /docker_tmp cat >Dockerfile <<HERE FROM busybox MAINTAINER shuiguang "shuiguang@github.com" LABEL Description="jdk volume" Vendor="Jlive" Version="1.8" VOLUME ["/opt/jdk"] ADD . /opt HERE docker build -t jdk1.8 .
提示:VOLUME一定要标明,否则tomcat等应用无法挂载,当然也可以直接通过映射本地的jdk给到java容器
执行结果如下:
[root@localhost sshd_jenkins]# sh jdk-install.sh Sending build context to Docker daemon 371.4MB Step 1/5 : FROM busybox ---> c30178c5239f Step 2/5 : MAINTAINER shuiguang "shuiguang@github.com" ---> Using cache ---> 54282af00ff3 Step 3/5 : LABEL Description "jdk volume" Vendor "Jlive" Version "1.8" ---> Running in cc20ce64a0c2 ---> 391ad833dd94 Removing intermediate container cc20ce64a0c2 Step 4/5 : VOLUME /opt/jdk ---> Running in 97fbf12c413b ---> 27ad45421d04 Removing intermediate container 97fbf12c413b Step 5/5 : ADD . /opt ---> 9aaf3df02225 Removing intermediate container 408321112ae0 Successfully built 9aaf3df02225 Successfully tagged jdk1.8:latest [root@localhost sshd_jenkins]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE jdk1.8 latest 0ea4d6f45a37 4 seconds ago 371MB busybox latest c30178c5239f 3 weeks ago 1.11MB
二、jenkins镜像
1、tomcat镜像
/home/data/sshd_jenkins/tomcat-install.sh
#!/bin/bash #################tomcat源码安装################## rm -rf /docker_tmp/* #wget http://apache.fayea.com/tomcat/tomcat-8/v8.0.44/bin/apache-tomcat-8.0.44.tar.gz tar -zxf apache-tomcat-8.0.44.tar.gz -C /docker_tmp #wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz tar -zxf apache-maven-3.5.0-bin.tar.gz -C /docker_tmp mv /docker_tmp/apache-tomcat-8.0.44/ /docker_tmp/tomcat mv /docker_tmp/apache-maven-3.5.0/ /docker_tmp/maven cd /docker_tmp cat >Dockerfile <<HERE FROM ubuntu:14.04 MAINTAINER shuiguang "shuiguang@github.com" LABEL Description="Apache tomcat" Vendor="Jlive" Version="8" ADD . /opt # Define ENV ENV LANG=C.UTF-8 ENV CATALINA_HOME=/opt/tomcat ENV MAVEN_HOME=/opt/maven ENV PATH=\$CATALINA_HOME/bin:\$MAVEN_HOME/bin:\$PATH # install sshd RUN echo "nameserver 114.114.114.114" > /etc/resolv.conf RUN echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list RUN echo "deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list RUN apt-get update RUN apt-get -y install git RUN apt-get -y install openssh-server RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd RUN sed -ri 's/PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config RUN sed -ri 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa # Exporse ports EXPOSE 8080 # Volume VOLUME ["\$CATALINA_HOME/conf","\$CATALINA_HOME/logs","\$CATALINA_HOME/webapps","\$CATALINA_HOME/work"] # Define entrypoint ENTRYPOINT ["catalina.sh", "run"] HERE docker build -t tomcat8 .
提示:VOLUME一定要标明,否则tomcat等应用无法挂载,当然也可以直接通过映射本地的jdk给到java容器
执行结果如下:
[root@localhost sshd_jenkins]# sh tomcat-install.sh Sending build context to Docker daemon 13.93MB Removing intermediate container ee247bdb40ec Step 23/26 : RUN ssh-keygen -q -N "" -t rsa -f /root/.ssh/id_rsa ---> Running in 5081dd7aede6 ---> 1e30872cf678 Removing intermediate container 5081dd7aede6 Step 24/26 : EXPOSE 8080 ---> Running in 1202adf54e27 ---> ca28fd3f667a Removing intermediate container 1202adf54e27 Step 25/26 : VOLUME $CATALINA_HOME/conf $CATALINA_HOME/logs $CATALINA_HOME/webapps $CATALINA_HOME/work ---> Running in fe9ccf340aef ---> 1cb4b14263be Removing intermediate container fe9ccf340aef Step 26/26 : ENTRYPOINT catalina.sh run ---> Running in 368f34ec996e ---> efbb2370bce0 Removing intermediate container 368f34ec996e Successfully built efbb2370bce0 Successfully tagged tomcat8:latest [root@localhost sshd_jenkins]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat8 latest 5e22343b9f01 18 seconds ago 201MB jdk1.8 latest 0ea4d6f45a37 2 minutes ago 371MB ubuntu 14.04 4a2820e686c4 3 weeks ago 188MB busybox latest c30178c5239f 3 weeks ago 1.11MB 8 minutes ago 371MB 25 seconds ago
运行tomat,将默认的配置文件拷贝到宿主机
docker run -tid --restart=always --name jdk1.8 jdk1.8 docker run -tid --restart=always \ -e JAVA_HOME=/opt/jdk \ --volumes-from jdk1.8 \ --name mytomcat \ tomcat8 mkdir -p /opt/tomcat docker cp mytomcat:/opt/tomcat/conf /opt/tomcat/ docker rm -f mytomcat
上面创建的镜像只是为了给jenkins一个tomcat容器环境,并不是最终的tomcat。
为了方便jenkins执行shell命令,除了jdk1.8,还需引入busybox:
运行jdk和shell容器:
docker run -tid --restart=always --name shell busybox
将tomcat容器跑起来
docker run -tid --restart=always \ -e JAVA_HOME=/opt/jdk \ -e JAVA_OPTS="-Xms64m -Xmx128m -XX:MaxPermSize=16m" \ -p 8090:8080 \ --memory-swappiness=1 \ --ulimit nofile=20480:40960 \ --volumes-from shell \ --volumes-from jdk1.8 \ -v /opt/tomcat/conf:/opt/tomcat/conf \ -v /opt/tomcat/logs:/opt/tomcat/logs \ --name tomcat_jenkins \ tomcat8
跑起来之后,便可以从浏览器访问8090端口查看tomcat是否运行正常。
2、部署jenkins应用
/home/data/sshd_jenkins/jenkins-install.sh
#!/bin/bash #################jenkins war包安装################## rm -rf /docker_tmp/* #wget http://ftp.tsukuba.wide.ad.jp/software/jenkins/war-stable/2.7.1/jenkins.war cd /docker_tmp mkdir jenkins unzip -q /home/data/sshd_jenkins/jenkins.war -d jenkins cat >Dockerfile <<HERE FROM busybox MAINTAINER shuiguang "shuiguang@github.com" LABEL Description="jenkins" Vendor="Jlive" Version="2.7.1" VOLUME ["/opt/tomcat/webapps/jenkins"] RUN mkdir -p /opt/tomcat/webapps ADD . /opt/tomcat/webapps HERE docker build -t jenkins .
注意:jenkins只是tomcat中的一个应用,打包时是精细打包,所以挂载卷的时只会把/opt/tomcat/webapps/jenkins挂到/opt/tomcat/webapps下,tomcat默认的demo是不会覆盖的。
正常环境下,应该是通过ant脚本等自动编译打包工具将代码自动打成war包,再将war包打成docker volume发布
执行结果如下:
[root@localhost sshd_jenkins]# sh jenkins-install.sh Sending build context to Docker daemon 81.66MB Step 1/6 : FROM busybox ---> c30178c5239f Step 2/6 : MAINTAINER shuiguang "shuiguang@github.com" ---> Using cache ---> 54282af00ff3 Step 3/6 : LABEL Description "jenkins" Vendor "Jlive" Version "2.7.1" ---> Running in b09afe7ed38b ---> 21b973c95428 Removing intermediate container b09afe7ed38b Step 4/6 : VOLUME /opt/tomcat/webapps/jenkins ---> Running in 4d324d9c2555 ---> c44c4e8bc6f5 Removing intermediate container 4d324d9c2555 Step 5/6 : RUN mkdir -p /opt/tomcat/webapps ---> Running in b987c999a779 ---> 599b3dfe1fb8 Removing intermediate container b987c999a779 Step 6/6 : ADD . /opt/tomcat/webapps ---> 7a86b12102cf Removing intermediate container e3f5ce8a7e5f Successfully built 7a86b12102cf Successfully tagged jenkins:latest
启动jenkins容器(实际上就是一个文件系统而已)
docker run -tid --restart=always --name jenkins_container jenkins
启动tomcat_jenkins容器(这个才是真正的jenkins应用)
docker rm -f tomcat_jenkins docker run -tid --restart=always \ -e JAVA_HOME=/opt/jdk \ -e JAVA_OPTS="-Xms64m -Xmx128m -XX:MaxPermSize=16m" \ -p 8090:8080 \ --memory-swappiness=1 \ --ulimit nofile=20480:40960 \ --volumes-from shell \ --volumes-from jdk1.8 \ --volumes-from jenkins_container \ -v /opt/tomcat/conf:/opt/tomcat/conf \ -v /opt/tomcat/logs:/opt/tomcat/logs \ --name tomcat_jenkins \ tomcat8
执行成功后,稍后访问http://192.168.64.128:8090/jenkins/
如果访问不了可能是由于防火墙的问题,我们先将8080, 8090等端口开放
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 8090 -j ACCEPT
大概1分钟后可以看到jenkins正在启动中...,启动完成后会提示输入密码,此密码在容器中,需要拷贝到宿主机查看
docker cp tomcat_jenkins:/root/.jenkins/secrets/initialAdminPassword . cat initialAdminPassword
填写密码,默认安装就可以了。
在Getting Started页面需要填写管理员用户名、密码、邮箱。填写完成后进入到主界面。
3、下载maven,git,以及jenkins插件
点击“系统管理”——“Global Tool Configuration”
JDK安装
别名 jdk1.8
JAVA_HOME /opt/jdk
Git
Path to Git executable /usr/bin/git(没安装就用apt-get install 安装或者勾选自动安装)
Maven安装
Name maven3.5
MAVEN_HOME /opt/maven
jenkins默认不支持maven项目,需要点击“系统管理”——“管理插件”——“可选插件”
安装“Maven Integration plugin”和“Publish Over SSH”这两个插件直接安装。
4、配置jenkins
点击“系统管理”——“系统设置”进行配置,需要修改以下项目:
Jenkins Location
系统管理员邮件地址 如果启用邮件功能,该值一定要填写,而且该值必须和使用SMTP认证的用户名保持一致(神一般的逻辑)
邮件通知 smtp.163.com
勾选使用SMTP认证情况下
用户名
密码
Publish over SSH
Key
填写从jenkins_tomcat中cat出/root/.ssh/id_rsa的内容
SSH Servers(后面还需要将jenkins_tomcat容器的/root/.ssh/id_rsa.pub内容写入到tomcat_container的/root/.ssh/authorized_keys)
Name 填写tomcat
Hostname 填写tomcat
Username填写root
Remote Directory填写tomcat容器的临时目录,例如/home/data/jenkins
Add credentials
Add Domain
Domain Name 随便填,例如git.oschina.net
Description随便填,例如码云
adding some credentials?
Kind SSH Username with private key
Scope 默认
Username 随便填,例如oschina
Private Key 勾选Enter directly并输入认证公钥(tomcat_jenkins容器的/root/.ssh/id_rsa.pub内容)
如果该公钥不存在,生成方式可以参照gitlab,步骤是在tomcat_jenkins上执行ssh-keygen -t rsa -C "你在git.oschina.net上的 用户名"然后将此公钥粘贴到git.oschina.net的公钥认证输入框。
项目配置:
项目名称
描述
源码管理选择“Git”
Git
Repository URL 填写你在git.oschina.net上的git地址
Credentials 选择前面你新建的Credentials
构建环境:
勾选Send files or execute commands over SSH after the build runs
SSH Publishers
SSH Server
Name 填写你的目标tomcat容器昵称,随便填也可以
Transfers
Source files 填写当前jenkins打包后的war包名称,例如**/ucenter.war(**通配多级目录)
Exec command填写目标tomcat容器shell脚本绝对路径,例如/opt/auto_deploy.sh ucenter-web
构建设置:
勾选E-mail Notification
Recipients:填写接收构建信息的邮箱地址
注:如果使用smtp.163.com发送邮件不成功,可以尝试勾选“使用SSL协议”,不需要填写端口。
5、保存jenkins配置为镜像
安装完插件后,将当前tomcat_jenkins提交为镜像
docker commit tomcat_jenkins tomcat_jenkins
尝试删除tomcat_jenkins容器,并重新通过tomcat_jenkins镜像实例化新的容器,这时候tocmat8镜像可以删了
docker commit tomcat_jenkins tomcat_jenkins docker rm -f tomcat_jenkins docker run -tid --restart=always \ -e JAVA_HOME=/opt/jdk \ -e JAVA_OPTS="-Xms64m -Xmx128m -XX:MaxPermSize=16m" \ -p 8090:8080 \ --memory-swappiness=1 \ --ulimit nofile=20480:40960 \ --volumes-from shell \ --volumes-from jdk1.8 \ --volumes-from jenkins_container \ -v /opt/tomcat/conf:/opt/tomcat/conf \ -v /opt/tomcat/logs:/opt/tomcat/logs \ --name tomcat_jenkins \ tomcat_jenkins docker rmi tomcat8
后面的空间不够了,docker安装tomcat部分:
http://blog.zhengshuiguang.com/linux/docker-tomcat.html
本文地址:http://blog.zhengshuiguang.com/linux/docker-jenkins.html
转载随意,但请附上文章地址:-)
评论已关闭