1、使用dockerfile构建镜像 1.1 创建目录 1 mkdir -p ~/docker_jdk1.8/ # 创建一个存放dockerfile和jdk的地方
1.2 下载JDK8,将其copy到刚刚创建的目录中 1.3 创建dockerfile #依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
1.4 执行命令,构建镜像 1 docker build -t='jdk1.8' . # 构建镜像,并给镜像起名为jdk1.8
1.5 查看刚刚创建的镜像
1.6 创建容器 1 docker run -it jdk1.8 /bin/bash
2、创建docker的私有仓库 2.1 拉取私有仓库的镜像 1 sudo docker pull registry
2.2 创建私有仓库容器 1 sudo docker run -di --name registry -p 5000:5000 registry
2.3 查看仓库 打开浏览器 输入地址http://10.211.55.7:5000/v2/_catalog看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空
3、上传镜像到仓库 3.1 修改本地(还有私有仓库)的docker的配置文件 1 2 3 4 5 6 7 8 9 10 11 12 # # 打开daemon.json vi /etc/docker/daemon.json # 在后面追加下面内容 {"insecure‐registries":["10.211.55.7:5000"]} # 私有仓库的地址 { "registry-mirrors": ["https://l7s5cnt9.mirror.aliyuncs.com"], "insecure-registries":["10.211.55.7:5000"] }
mac版docker
3.2 将本地镜像标记为私有仓库的镜像 1 docker tag jdk1.8 10.211.55.7:5000/jdk1.8
3.3 上传镜像 1 docker push 10.211.55.7:5000/jdk1.8
4、docker的maven插件 部署有两种方法: (1)手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至JDK容器。 (2)通过Maven插件自动部署。
4.1 修改私服服务器上的配置文件 1 vi /lib/systemd/system/docker.service # 其中ExecStart=后添加配置 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启docker,重启私有仓库
1 sudo systemctl restart docker
4.2 在项目的pom.xml文件中添加下面的插件 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 <build > <finalName > ly-config</finalName > <plugins > <plugin > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-maven-plugin</artifactId > </plugin > <plugin > <groupId > com.spotify</groupId > <artifactId > docker-maven-plugin</artifactId > <version > 0.4.13</version > <configuration > <imageName > 10.211.55.7:5000/${project.artifactId}:${project.version}</imageName > <baseImage > frolvlad/alpine-oraclejdk8:slim</baseImage > <entryPoint > ["java", "-jar","/${project.build.finalName}.jar"]</entryPoint > <resources > <resource > <targetPath > /</targetPath > <directory > ${project.build.directory}</directory > <include > ${project.build.finalName}.jar</include > </resource > </resources > <dockerHost > http://10.211.55.7:2375</dockerHost > </configuration > </plugin > </plugins > </build >
4.3 使用命令行,将项目打包成镜像,并上传到私有仓库上 1 mvn clean package docker:build -DpushImage
运行时抛出的异常:
1 [ERROR] No plugin found for prefix 'docker' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/x5456/Documents/Maven/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
解决方案:
1 2 3 <pluginGroups > <pluginGroup > com.spotify</pluginGroup > </pluginGroups >
重新执行上面命令即可。
问题2:连接不上2375接口
1 2 sudo systemctl stop firewalld.service # 停止firewall sudo systemctl disable firewalld.service # 禁止firewall开机启动
4.4 问题?
配置文件要怎么修改,无论怎么整,还是需要我们去里面手动修改(一部分)配置文件。
5、更加简单的构建镜像 我们可以使用Jenkins是我们构建镜像更加简单,我们可以将代码上传到git上,他会自动帮我们生成镜像,并上传到私服中
5.1 Jenkins简介 Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的 软件工具。官方网站:http://jenkins-ci.org/。 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图 表的形式形象地展示项目构建的趋势和稳定性。 特点:
易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额 外的安装,更无需安装数据库;
易配置:提供友好的GUI配置界面;
变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并 输出到编译输出信息中;
支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是 永久链接地址,因此,你可以在各种文档中直接使用该链接;
集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据 我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程 中,干别的事情);
JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使 用了哪个版本的jars文件等构建记录;
支持第三方插件:使得 Jenkins 变得越来越强大
5.2 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # docker pull jenkins/jenkins:lts # docker run --name myjenkins -p 8888:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com jenkins/jenkins:lts # Maven容器卷版 docker run -v /Users/x5456/Documents/Maven:/Maven --name myjenkins222 -p 8888:8080 -p 50000:50000 --env JAVA_OPTS=-Dhudson.footerURL=http://mycompany.com jenkins/jenkins:lts # # docker exec -it 1be705cb1e9f /bin/bash # cat /var/jenkins_home/secrets/initialAdminPassword
5.3 简单使用 1、安装Maven和Git插件
5.3.2 配置工具
git采用默认,maven采用自动下载,之后点击save
5.3.3 上传maven仓库到容器中 1 2 # 将maven仓库copy到容器中 docker cp repository/ 1be705cb1e9f:/var/jenkins_home/.m2
5.3.4 开干
附: 1 2 3 4 5 6 7 8 9 10 # http://10.211.55.7:5000/v2/_catalog # http://10.211.55.7:5000/v2/镜像名/tags/list # docker pull 10.211.55.7:5000/ly-config:1.0-SNAPSHOT # docker run -di -p 12000:12000 10.211.55.7:5000/ly-config:1.0-SNAPSHOT # http://127.0.0.1:12000/item-dev.yml
使用的坑,要把项目中所有的127.0.0.1改为运行镜像机器的ip 6、根据公司实际情况实现自动化部署(2018年12月18日续写) 理想状态架构图:
6.1 在dgp-server-service|web的pom.xml下添加下面插件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <plugins > <plugin > <groupId > com.spotify</groupId > <artifactId > docker-maven-plugin</artifactId > <version > 0.4.13</version > <configuration > <imageName > 10.211.55.7:5000/${project.artifactId}:${project.version}</imageName > <baseImage > tomcat</baseImage > <cmd > ["catalina.sh", "run"]</cmd > <resources > <resource > <targetPath > /usr/local/tomcat/webapps/</targetPath > <directory > ${project.build.directory}</directory > <include > ${project.build.finalName}.war</include > </resource > </resources > <dockerHost > http://10.211.55.7:2375</dockerHost > </configuration > </plugin > </plugins >
对应的dockerfile
1 2 3 FROM tomcatADD /usr/local /tomcat/webapps/dgp-server-service.war /usr/local /tomcat/webapps/ CMD ["catalina.sh" , "run" ]
6.2 上传到gitlab上 http://elb-zentao-361931552.cn-northwest-1.elb.amazonaws.com.cn:5335/yujx/dgpJZ-server-root.git
6.3 登陆到Jenkins 6.3.1 安装gitlab插件
6.3.2 添加任务 连接到gitlab
制定构建的pom.xml文件
构建成功后,自动部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 echo '================开始啦================' # ssh root@10.211.55.8 -tt << remotessh # docker stop dgp-server-service-jz docker rm dgp-server-service-jz docker rmi 10.211.55.7:5000/dgp-server-service:1.0-SNAPSHOT echo '================连上了================' # docker pull 10.211.55.7:5000/dgp-server-service:1.0-SNAPSHOT echo '================拉下来了================' # docker run -d -p 8081:8080 --name dgp-server-service-jz 10.211.55.7:5000/dgp-server-service:1.0-SNAPSHOT echo '================运行了================' # exit remotessh
使用之前需要设置免密登陆
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 x5456@ubuntu:~$ sudo passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully vi /etc/ssh/sshd_config LoginGraceTime 120 PermitRootLogin yes StrictModes yes service ssh restart ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.211.55.8
6.4 实现gitlab打tag时自动部署
下面这些没有测试成功,但大概找出了问题所在
1。ip要是jenkins真正部署的地方的ip,感觉可以使用docker的–host 来实现,但是我电脑是mac系统没办法测试。
2。gitlab环境与我本地好像是不通的
这个ip要是Jenkins安装的那个环境(docker中)的ip
添加触发条件
出现的问题:
解决办法:参见博客 https://blog.csdn.net/xukangkang1hao/article/details/80756085
坑们: 1、web层打包失败的原因 1 2 3 4 5 6 7 8 9 <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-war-plugin</artifactId > <version > ${maven-war-plugin.version}</version > <configuration > </configuration > </plugin >
2、服务器也需要配置3.1内个东西 问题:maven仓库中的更新问题? 附: 1 2 3 4 5 6 7 8 9 10 # sudo docker rm `sudo docker ps -a | grep Exited | awk '{print $1}'` # sudo docker rmi -f `sudo docker images | grep '<none>' | awk '{print $3}'` # sudo docker build -t dgp-server-web-jz . # sudo docker run -d -p 8888:8080 dgp-server-web-jz
本部分参考博客:这个