Docker入门, 3.5 用docker部署spring boot 服务

官方入门一直在用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 boot 服务)