首页 > Linux > Docker 安装jenkins与tomcat

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

Credentials

   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

转载随意,但请附上文章地址:-)

标签:docker jdk jenkins tomcat

相关文章

评论已关闭