文章

打包服务器docker化与jenkins集成

本文详细记录了从CentOS 6.1搭建基础镜像开始,通过离线安装方式完成必要软件包的安装,逐步实现服务器的Docker化,并最终集成Jenkins的过程。涵盖软件下载、镜像构建、环境配置、Jenkins安装等关键步骤。

打包服务器docker化与jenkins集成

文章信息

  • 原文链接:https://jiayq.blog.csdn.net/article/details/103786656
  • 发布时间:2020-01-04 18:09:34
  • 阅读量:764
  • 分类:docker同时被 2 个专栏收录, 订阅专栏, jenkins
  • 标签:#docker, #centos, #dockerfile, #自定义dockerimage, #docker+jenkins

摘要

文章浏览阅读764次。本文详细记录了从CentOS 6.1搭建基础镜像开始,通过离线安装方式完成必要软件包的安装,逐步实现服务器的Docker化,并最终集成Jenkins的过程。涵盖软件下载、镜像构建、环境配置、Jenkins安装等关键步骤。


打包服务器docker化

  • 1.基础镜像
    • 1.1安装系统
      • 1.2打包系统
      • 1.3导入镜像
  • 2.下载软件
    • 2.1准备
      • 2.2 设置yum源
      • 2.3 libxml2
      • 2.4 libxslt-devel
      • 2.5 net-snmp
      • 2.6 net-snmp-utils
      • 2.7 net-snmp-devel
      • 2.8 dos2unix
      • 2.9 zlib-devel
      • 2.10 libxml2
      • 2.11 gcc
      • 2.12 gcc-c++
      • 2.13 automake
      • 2.14 make
      • 2.15 libtool
      • 2.16 byacc
      • 2.17 bison
      • 2.18 flex
      • 2.19 zlib
  • 3.安装软件
  • 4.安装oracle
  • 5. env
  • 6. gsoap 2.7.7
  • 7. java
  • 8. jenkins
  • 9. dockerfile合并
    • 9.1 6->5
      • 9.2 5->4
      • 9.3 4->3
      • 9.4 3->2
      • 9.5 2->1
  • 10. 总结

1.基础镜像

1.1安装系统

首先将CentOS-6.1-x86_64-bin-DVD1安装至虚拟机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择最小安装。
在这里插入图片描述
等待完成即可。

1.2打包系统

首先设置linux网络,可以使用ssh连接centos6-64-base

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0

保存,使用

1
service network restart

重启网络
在这里插入图片描述
然后查看IP,并使用ssh连接
在这里插入图片描述

在ssh中使用如下命令打包系统

1
2
tar -cvpf /tmp/base.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev --exclude=ru
n --exclude=boot /

说明,/tmp/base.tar是打包后的文件存放的目录与名称;
–directory是打包的路劲
–exclude是忽略的目录
/是将根目录作为上下文传入
执行完成后会生成
在这里插入图片描述
base.tar文件。
然后将这个base.tar拷贝出来,准备工作就完成了。
(虚拟机就没有用了,可以关闭了,或者删除掉)

1.3导入镜像

既然是要做docker镜像的,所以需要把1.2中的base.tar放到装有docker的Linux中。
然后执行

1
docker import /tmp/base.tar centos6-64:base

在这里插入图片描述

2.下载软件

2.1准备

在之前安装的虚拟机中安装yum-plugin-downloadonly

1
yum install yum-plugin-downloadonly -y

然后对整个yum进行更新

1
yum clean all && yum update -y

在update时会出现异常:
在这里插入图片描述
使用

1
yum -y remove matahari*

去除依赖
在这里插入图片描述
然后在更新(时间比较长,等待完成即可)

2.2 设置yum源

因为官方的yum源在国外,且速度比较慢,所以使用阿里和163的yum源。
首先下载wget

1
yum install wget -y

在这里插入图片描述
下载阿里和163的yum源

1
2
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

(阿里和163的yum源随便一个即可)
在这里插入图片描述
然后执行:

1
yum clean all && yum makecache && yum update -y

2.3 libxml2

http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/libxml2-2.7.6-21.el6_8.1.x86_64.rpm

2.4 libxslt-devel

1
yum install libxslt-devel --downloadonly --downloaddir=/tmp libxslt-devel -y

在这里插入图片描述

2.5 net-snmp

1
yum install net-snmp --downloadonly --downloaddir=/tmp net-snmp -y

在这里插入图片描述

2.6 net-snmp-utils

1
yum install net-snmp-utils --downloadonly --downloaddir=/tmp net-snmp-utils -y

在这里插入图片描述

2.7 net-snmp-devel

1
yum install net-snmp-devel --downloadonly --downloaddir=/tmp net-snmp-devel -y

在这里插入图片描述

2.8 dos2unix

1
yum install dos2unix --downloadonly --downloaddir=/tmp dos2unix -y

在这里插入图片描述

2.9 zlib-devel

1
yum install zlib-devel --downloadonly --downloaddir=/tmp zlib-devel -y

在这里插入图片描述

2.10 libxml2

这个需要手动下载,然后放在其他文件一起。
下载地址:
http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/libxml2-2.7.6-21.el6_8.1.x86_64.rpm

2.11 gcc

1
yum install gcc --downloadonly --downloaddir=/tmp gcc -y

在这里插入图片描述

2.12 gcc-c++

1
yum install gcc-c++ --downloadonly --downloaddir=/tmp gcc-c++ -y

在这里插入图片描述

2.13 automake

1
yum install automake --downloadonly --downloaddir=/tmp automake -y

在这里插入图片描述

2.14 make

手动下载,地址
http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/make-3.81-23.el6.x86_64.rpm

2.15 libtool

1
yum install libtool --downloadonly --downloaddir=/tmp libtool -y

在这里插入图片描述

2.16 byacc

1
yum install byacc --downloadonly --downloaddir=/tmp byacc -y

在这里插入图片描述

2.17 bison

1
yum install bison --downloadonly --downloaddir=/root/tmp/ bison -y

2.18 flex

1
yum install flex --downloadonly --downloaddir=/root/tmp/ flex -y

在这里插入图片描述

2.19 zlib

http://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/zlib-1.2.3-29.el6.x86_64.rpm

总计需要安装71个软件,其具体的软件名称与版本如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.安装软件

将2下载的文件放到docker服务器中。
在docker服务器的rpm文件夹同级目录中创建文件dockerfile
(注意:必须是rpm文件夹的同级目录,因为docker build需要使用rpm同级目录作为构建上下文,同时不建议将rpm放在根目录下,如果放在根目录下表示将docker )
然后编写dockerfile文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#based as centos6-64:base os
FROM centos6-64:base
# auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
# user root
USER root
# copy rpm files
COPY /rpm /rpm
# install rpm
RUN find /rpm -type f|xargs rpm -i --force --nodeps
# clean rpm
RUN find /rpm -type f|xargs rm -rf
# /bin/bash cmd
CMD ["/bin/bash"]

在这里插入图片描述

FROM 表示将centos6-64:base作为本次构建的基础镜像。
MAINTAINER表示作者以及邮箱。
COPY表示将我们上传的rpm文件夹以及里面的文件全部拷贝到容器中的rpm目录中
RUN表示执行shell命令。
shell命令分为两部分,第一部分是遍历rpm文件夹中所有的安装包
第二部分是使用rpm -i命令安装遍历得到的所有软件包,忽略检测,强制安装。
CMD 表示执行cmd命令,执行/bin/bash命令,否则启动异常,无法启动容器进行验证。
在这里插入图片描述

4.安装oracle

基于3生成的镜像编写新的dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
#based as centos6-64:base os
FROM centos6-64:v0
#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
#create oracle
RUN mkdir /opt/oracle
#COPY oracle files
COPY /file/oracle /opt/oracle
#change jur
RUN chmod -R 755 /opt/oracle
# /bin/bash cmd
CMD ["/bin/bash"]

然后进行构建
在这里插入图片描述

5. env

在4的基础镜像上,编写如下dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#based as centos6-64:v0 os
FROM centos6-64:v1

#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>

# set env
ENV alias vi=vim
ENV PATH=$PATH:$HOME/bin

# SYSTEM ENV
ENV LANG=en_US
ENV LC_ALL=en_US
ENV EDITOR=vi
ENV MANPATH=$MANPATH:/usr/share/man:/usr/share/locale/man
ENV LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:/usr/local/lib:/usr/local/ssl/lib:/usr/local/apr/lib:.
ENV PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/ucb:/usr/sfw/bin:.
ENV CC=gcc

# JAVA ENV
#ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-1.el6_10.x86_64/jre
#ENV CLASSPATH=.:$JAVA_HOME/lib/rt.jar
#ENV PATH=$PATH:$JAVA_HOME/bin

# ORACLE ENV
ENV ORACLE_BASE=/opt/oracle
ENV ORACLE_HOME=$ORACLE_BASE/instantclient_11_2
ENV ORACLE_SID=starboss
ENV PATH=$ORACLE_HOME/sdk:$ORACLE_HOME:$PATH
ENV LD_LIBRARY_PATH=$ORACLE_HOME/:/lib64:/usr/lib64
ENV CLASSPATH=$CLASSPATH:$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
ENV NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

# LIBXML2 ENV
ENV LIBXML2_HOME=/usr
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
ENV PATH=$PATH:$ORACLE_HOME/lib:$ORACLE_HOME/bin:$PATH:$LIBXML2_HOME/bin

#gcc head file and lib path
ENV LOCAL_LIB_PATH=/usr/local/lib
ENV LIBRARY_PATH=$LIBXML2_HOME/lib:$ORACLE_HOME
ENV CPLUS_INCLUDE_PATH=$ORACLE_HOME/sdk/include:$ORACLE_HOME/rdbms/public:$LIBXML2_HOME/include/libxml2
ENV C_INCLUDE_PATH=$LIBXML2_HOME/include/libxml2

ENV ulimit -S -c unlimited
ENV OS=LINUX

# /bin/bash cmd
CMD ["/bin/bash"]

在这里插入图片描述
在这里插入图片描述

6. gsoap 2.7.7

在6的基础上进行构建,dockerfile如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#based as centos6-64:v1 os
FROM centos6-64:v2
#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
#use add command to copy and unzip gsoap file
ADD /file/gsoap_2.7.7.tar.gz /root/
#change jur
RUN chmod +x /root/gsoap-2.7
#change workdir
WORKDIR /root/gsoap-2.7
#configure
RUN ./configure
#make
RUN make
#make install
RUN make install
# /bin/bash cmd
CMD ["/bin/bash"]

在这里插入图片描述

7. java

1
2
3
4
5
6
7
8
9
10
11
12
#based as centos6-64:base os
FROM centos6-64:v3
#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
#add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /
# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin
# /bin/bash cmd
CMD ["/bin/bash"]

在这里插入图片描述

8. jenkins

首先去jenkins的官网下载jenkins的war包
http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.204.1/jenkins.war
在这里插入图片描述
将下载的jenkins.war包放到docker 服务器中
然后编写dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#based as centos6-64:v1 os
FROM centos6-64:v4
#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
# mkdir /tmp,jenkins will be used /tmp file
RUN mkdir /tmp
# use copy command to copy and unzip gsoap file
COPY /file/jenkins.war /
# use 8080 port
EXPOSE 8080
# start jenkins 
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]
# workdir /root
WORKDIR /root

在这里插入图片描述
启动jenkins镜像,验证jenkins是否安装成功
在这里插入图片描述
然后访问
在这里插入图片描述
正常不是这样的,应该是需要去密码文件,以管理员登录,然后下载插件,创建用户等等。

我这个是之前启动的jenkins时,保留的/root/.jenkins文件夹,这样不用每次重启镜像都需要重新下载插件了。
但是如果两个jenkins的版本不一样,即使保留了jenkins文件夹,仍然需要重新下载插件的。
到此,整个环境已经搞定。

9. dockerfile合并

之前每一小步骤都分为1个dockerfile是因为如果一个小步骤出现问题,不太容易差错。现在可以证明每一个小步骤都是ok的,因此,将之前的dockerfile合并为1个。
采用向前合并。
现在我们有1,2,3,4,5,6个dockerfile

9.1 6->5

首先将6与5进行合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# based as centos6-64:base os
FROM centos6-64:v3
# auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>
# mkdir /tmp, jenkins will be used /tmp file
RUN mkdir /tmp
# add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /
# copy jenkins.war
COPY /file/jenkins.war /
# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin
# use 8080 port
EXPOSE 8080
# start jenkins 
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]
# workdir /root
WORKDIR /root

然后重新构建,并启动测试验证
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.2 5->4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#based as centos6-64:v1 os
FROM centos6-64:v2

#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>

#use add command to copy and unzip gsoap file
ADD /file/gsoap_2.7.7.tar.gz /root/
# add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /

# copy jenkins.war
COPY /file/jenkins.war /

# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin

#change workdir
WORKDIR /root/gsoap-2.7

# mkdir /tmp, jenkins will be used /tmp file
RUN mkdir /tmp
#change jur
RUN chmod +x /root/gsoap-2.7
#configure
RUN ./configure
#make
RUN make
#make install
RUN make install

# use 8080 port
EXPOSE 8080
# start jenkins 
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.3 4->3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#based as centos6-64:v0 os
FROM centos6-64:v1

#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>

#use add command to copy and unzip gsoap file
ADD /file/gsoap_2.7.7.tar.gz /root/
# add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /

# copy jenkins.war
COPY /file/jenkins.war /

# set env
ENV alias vi=vim
ENV PATH=$PATH:$HOME/bin
# SYSTEM ENV
ENV LANG=en_US
ENV LC_ALL=en_US
ENV EDITOR=vi
ENV MANPATH=$MANPATH:/usr/share/man:/usr/share/locale/man
ENV LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:/usr/local/lib:/usr/local/ssl/lib:/usr/local/apr/lib:.
ENV PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/ucb:/usr/sfw/bin:.
ENV CC=gcc
# ORACLE ENV
ENV ORACLE_BASE=/opt/oracle
ENV ORACLE_HOME=$ORACLE_BASE/instantclient_11_2
ENV ORACLE_SID=starboss
ENV PATH=$ORACLE_HOME/sdk:$ORACLE_HOME:$PATH
ENV LD_LIBRARY_PATH=$ORACLE_HOME/:/lib64:/usr/lib64
ENV CLASSPATH=$CLASSPATH:$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
ENV NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# LIBXML2 ENV
ENV LIBXML2_HOME=/usr
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
ENV PATH=$PATH:$ORACLE_HOME/lib:$ORACLE_HOME/bin:$PATH:$LIBXML2_HOME/bin
#gcc head file and lib path
ENV LOCAL_LIB_PATH=/usr/local/lib
ENV LIBRARY_PATH=$LIBXML2_HOME/lib:$ORACLE_HOME
ENV CPLUS_INCLUDE_PATH=$ORACLE_HOME/sdk/include:$ORACLE_HOME/rdbms/public:$LIBXML2_HOME/include/libxml2
ENV C_INCLUDE_PATH=$LIBXML2_HOME/include/libxml2
ENV ulimit -S -c unlimited
ENV OS=LINUX
# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin

#change workdir
WORKDIR /root/gsoap-2.7

# mkdir /tmp, jenkins will be used /tmp file
RUN mkdir /tmp
#change jur
RUN chmod +x /root/gsoap-2.7
#configure
RUN ./configure
#make
RUN make
#make install
RUN make install

# use 8080 port
EXPOSE 8080
# start jenkins
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.4 3->2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#based as centos6-64:v0 os
FROM centos6-64:v0

#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>

#use add command to copy and unzip gsoap file
ADD /file/gsoap_2.7.7.tar.gz /root/
# add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /

#create oracle
RUN mkdir /opt/oracle
# mkdir /tmp, jenkins will be used /tmp file
RUN mkdir /tmp

# copy jenkins.war
COPY /file/jenkins.war /
#COPY oracle files
COPY /file/oracle /opt/oracle

# set env
ENV alias vi=vim
ENV PATH=$PATH:$HOME/bin
# SYSTEM ENV
ENV LANG=en_US
ENV LC_ALL=en_US
ENV EDITOR=vi
ENV MANPATH=$MANPATH:/usr/share/man:/usr/share/locale/man
ENV LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:/usr/local/lib:/usr/local/ssl/lib:/usr/local/apr/lib:.
ENV PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/ucb:/usr/sfw/bin:.
ENV CC=gcc
# ORACLE ENV
ENV ORACLE_BASE=/opt/oracle
ENV ORACLE_HOME=$ORACLE_BASE/instantclient_11_2
ENV ORACLE_SID=starboss
ENV PATH=$ORACLE_HOME/sdk:$ORACLE_HOME:$PATH
ENV LD_LIBRARY_PATH=$ORACLE_HOME/:/lib64:/usr/lib64
ENV CLASSPATH=$CLASSPATH:$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
ENV NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# LIBXML2 ENV
ENV LIBXML2_HOME=/usr
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
ENV PATH=$PATH:$ORACLE_HOME/lib:$ORACLE_HOME/bin:$PATH:$LIBXML2_HOME/bin
#gcc head file and lib path
ENV LOCAL_LIB_PATH=/usr/local/lib
ENV LIBRARY_PATH=$LIBXML2_HOME/lib:$ORACLE_HOME
ENV CPLUS_INCLUDE_PATH=$ORACLE_HOME/sdk/include:$ORACLE_HOME/rdbms/public:$LIBXML2_HOME/include/libxml2
ENV C_INCLUDE_PATH=$LIBXML2_HOME/include/libxml2
ENV ulimit -S -c unlimited
ENV OS=LINUX
# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin

#change workdir
WORKDIR /root/gsoap-2.7

#change jur
RUN chmod +x /root/gsoap-2.7
#configure
RUN ./configure
#make
RUN make
#make install
RUN make install
#change jur
RUN chmod -R 755 /opt/oracle

# use 8080 port
EXPOSE 8080
# start jenkins
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]

在这里插入图片描述
(这里镜像tag写错了,应该是centos6-64:v1,不是centos6-64:v0)
在这里插入图片描述
这是刷新后的图。。。。
在这里插入图片描述

9.5 2->1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#based as centos6-64:base os
FROM centos6-64:base

#auth is jiayq jiayq@startimes.com.cn
MAINTAINER jiayq <jiayq@startimes.com.cn>

# user root
USER root

#use add command to copy and unzip gsoap file
ADD /file/gsoap_2.7.7.tar.gz /root/
# add jdk files
ADD /file/jdk-8u111-linux-x64.tar.gz /

# copy jenkins.war
COPY /file/jenkins.war /
#COPY oracle files
COPY /file/oracle /opt/oracle
# copy rpm files
COPY /rpm /rpm

# set env
ENV alias vi=vim
ENV PATH=$PATH:$HOME/bin
# SYSTEM ENV
ENV LANG=en_US
ENV LC_ALL=en_US
ENV EDITOR=vi
ENV MANPATH=$MANPATH:/usr/share/man:/usr/share/locale/man
ENV LD_LIBRARY_PATH=/usr/lib:/usr/dt/lib:/usr/openwin/lib:/usr/sfw/lib:/usr/local/lib:/usr/local/ssl/lib:/usr/local/apr/lib:.
ENV PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:/usr/local/bin:/usr/local/sbin:/usr/ccs/bin:/usr/ucb:/usr/sfw/bin:.
ENV CC=gcc
# ORACLE ENV
ENV ORACLE_BASE=/opt/oracle
ENV ORACLE_HOME=$ORACLE_BASE/instantclient_11_2
ENV ORACLE_SID=starboss
ENV PATH=$ORACLE_HOME/sdk:$ORACLE_HOME:$PATH
ENV LD_LIBRARY_PATH=$ORACLE_HOME/:/lib64:/usr/lib64
ENV CLASSPATH=$CLASSPATH:$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
ENV NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# LIBXML2 ENV
ENV LIBXML2_HOME=/usr
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
ENV PATH=$PATH:$ORACLE_HOME/lib:$ORACLE_HOME/bin:$PATH:$LIBXML2_HOME/bin
#gcc head file and lib path
ENV LOCAL_LIB_PATH=/usr/local/lib
ENV LIBRARY_PATH=$LIBXML2_HOME/lib:$ORACLE_HOME
ENV CPLUS_INCLUDE_PATH=$ORACLE_HOME/sdk/include:$ORACLE_HOME/rdbms/public:$LIBXML2_HOME/include/libxml2
ENV C_INCLUDE_PATH=$LIBXML2_HOME/include/libxml2
ENV ulimit -S -c unlimited
ENV OS=LINUX
# set env
ENV JAVA_HOME=/jdk1.8.0_111
ENV CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$PATH:$JAVA_HOME/bin

#change workdir
WORKDIR /root/gsoap-2.7

# install rpm
RUN find /rpm -type f|xargs rpm -i --force --nodeps
#change jur
RUN chmod +x /root/gsoap-2.7
#configure
RUN ./configure
#make
RUN make
#make install
RUN make install
#change jur
RUN chmod -R 755 /opt/oracle
# mkdir /tmp, jenkins will be used /tmp file
RUN mkdir /tmp

# use 8080 port
EXPOSE 8080
# start jenkins
ENTRYPOINT ["java","-jar","/jenkins.war","--httpPort=8080"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,就完成了docker化与Jenkins集成。

10. 总结

  • 1.打包服务器的操作系统有限制,必须使用centos6.1,但是因为centos6.1比较老旧,网上几乎找不到现有的centos6.1的基础镜像。所以只能自行创建基础镜像。
  • 2.docker build 时,因为没有涉及到网络(考虑到后续如果生产环境升级docker,那么生产机器有网络隔离,提前试水),所以,安装一些必要的软件就无法使用yum去直接安装。只能下载对应的rpm包,通过离线安装完成所有软件及依赖软件的安装。
  • 3.因为centos6.1的操作系统是在是太老旧,导致centos6.1通过yum下载的git最高版本是1.7.1,因为git太旧,导致无法克隆代码。所以需要安装ius第三方yum源,通过第三方yum源得到git2.16的rpm离线安装包,然后安装到镜像中。
  • 4.在获取离线安装包时,使用yum的一个工具download插件,但是有一些软件是操作系统自带,但是打tar包时,为打进去,导致有些依赖的软件无法通过yum和插件进行下载。只能通过网络中的rpm搜索站,手动下载。
  • 5.rpm离线安装需要联网进行检查与验证,但是镜像构建无法使用网络,所以使用rpm的–force –nodeps参数,强制安装,跳过检测验证。
  • 6.gsoap只能使用2.7.7,但是现在网上没有2.7.7的离线安装包,只能使用源码安装,使用源码安装,需要下载安装时的依赖库,而一些依赖库无法使用yum下载的。所以只能一次一次的试,然后一点一点的加进去。
  • 7.openjdk原来使用离线安装包进行安装,但是在构建过程中安装完成后,存在环境变量未设置,以及安装的是jre,等等原因,最后使用jdk1.8u111的linux包作为java安装。
  • 8.git安装成功后,进行clone测试,发现git有运行时依赖,所以只能推倒全部重新来。。(很恶心)
  • 9.安装8依赖的软件后,问题依然存在,但是可以从内网下载代码(外网不行,因为没有配置解析)。
  • 10.jenkins启动成功,才能说明本次集成成功,但是有好些参数,在最后一步才能发现问题,发现问题,意味着之前做的工作全部需要重新来过。
  • 11.dockerfile合并,dockerfile不能太长,对于命令的编排,命令的合并,都需要不断的优化。

最后,不要灰心,即使这条路走不通,依然有其他的路可以到达。

本文由作者按照 CC BY 4.0 进行授权