这次进入微服务的部署, 代码也基本都通过了. 如果比做一首歌曲的话, 前奏已经结束, 现在开始我们的高潮部分, 如果吧我们的服务使用 docker, 使用服务编排工具, 把项目给部署运行起来. 源码: https://github.com/limingios/msA-docker
注意
因 docker 话都是在 Linux 环境, 为了方便编写 dockerfile 文件, 我切换到 Mac 本上进行演示, 目的只有一个方便开发 sh. 方便使用. CICD 学习实践首选电脑还是 Mac.
微服务部署
服务 docker 化, 可以在 docker 下运行.
Docker 仓库创建, docker 创建的镜像 push 到仓库里面.
构建高可用的集群环境, Mesos,Swarm,kubernetes. 运行这 3 个服务编排工具把我们的服务运行和编排起来. 可以优雅的启动, 停止, 扩充容, 故障的恢复.
docker 化
服务有个适合的环境, 服务可以运行起来, 给他准备一个环境, 比如服务是个种子, 我们需要准备一片土地, 服务是一条鱼, 就需要准备一片大海. 源码中的服务有一个是 python 写的, 有一个是 java 写的, 也就是需要 2 个运行环境, 一个基于 java, 一个基于 python.
java 镜像
> 去 hub.docker.com 搜索 java, 找到 tag
下载 java 镜像
> 先配置加速, https://www.daocloud.io/mirror
- docker pull java:openjdk-8
- docker images|grep jdk
安装 jdk 容器
- docker run -it --entrypoint bash java:openjdk-8
- java -version
开始 dockerfile 的开发
熟悉 docker 的老铁应该都知道, 如果要编译 docker 的话需要 docker 化, 首选需要开发 dockerfile 文件.
准备工作
文件中不能有写死的情况, 如果写死了, 每次服务的变更都需要变更镜像. 为了减少构建镜像的过程, 尽量吧数据库的访问地址, 经常会发生变化的东西, 需要踢出去, 不要在配置文件中配置死, 针对数据库的访问, 不能地址直接写死, MySQL 的地址, 当服务运行在 docker 之后, 他的 ip 是实时都在变化的, 不能写死在镜像里, 直接就找不到了就报错了. 还有个问题, 我们的服务以什么样的形式放在我们 docker 里面, springboot 之所以说适用于微服务, 他有个很大的好处, 它可以将咱们的服务构建成一个 fat jar, 只有一个 jar 包, 然后通过 java 的一个命令: java -jar 文件. jar 运行起来, 这种方式对于微服务来说也是很友好的, 也非常的简单, 就使用这种方式来做. 变量的方式就可以通过 springboot -MySQL.address 就可以传递进来了.
构建 user-thrift-service
修改配置文件 和 pom.xml 文件
- application.properties
- service.name=user-thrift-service
- service.port=7911
- # 数据源的配置
- spring.datasource.url=jdbc:MySQL://{
- MySQL.address
- }:3306/db_user
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.MySQL.jdbc.Driver
pom.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.3.RELEASE</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.idig8</groupId>
- <artifactId>user-thrift-service</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.10.0</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>user-thrift-service-API</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- <version>5.1.44</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>
Dockfile 编写
- FROM java:openjdk-8
- MAINTAINER liming www.idig8.com
- COPY target/user-thrift-service-1.0-SNAPSHOT.jar /user-thrift-service.jar
- ENTRYPOINT ["java","-jar","/user-thrift-service.jar"]
执行 build 生成镜像
docker build -t user-thrift-service:latest .
查看 ip 地址
ifconfig
生成容器
docker run -it user-thrift-service:latest --MySQL.address=192.168.1.140
新建立 build.sh
- #!/usr/bin/env bash
- mvn package
- docker build -t user-thrift-service:latest .
构建 message-thrift-python-service
> 后面很多的服务, 都依赖它, 必须把它做好. 它是一个 python 的服务, 我们需要找一个 python 的镜像. 去官方找吧
- docker pull python:3.6
- docker images|grep python
编写 Dockerfile
- FROM python:3.6
- MAINTAINER liming www.idig8.com
- RUN pip install thrift
- ENV PYTHONPATH /
- COPY message /message
- ENTRYPOINT ["python","/message/message_service.py"]
docker build -t message-thrift-python-service:latest .
build 开发
- #!/usr/bin/env bash
- docker build -t message-thrift-python-service:latest .
镜像生成容器
docker run -it message-thrift-python-service:latest
构建 user-edge-service
> 微服务的依赖, 了解 docker 的老铁应该知道可以通过 link 的方式, 去根据名字搜索到这个服务, 只要不在开发范围内的, 认为是通过另外的介入方式 ip, 域名的方式. 通过 docker 分为 2 种情况, 微服务和微服务之间的通信, 微服务和外围系统的通信.
修改配置文件 和 pom.xml 文件
- application.properties
- server.name=user-edge-service
- server.port=8082
- thrift.user.ip=user-thrift-service
- thrift.user.port=7911
- thrift.message.ip=message-thrift-python-service
- thrift.message.port=9090
- #Redis config
- spring.Redis.host=${
- Redis.address
- }
- spring.Redis.port=6379
- spring.Redis.password=liming
- spring.Redis.timeout=30000
pom.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.3.RELEASE</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.idig8</groupId>
- <artifactId>user-edge-service</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.10.0</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>user-thrift-service-API</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>message-thrift-service-API</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-Redis</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.6</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>
Dockerfile 编写
- FROM java:openjdk-8
- MAINTAINER liming www.idig8.com
- COPY target/user-edge-service-1.0-SNAPSHOT.jar /user-edge-service.jar
- ENTRYPOINT ["java","-jar","/user-edge-service.jar"]
build.sh 编写
- #!/usr/bin/env bash
- mvn package
- docker build -t user-edge-service:latest .
sh build.sh
创建容器
docker run -it user-edge-service:latest --Redis.address=192.168.1.140
构建 course-dubbo-service
微服务的依赖, 了解 docker 的老铁应该知道可以通过 link 的方式, 去根据名字搜索到这个服务, 只要不在开发范围内的, 认为是通过另外的介入方式 ip, 域名的方式. 通过 docker 分为 2 种情况, 微服务和微服务之间的通信, 微服务和外围系统的通信.
修改配置文件 和 pom.xml 文件
- application.properties
- #dubbo 配置
- spring.dubbo.application.name=course-dubbo-service
- spring.dubbo.registry.address=zookeeper://${
- zookeeper.address
- }:2181
- spring.dubbo.protocol.name=dubbo
- spring.dubbo.protocol.port=20880
- #spring.dubbo.protocol.host=127.0.0.1
- spring.dubbo.scan=com.idig8.course
- # 数据源的配置
- spring.datasource.url=jdbc:MySQL://${
- MySQL.address
- }:3306/db_course
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.MySQL.jdbc.Driver
- thrift.user.ip=user-thrift-service
- thrift.user.port=7911
pom.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.3.RELEASE</version>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.idig8</groupId>
- <artifactId>course-dubbo-service</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>io.dubbo.springboot</groupId>
- <artifactId>spring-boot-starter-dubbo</artifactId>
- <version>1.0.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.thrift</groupId>
- <artifactId>libthrift</artifactId>
- <version>0.10.0</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.3.1</version>
- </dependency>
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- <version>5.1.44</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>course-dubbo-service-API</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>user-thrift-service</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>com.idig8</groupId>
- <artifactId>user-thrift-service-API</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>2.3.2</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- </project>
Dockerfile 编写
- FROM java:openjdk-8
- MAINTAINER liming www.idig8.com
- COPY target/course-dubbo-service-1.0-SNAPSHOT.jar /course-dubbo-service.jar
- ENTRYPOINT ["java","-jar","/course-dubbo-service.jar"]
build.sh 编写
- #!/usr/bin/env bash
- mvn package
- docker build -t course-dubbo-service:latest .
- sh build.sh
创建容器
docker run -it course-dubbo-service:latest --Redis.address=192.168.1.140 --zookeeper.address=192.168.1.140
构建 course-edge-service
> 跟之间的基本是一样的, 都是重复的工作. 直接看源码吧
修改 pom 文件增加 maven 构建
增加 dockerfile 文件
增加 build.sh 文件
资源文件的修改
docker run -it course-edge-service:latest --zookeeper.address=192.168.1.140
docker run -it gataway-zuul:latest
PS: 把所有单独的服务, 做成了镜像, 下次想个办法服务和镜像统一的运行起来.
百度未收录
来源: http://www.tuicool.com/articles/zIf2UnM