Spring Cloud 微服务(四) Docker化

作者: Lin_XJ | 来源:发表于2017-05-20 17:24 被阅读1389次

    Docker是现在最流行的容器技术,在第二篇第三篇文章中,我们分别创建了一个简单的微服务,和服务注册器,并实现了服务的发现,在这本篇中,我们将使用Docker把我们的微服务和Eureka服务注册器容器化。

    安装Docker

    直接从官网下载Docker并安装,安装完后启动Docker,就可以用docker命令了

    docker -v
    Docker version 17.03.1-ce, build c6d412e
    
    编写docker文件

    在我们的项目中新建一个文件夹docker,放置一个Dockerfile文本文件(文件名很重要)

    image.png

    编写Dockerfile

    FROM java:8 # 配置运行环境为java 8
    VOLUME /tmp # 创建一个临时文件(tomcat需要)
    ADD eureka-server-0.1.0.jar app.jar # 添加一个jar包到容器,并命名为app.jar
    RUN bash -c 'touch /app.jar' # touch 一下使得它有一个modification time(不重要)
    EXPOSE 8081 # 暴露8081端口
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] # 运行
    

    我们看到Dockerfile里面有一句是把编译好的包eureka-server-0.1.0.jar复制到容器里,那这个包到底在哪里?
    这个包需要我们配置Maven,在打包的时候放在和Dockerfile同一目录下,修改pom.xml完成这个工作:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- docker maven plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.13</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- docker仓库地址,这里用的aws,后面文章会介绍 -->
                    <imageName>xxx.dkr.ecr.ap-northeast-1.amazonaws.com/eureka-server</imageName>
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    我们看到这里用了spotify提供的一个docker插件,它的作用是每次做Maven构建的时候都会把我们刚才创建的Dockerfile放到发布目录下,并把编译好的Spring Boot项目jar包放在Dockerfile旁边。

    运行docker

    进入我们的项目根目录,执行下Maven编译

    mvn clean && mvn install
    

    进入我们的项目的输出目录,我的项目是在target/,就会看到如下的目录结构

    image.png

    我们看到插件已经帮我们把需要的jar包放在Dockerfile文件旁边,进入target/docker并运行docker:

    docker run -p 8081:8081 xxx.dkr.ecr.ap-northeast-1.amazonaws.com/eureka-server:0.1
    

    这时docker会帮我们启动容器并运行我们的Eureka Server,-p 8081:8081是把8081映射到容器的8081端口上,打开http://localhost:8081/ 已经可以看到我们的Eureka服务器运行在我们的第一个docker上了。

    上一篇:Spring Cloud 微服务(三) 服务发现
    下一篇:Spring Cloud 微服务(五) 部署到AWS ECS

    相关文章

      网友评论

        本文标题:Spring Cloud 微服务(四) Docker化

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