『高级篇』docker之微服务服务docker化(18)

作者: IT人故事会 | 来源:发表于2018-10-22 10:49 被阅读28次

    原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
    原文链接地址:『高级篇』docker之微服务服务docker化(18)

    这次进入微服务的部署,代码也基本都通过了。如果比做一首歌曲的话,前奏已经结束,现在开始我们的高潮部分,如果吧我们的服务使用docker,使用服务编排工具,把项目给部署运行起来。源码:https://github.com/limingios/msA-docker

    注意

    因docker话都是在linux环境,为了方便编写dockerfile文件,我切换到mac本上进行演示,目的只有一个方便开发sh。方便使用。CICD学习实践首选电脑还是mac。

    微服务部署

    1. 服务docker化,可以在docker下运行。
    2. Docker仓库创建,docker创建的镜像push到仓库里面。
    3. 构建高可用的集群环境,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

    跟之间的基本是一样的,都是重复的工作。直接看源码吧

    1. 修改pom文件增加maven构建
    2. 增加dockerfile文件
    3. 增加build.sh文件
    4. 资源文件的修改
    docker run -it course-edge-service:latest --zookeeper.address=192.168.1.140
    
    docker run -it gataway-zuul:latest                                         
    

    PS:把所有单独的服务,做成了镜像,下次想个办法服务和镜像统一的运行起来。

    相关文章

      网友评论

        本文标题:『高级篇』docker之微服务服务docker化(18)

        本文链接:https://www.haomeiwen.com/subject/qchdzftx.html