Docker镜像高级操作

1. 镜像高级操作-创建镜像

2.1 为什么需要

1)备份-容器备份

有时我们需要把正在运行的容器备份下来。

2)打包镜像

开发人员把开发代码要打成镜像,测试和部署人员之间pull镜像即可部署. 只依赖于docker.

极大统一开发与测试或线上环境的差异

2.2创建方式

1)基于容器构建-容器备份

2)dockerfile构建-脚本构建,mave可以用来构建jar

3)maven插件构建-也是转换为dockerfile

2.3基于容器构建-fastdfs就是这样做出来

2.3.1 执行构建

docker commit mycentos(容器) yhptestcentos(镜像名)

2.3.2 使用新镜像启动新容器

使用新镜像创建新容器

docker run di --name=新容器名称 新镜像名称

启动容器

docker exec -it 新镜像名称 /bin/bash

2.4 Dockerfile构建

2.4.1什么是Dockerfile

img

通过dockerfile我们可以基于一个基础镜像,创建一个新的镜像.

Eureka

Centos:可以使用它作为初始镜像

Jdk

Jar

Java -jar xxx.jar

开发人员可以提供一个dockerfile脚本,如果测试人员和部署人员实在不想用我们

镜像,它是可以通过我们提供dockerfile脚本来制作镜像.

2.4.2 基本命令

img

2.4.3 实战-docker1.8镜像制造

构建jdk1.8的镜像 -> 需要centos的镜像 FROM centos:7

FROM centos:7
MAINTAINER yhptest
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
docker build -t="jdk1.8" .

img

2.5 私有仓库搭建

2.5.1 私有仓库搭建与配置

img

多个团队通过私有镜像仓库共享镜像.正常来说这个仓库是应该外网能够访问.

私有镜像仓库也可以通过docker运行

1)下载私有仓库镜像(代码)

docker pull registry

img

2)启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

img

docker logs itsource-registry --tail 10 -f

3)测试

img

4)让Docker信任私有仓库地址

修改vi /etc/docker/daemon.json

{
  "registry-mirrors": ["https://5pfmrxk8.mirror.aliyuncs.com","http://hub-mirror.c.163.com"],
  "insecure-registries":["192.168.0.109:5000"]
}

5)重启docker

systemctl restart docker

docker start itsource-registry

docker info

img

2.5.2 上传镜像或拉取镜像到私有仓库

1)上传

①标记此镜像为私有仓库镜像

docker tag jdk1.8 172.16.33.216:5000/jdk1.8

img

②上传镜像

docker push 172.16.33.216:5000/jdk1.8

先要确保registry容器已经启动

测试:http://ip:5000/v2/_catalog

img
img

2)拉取

其他docker下载镜像:同样设置需要设置仓库信任

①也可删除本地镜像后重新pull:

注意如果同一个id有多个镜像可以使用名称删除

docker rmi 172.16.33.216:5000/jdk1.8

②pull

img

③新镜像创建容器测试

docker run -di --name=jdk1.8 172.16.33.216:5000/jdk1.8

2.6 maven插件构建

对于数量众多的微服务,手动部署(dockerfile)无疑是非常麻烦的做法,并且容易出错。所以我们这 里学习如何自动部署,这也是企业实际开发中经常使用的方法。

Maven插件自动部署步骤:

(1)修改宿主机的docker配置,让其可以远程访问

vi /lib/systemd/system/docker.service

其中ExecStart=后添加配置 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

修改后如下(2)刷新配置,重启服务

systemctl daemon-reload

systemctl restart docker

docker start registry

172.16.4.194:2375

防火墙对该端口放行

firewall-cmd --permanent --zone=public --add-port=2375/tcp

systemctl stop firewalld 只有加端口映射的时候必须开启

img

(1)在工程pom.xml

<build>
    <finalName>eureka</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!--这里写上main方法所在类的路径-->
            <configuration>
                <mainClass>cn.itsource.hrm.EurekaServer7001Application</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!--docker的maven插件,官网: https://github.com/spotify/docker‐maven‐plugin-->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.4.13</version>
            <configuration>
                <imageName>172.16.4.194:5000/${project.artifactId}:${project.version}</imageName>
                <baseImage>jdk1.8</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://172.16.4.194:2375</dockerHost>
            </configuration>
        </plugin>
    </plugins>
</build>

以上配置会自动生成Dockerfile

img

FROM jdk1.8

ADD app.jar /

ENTRYPOINT [“java”,"‐jar","/app.jar"]

(5)在windows的命令提示符下,进入工程hrm_eureka_7001所在的目录

进入Eureka 所在的目录,输入以下命令,进行打包和上传镜像

mvn clean package docker:build ‐DpushImage

(6)进入宿主机 , 查看镜像

img

输出如上内容,表示微服务已经做成镜像

浏览器访问 http://192.168.184.141:5000/v2/_catalog ,输出

{“repositories”:[“hrm_eureka”]}

(7) 启动容器:

docker run ‐di ‐‐name=eureka ‐p 1010:1010

172.16.15.173:5000/hrm_eureka:1.0‐SNAPSHO

步骤:

  1. docker远程操作支持

  2. 配置maven插件

  3. 打包并push

  4. 运行

3.持续集成工具-Jenkins

3.1持续集成介绍

3.1.1 为什么需要持续集成

scrum(敏捷项目管理)提倡,可用的软件优于面面俱到的文档。但如何保证可用软件的质量成了一个棘手的问题,尤其是在不断变化的需求中。

怎么办才能看出软件质量的优劣,进度的快慢? 经常集成起来,看看效果,不就知道质量怎么样,进度怎么样了嘛?而且经常集成起来看,有助于发现问题,解决问题,如需求有没有偏差,是不是领导和客户想要的效果,又或者发现和解决这样那样的bug等等。

但经常集成,又会牵扯开发人员很多精力去更好地协同工作,这是在开发过程中不可回避的问题。

期望达到两种效果:

经常打包集成,以便领导抽查,跟踪质量和进度。

每个需求都应该有可用的软件,及时发现bug解决bug。

方案:每几天安排一次手工集成。

(1)组员提交代码到svn

(2)从svn检出代码

(3)使用maven编译打包

(4)代码质量检测工具检测代码质量

(5)将代码质量统计并反馈

(6)将打包的项目war包放到tomcat中,

(7)执行自动化测试用例看功能有没有问题

3.1.2 什么是持续集成

持续集成正是针对上述一系列问题的一种软件开发实践,

它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。

使用持续集成等工具,经常性自动化集成,尽早发现错误并解决,得到可用软件。

3.1.3 持续集成的作用

1、降低风险,每天都可能发生多次集成,有利于及早发现软件质量问题。

2、自动完成,通过自动化工具可以避免开发人员投入过多精力

3、软件运行状态随时可看,可以增加领导和团队成员对项目的信心。

4、利于对未来进行把控,持续集成的信息有利于我们对未来进行更好地规划和把控。

3.1.4持续集成的组成

***3.1.4.1****所需内容*

持续集成管理平台不只是CI服务器,是一系列软件开发管理工具的组合。

源码版本管理:Subversion、Git

项目构建工具:Maven、Ant、Gradle

代码质量管理:Sonar(Checkstyle、PMD、FindBugs……)

持续集成引擎:Hudson、Jenkins、Apache Continuum

应用持续部署:操作系统、JDK、Tomcat、JBoss…

实施持续集成过程中要用到的其他各种工具、各种插件

*3.1.4.2*架构图*-核心ci服务器(Jenkins)*

img

开发人员:

提交或更新代码到源码版本管理,持续集成后能立马发现bug,解决bug。

项目管理人员:

触发持续集成,下载代码,编译,打包,质量检测,自动化测试。发现问题,分配给开发人员进行修改。

测试:

持续集成后软件包,可以获取来做测试。

3.2 Jenkins简介

Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。

Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图 表的形式形象地展示项目构建的趋势和稳定性。

Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

特点:

易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额 外的安装,更无需安装数据库;

易配置:提供友好的GUI配置界面;

变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并 输出到编译输出信息中;

支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是 永久链接地址,因此,你可以在各种文档中直接使用该链接;

集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据 我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程 中,干别的事情); JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;

支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;

文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使 用了哪个版本的jars文件等构建记录;

支持第三方插件:使得 Jenkins 变得越来越强大

Jenkins就是持续集成中使用的多种工具(代码管理工具,构建工具,质量管理工具,进行管理工具)

中持续集成工具.

3.3 jenkins安装

在本地vmware虚拟机进行安装是ok,但是下载插件的速度比较慢.影响操作,我自己云上操作.它们都是一样都是Linux

3.3.1 jdk安装

(1)将jdk-8u171-linux-x64.rpm上传至服务器(虚拟机)

(2)执行安装命令

rpm -ivh jdk-8u171-linux-x64.rpm RPM方式安装JDK,

其根目录为:/usr/java/jdk1.8.0_171-amd64

默认已经安装:

img

3.3.2 Jenkins安装与启动

(1)下载jenkins

wget https://pkg.jenkins.io/redhat/jenkins-2.83-1.1.noarch.rpm

或将jenkins-2.83-1.1.noarch.rpm上传至服务器

(2)安装jenkins

rpm -ivh jenkins-2.83-1.1.noarch.rpm

(3)配置jenkins

vi /etc/sysconfig/jenkins

修改用户和端口

JENKINS_USER=“root”

JENKINS_PORT=“8888”

(4)启动服务

systemctl start jenkins

cat /var/log/jenkins/jenkins.log

img

如果链接超时,修改:vi /var/lib/jenkins/hudson.model.UpdateCenter.xml 把https修改为http

修改插件镜像

http://mirror.xmission.com/jenkins/updates/update-center.json

Java找不到解决方案

https://blog.csdn.net/lucy06/article/details/78893876

(5)访问链接 http://192.168.184.135:8888

关闭防火墙

firewall-cmd --permanent --zone=public --add-port=8888/tcp

systemctl restart firewalld

img

从/var/lib/jenkins/secrets/initialAdminPassword中获取初始密码串

cat /var/lib/jenkins/secrets/initialAdminPassword后输入

img
下载时间可能比较久

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值