欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微服务项目部署在docker容器运行

程序员文章站 2022-04-18 20:53:53
...

       昨天的一篇微服务项目中涉及到docker部署,今天写一篇关于微服务项目部署在docker容器中运行,使用github上另外一个比较经典的微服务项目piggyMetric,项目的github地址:https://github.com/sqshq/piggymetrics,这个项目和昨天那篇的项目很类似----

一个简单的微服务项目带你上手spring cloud 全家桶

一、创建piggymetrics项目

1.1 下载好的项目导入到eclipse中,结构如下:

微服务项目部署在docker容器运行

1.2 在项目的各个子模块下,使用maven的install命令,将各个子模块打包成jar包,存放在target目录下以及maven仓库下

可先使用clean命令清除target目录下的文件,再使用install命令(eclipse中已经安装了maven插件)

微服务项目部署在docker容器运行

每个模块的操作一样。然后就在每个项目的target目录下生成该模块的jar包了,JRE System Library使用的是jdk1.8.

微服务项目部署在docker容器运行

在本地的workspace中:

微服务项目部署在docker容器运行

各个模块使用maven的install命令,全部生成了jar包之后,查看模块下的Dockfile文件,例如rigistry模块的Dockfile文件(注意必须写成Dockfile,D要大写)

微服务项目部署在docker容器运行

FROM java:8-jre
MAINTAINER Alexander Lukyanchikov <aaa@qq.com>

ADD ./target/registry.jar /app/
CMD ["java", "-Xmx200m", "-jar", "/app/registry.jar"]

EXPOSE 8761

说明:Dockfile文件中FROM指定创建该镜像之前需要的基础镜像,这里表示需要java 8的jre运行环境的镜像,MAINTAINER表示该镜像的维护信息

ADD 是该微服务模块生成的jar包需要拷贝一份到linux服务器的位置,这里就是表示从该微服务模块的target目录下,复制一份registry.jar到/app/目录下

CMD是执行的命令,一个Dockfile只有一条CMD命令

EXPOSE 表示对外暴露的端口号

其他各个模块的Dockfile编写的基本上差不多,只需要替换各自模块的自己的内容即可

1.3 将项目打包为tar包上传到linux系统

微服务项目部署在docker容器运行

使用filezilla工具将tar包上传到linux服务器上(我是在本地安装了centos7虚拟机,使用的是 VMware Workstation安装的,需要先启动虚拟机)

1.3.1 启动虚拟机:

微服务项目部署在docker容器运行

1.3.2 使用filezilla连接上远程centos7系统 

微服务项目部署在docker容器运行

使用sftp协议,ip地址填写centos7虚拟机的ip地址,端口号写22,然后就是用户名和密码,连接上远程服务器

上传文件:

微服务项目部署在docker容器运行

 1.3.3 使用secureCRT工具连接远程centos7系统(可以直接使用终端命令)

微服务项目部署在docker容器运行

我现在是已经连接上了的

然后使用cd 命令切换到piggymetrics的tar包所在目录,对tar包进行解压

微服务项目部署在docker容器运行

然后cd命令切换到解压后的PiggyMetrics-master目录下

微服务项目部署在docker容器运行切换到registry目录下,可以看到Dockfile文件,

1.3.4 接下来使用dock命令执行Dockfile文件

使用docker命令的前提是需要linux上安装了docker,这里还需要使用到docker compose,所以一并安装吧,安装教程可以参考这篇博客:

CentOS7 - Docker&Docker-Compose安装

微服务项目部署在docker容器运行

安装好之后,接下来启动docker服务

sudo systemctl start docker

其他相关命令:

微服务项目部署在docker容器运行

启动后,进入到各个模块,例如进入registry模块下,执行命令

docker  build -t registry . (注意后边有个空格和点)

依次在各个模块执行该命令,创建各个模块的镜像-t 之后写的是镜像的名称

各个模块镜像创建完成后:

docker images命令查看创建的进行:

微服务项目部署在docker容器运行

可以看到各个模块的镜像都已经创建成功(我已经在本周五的时候全都已经创建好了镜像,所以创建时间是40多小时前)

1.3.5 接下来设置一下docker,允许其远程访问

使用命令 vim  /usr/lib/systemd/system/docker.service打开服务配置文件,按下i键进入插入模式修改配置,修改好后,按esc退出编辑模式,然后输入:wq! 强制保存退出。

微服务项目部署在docker容器运行

将上一行注释掉,修改成下边那样:

ExecStart=ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://va/run/docker.sock

1.3.6 使用docker容器启动镜像,例如启动registry镜像:

命令:docker run -i -t registry /bin/bash

微服务项目部署在docker容器运行

已经启动了容器,并进入容器中,在容器中无法使用docker ps查看容器进程状态,此时需要退出容器同时又不关闭容器,按住ctrl+p+q

微服务项目部署在docker容器运行

使用docker ps 命令可以看到registry镜像已经在容器中运行了

然后再使用docker run命令启动其他服务模块的镜像。但是这样真的比较麻烦。所以这里推荐使用docker compose来依次启动多个容器,从而启动多个镜像。

1.3.7 使用docker compose启动容器

切换到PiggyMetric-master目录下:

微服务项目部署在docker容器运行

这里有两个docker-compose文件,是yml格式的配置文件,这两个文件可以使用安装的docker compose工具执行

再转回到eclipse中,查看docker-compose.yml文件的内容:

version: '2.1'
services:
  rabbitmq:
    image: rabbitmq:3-management
    restart: always
    ports:
      - 15672:15672
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  config:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-config
    restart: always
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  registry:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-registry
    restart: always
    depends_on:
      config:
        condition: service_healthy
    ports:
      - 8761:8761
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  gateway:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-gateway
    restart: always
    depends_on:
      config:
        condition: service_healthy
    ports:
      - 80:4000
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  auth-service:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
      NOTIFICATION_SERVICE_PASSWORD: admin
      STATISTICS_SERVICE_PASSWORD: admin
      ACCOUNT_SERVICE_PASSWORD: admin
      MONGODB_PASSWORD: admin
    image: sqshq/piggymetrics-auth-service
    restart: always
    depends_on:
      config:
        condition: service_healthy
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  auth-mongodb:
    environment:
      MONGODB_PASSWORD: admin
    image: sqshq/piggymetrics-mongodb
    restart: always
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  account-service:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
      ACCOUNT_SERVICE_PASSWORD: admin
      MONGODB_PASSWORD: admin
    image: sqshq/piggymetrics-account-service
    restart: always
    depends_on:
      config:
        condition: service_healthy
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  account-mongodb:
    environment:
      INIT_DUMP: account-service-dump.js
      MONGODB_PASSWORD: admin
    image: sqshq/piggymetrics-mongodb
    restart: always
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  statistics-service:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
      MONGODB_PASSWORD: admin
      STATISTICS_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-statistics-service
    restart: always
    depends_on:
      config:
        condition: service_healthy
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  statistics-mongodb:
    environment:
      MONGODB_PASSWORD: admin
    image: sqshq/piggymetrics-mongodb
    restart: always
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  notification-service:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
      MONGODB_PASSWORD: admin
      NOTIFICATION_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-notification-service
    restart: always
    depends_on:
      config:
        condition: service_healthy
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  notification-mongodb:
    image: sqshq/piggymetrics-mongodb
    restart: always
    environment:
      MONGODB_PASSWORD: admin
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  monitoring:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-monitoring
    restart: always
    depends_on:
      config:
        condition: service_healthy
    ports:
      - 9000:8080
    logging:
      options:
        max-size: "10m"
        max-file: "10"

  turbine-stream-service:
    environment:
      CONFIG_SERVICE_PASSWORD: admin
    image: sqshq/piggymetrics-turbine-stream-service
    restart: always
    depends_on:
      config:
        condition: service_healthy
    ports:
    - 8989:8989
    logging:
      options:
        max-size: "10m"
        max-file: "10"

在linux上切换到PiggyMetrics-master目录下

执行命令docker-compose -f docker-compose-base.yml up -d,接下来会运行整个项目。

微服务项目部署在docker容器运行

会执行很久时间。

1.3.8 在本地浏览器访问一下

上边提示访问失败,超时。检查项目中各模块的yml文件配置,其实就是上一篇中提到的提到的hostname问题。

例如:

微服务项目部署在docker容器运行

将对应的hostname全部改成localhost