美文网首页
Docker入门, 3.5 用docker部署spring bo

Docker入门, 3.5 用docker部署spring bo

作者: cschen | 来源:发表于2018-07-07 11:15 被阅读0次

    官方入门一直在用Python的例子,是时候试试自己的java项目了。
    去spring官网找一个soringboot docker的例子https://spring.io/guides/gs/spring-boot-docker/
    按照例子一路跑下来,顺利看到Hello Docker World!

     docker run -p 8080:8080 -t springio/gs-spring-boot-docker
    

    接下来把它按照入门3里那样改造下,变成一个运行2个replicas的服务。

    1. 改一下Application.java, 增加显示计算机主机名。

    package hello;
    import java.net.InetAddress;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import java.net.UnknownHostException;
    
    @SpringBootApplication
    @RestController
    public class Application {
    
        @RequestMapping("/")
        public String home() {
            InetAddress ia;
                    String host = "";
                    try {
                            ia = InetAddress.getLocalHost();
                            host = ia.getHostName();  //获取计算机主机名
                    } catch (UnknownHostException e) {                        
                            e.printStackTrace();
                    }
                    return "Hello Docker World! 主机名:"+host;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    打包镜像

    ./mvnw install dockerfile:build
    

    2. 写一个 docker-compose.yml

    version: "3"
    services:
     web:
       # replace username/repo:tag with your name and image details
       image: springio/gs-spring-boot-docker
       deploy:
         replicas: 2
         resources:
           limits:
             cpus: "0.2"
             memory: 500M
         restart_policy:
           condition: on-failure
       ports:
         - "8081:8080"
       networks:
         - webnet
    networks:
     webnet:
    
    1. 运行
    docker stack deploy -c docker-compose.yml springboot-docker
    

    docker service ls查看, 隔了2分钟2个replicas才启动起来。
    用8081访问一下,有显示,但是哪里不对呢? 没有显示主机名。

    docker run -p 8080:8080 -t springio/gs-spring-boot-docker
    

    看到的是不一样的,看到的是我没加主机名之前的效果。
    怀疑它不是运行的本地镜像,而是从docker hub pull了一个镜像。
    于是给我本地的镜像打个tag:

    docker tag springio/gs-spring-boot-docker  springio/gs-spring-boot-docker:my
    

    然后改一下docker-compose.yml

     image: springio/gs-spring-boot-docker:my
    

    再次运行

    docker stack deploy -c docker-compose.yml springboot-docker
    

    终于正常了, 启动速度也快了很多。

    总结教训:网上的一些教程的demo已经发布到docker hub了,一不小心你运行的不是本地的,而是从hub上下载下来的镜像。

    相关文章

      网友评论

          本文标题:Docker入门, 3.5 用docker部署spring bo

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