SpringCloud学习(八)——微服务部署

微服务部署要完成下面4个步骤
(1)Dockerfile脚本完成镜像的构建
(2)完成Docker私有仓库的构建,能够运用Maven插件完成镜像的创建与上传
(3)能够完成Gogs 的安装与配置,完成代码的提交
(4)使用Jenkins完成代码的持续集成

网站架构演变过程
传统架构—>分布式架构—>SOA架构—>微服务架构
传统架构:传统的SSH架构,分为三层架构 web控制层、业务逻辑层、数据库访问层,单点应用。
分布式架构:基于传统架构演变过来,将传统的单体项目以项目模块进行拆分。
SOA架构:面向与服务架构,也就是面向与业务逻辑层开发,将共同的业务逻辑抽取出来形成一个服务,服务与服务之间调用使用rpc远程技术。特点:使用XML方式实现通讯,在高并发情况下XML比较冗余会带来极大的响,微服务架构中采用JSON替代xml方式;架构的底层实现通过WebService和ESB实现,WebService底层采用soap协议进行通讯,soap协议就是Http或者是Https通道传输XML数据实现的协议。
微服务架构:从SOA架构演变过来,比SOA架构粒度会更加精细,让专业的人去做专业的事情,每个服务于服务之间互不影响,每个服务必须独立部署,互不影响,适合敏捷开发。特点:有独立、可配置、可运行和可微服务的子服务;服务与服务通讯协议采用Http协议,使用restful风格API形式来进行通讯;数据交换格用json格式通讯

1.什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个
新的镜像
作用:
(1)对于开发人员:可以为开发团队提供一个完全一致的开发环境;
(2)对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新
的镜像开始工作;
(3)对于运维人员:在部署时,可以实现应用的无缝移植
2.Dockerfile常用命令

FROM image_name:tag  : 定义了使用哪个基础镜像启动构建流程 (tag是版本)
MAINTAINER user_name : 声明镜像的创建者
ENV key value  : 设置环境变量 (可以写多条)
RUN command  : 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file
dest_dir/file  : 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file
dest_dir/file  : 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR path_dir  : 设置工作目录
EXPOSE port1 prot2  :用来指定端口,使容器内的应用可以通过端口和外界交互
CMD argument   :在构建容器时使用,会被docker run 后的argument覆盖
ENTRYPOINT
argument   :和CMD相似,但是并不会被docker run指定的参数覆盖
VOLUME    :将本地文件夹或者其他容器的文件挂载到容器中

3.使用脚本创建镜像(创建JDK8镜像为例)
(1)创建目录

mkdir –p /usr/local/dockerjdk8  (也可以进入/usr/local该目录手动创建文件夹然后把压缩包拖进去)

(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中
的/usr/local/dockerjdk8目录
(3)创建文件Dockerfile vi Dockerfile

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中 (ADD是既复制又解压)
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

(4),进入装jdk那个目录,比如我的是 cd /usr/local/dockerjdk8/ 。执行命令构建镜像

docker build -t='jdk1.8' .  (注意后边的空格和点,不要省略,点表示当前目录)

(5)在该目录下查看镜像是否建立完成

docker images

(6),先回到根目录cd / ,创建容器

docker run -di --name=XXX_jdk jdk1.8

4.Docker私有仓库搭建
(1)拉取私有仓库镜像(如果已有 此步省略)

docker pull registry

(2)启动私有仓库容器

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

(3)打开浏览器 输入地址http://192.168.226.129:5000/v2/_catalog看
到{“repositories”:[]} 表示私有仓库搭建成功并且内容为空(192.168.226.129为我自己的ip)
(4)修改daemon.json

vi /etc/docker/daemon.json

添加以下内容,保存退出,此步用于让 docker信任私有仓库地址

{"insecure-registries":["192.168.226.129:5000"]} (我自己的ip,以下雷同)

(5)重启docker 服务

systemctl restart docker

镜像上传至私有仓库
(6)标记此镜像为私有仓库的镜像

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

(7)再次启动私服容器

docker start registry

(8)上传标记的镜像

docker push 192.168.226.129:5000/jdk1.8

完事了,访问http://192.168.226.129:5000/v2/_catalog。可以出现jdk1.8了
5.DockerMaven插件部署,一步到位
微服务部署有两种方法:
手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。
通过Maven插件自动部署。
Maven插件部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问

vi /lib/systemd/system/docker.service

其中ExecStart=后添加配置

‐H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

0.0.0.0代表任何机子都可以访问
(2)刷新配置,重启服务

systemctl daemon‐reload (刷新配置)
systemctl restart docker
docker start registry

(3)在XXX_eureka工程pom.xml 增加配置

<!-- 基本每个项目下边这个都一样。可以直接拿来用-->
    <build>
        <!--给工程起个名称-->
        <finalName>app</finalName>
        <plugins>
          <!--  这个是springboot的maven插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </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>192.168.226.129:5000/${project.artifactId}:${project.version}</imageName>

                    <baseImage>jdk1.8</baseImage>
                    <!--打一个jar包,名称就是上面起的app-->
                    <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                    <resources>
                     <!--   这是docker打包成镜像的固定规则-->
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}
                            </directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <!--之前步骤有配有0.0.0.0:2375。意思是任意IP都能访问-->
                    <dockerHost>http://192.168.226.129:2375</dockerHost>
                </configuration>
            </plugin>
        </plugins>
    </build>

以上配置会自动生成Dockerfile

FROM jdk1.8
ADD app.jar /
ENTRYPOINT ["java","‐jar","/app.jar"]

(4)在windows的命令提示符下,进入XXX_config工程所在的目录(也就是有本地配置文件的工程,其余上传gitee了),输入以下命令,进行打包和上传镜像(IDEA直接选编辑器底下Terminal,默认目是父工程,直接拖动子工程就可以进入子工程目录来输入命令)

mvn clean package docker:build -DpushImage

docker:build:直接打包成镜像
-DpushImage:把它传到仓库
(5)docker images查看可以看到该服务已经打包成镜像,其余服务类似操作
(6)然后可以做成容器了
docker run -di --name=XXX_config -p 端口号(每个服务的端口号可以看配置文件):端口号 REPOSITORY:TAG(这两个看docker images里边对应列值)
比如我的是:

docker run -di --name=XXX_config -p 12000:12000 192.168.226.129:5000/XXX_config:1.0-SNAPSHOT

截图:
在这里插入图片描述
(7)测试浏览器输入 http://192.168.226.129:12000/base-dev.yml 看有没有码云的配置文件数据出来,出来则说明成功

8.什么是持续集成(CI)
每次的集成都是通过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件。
特点:
它是一个自动化的周期性的集成测试过程,无需人工干预;需要有专门的集成服务器来执行集成构建;需要有代码托管工具支持,比如Git(比gitee好用)以及可视化界面Gogs。
作用:
保证团队开发人员提交代码的质量,减轻了软件发布时的压力;任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量。
Jenkins简介:
一个开源的实现持续集成的软件工具。Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值