zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C# 打开模态对话框 和打开文件夹
    C# 统计字符串出现的个数
    html table内容不随标题滚动
    log4net 局部代码 看不懂....
    js的replace, 高亮, insertAdjacentHTML , tbody.innerHTML
    python之tkinter使用举例-Button
    使用pygal_maps_world.i18n中数据画各大洲地图
    使用pygal_maps_world展示世界地图
    python之pygal:掷两个不同的骰子并统计大小出现次数
    python之文件目录操作
  • 原文地址:https://www.cnblogs.com/soinve/p/11792593.html
Copyright © 2011-2022 走看看