spring cloud微服务docker启动

1. 背景

将系统拆分成微服务,一个系统可能拆分成十几个服务,服务太多会影响发布和管理,所以容器话之后易于管理和版本发布,鉴于此将spring cloud微服无docker容器化。

2.依赖环境

Centos7.5,Maven环境 和 Docker环境

本人机器不是Windows系统,直接装的Centos系统,可能系统有差异,Windows下应该也可以,没有具体测试。

3.编写demo程序

@RestController
public class ProviderController {

    private static Logger  logger = LoggerFactory.getLogger(ProviderController.class);

    @RequestMapping("/hello")
    public String hello(){
        logger.info("hello debug world "+new Date());
        logger.debug("hello debug world "+new Date());
        logger.error("hello debug world "+new Date());
        return "Hello World";
    }

}

4.先用maven编译

在编译时会下载相应的依赖jar包。

# 在模块下面,具有pom文件的那层,执行以下命令
mvn clean && mvn install

5.编写Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

这是一个简单的Dockerfile,

From是需要的依赖,

COPY是将target下编译好的包拷贝到docker虚拟环境的根目录下

ENTRYPOINT是启动后要执行的命令

6.docker命令编译image

docker build -t docker-cloud/provider:1.0 .

编译完成之后执行查看镜像命令,会看到编译出来的镜像,可以制定不同的tag版本。

# 查看docker镜像
docker images

7.启动编译好的镜像

 docker run --name provider -p 8090:8090 -d doceker-cloud/provider:1.0

--name 指定启动的容器名称

-p 8090:8090 将本地的8090端口和docker容器的8090端口做映射

-d 是后台运行docker程序

最后面根的是要启动的镜像,我选择启动的是docker-cloud/provider镜像,并且TAG是1.0的版本。

8.启动之后查看docker有没有启动

#查看docker启动的进程
docker ps

9. 启动之后可以看一下容器里面的样子

docker exec -it provider /bin/sh

其中app.jar就是我们打包镜像时拷贝过去的jar文件,logs目录是我打的日志

10.我想看日志怎么办?

在docker里面命令是很有限的,很多命令用不了,像tailf这种命令就没法实时查看日志,所以我们就要把日志文件挂载到磁盘的目录下面。

docker run --name provider -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:1.0

-v 就是将目录 /home/zhaowei/docker-provider/logs 挂载到容器的logs目录下,这样产生的日志文件就直接可以在磁盘目录下查看了。

11. 我的想改启动端口怎么办?

spring cloud程序一般可以在applicaiton.properties里指定启动的端口号,但这样有个局限,就是写死了,但是也无所谓,命令行可以指定端口参数,命令行里的参数优先级比配置文件的高,所以在启动的时候指定端口参数就可以了,但是我们的启动参数是写在Dockerfile里面的,所以这里要修改Dockerfile文件了。

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["sh","-c","java ${JAVA_OPTS} -jar /app.jar ${0} ${@}"]

我们在启动docker容器时命令是这样的:

docker run --name provider2 -p 9090:9090 -v /home/zhaowei/docker-provider/logs:/logs -d docker-cloud/provider:2.0 --server.port=9090

12. 其他

demo:https://github.com/liuzwei/docker-app.git

参考:这里是更详细的说明 https://github.com/spring-guides/top-spring-boot-docker

原文地址:https://www.cnblogs.com/soinve/p/11792593.html