专栏首页twowinterDocker实战 LoRaServerProject

Docker实战 LoRaServerProject

我正在学习Docker容器技术,相关笔记汇总在Docker容器技术 学习笔记汇总

这篇文章将以我目前正在研究的 lora-server 项目为例,研究下 Docker 在具体项目的实战应用,感受下 Docker 的魅力。

一、工程简介

lora-server是有两种安装方式: 一种是常规的包安装,需要装数据库、MQTT等等,并且还需要配置; 第二种方式,即Docker容器方式,比较简单,省得各种依赖。

https://docs.loraserver.io/install/docker/

官方提供了配套了 docker-compose file。

二、docker-compose.yml 文件分析

原文件

version: "2"

services:
  loraserver:
    image: loraserver/loraserver
    environment:
      - DB_AUTOMIGRATE=true
      - LOG_NODE_FRAMES=true
      - NET_ID=010203
      - BAND=EU_863_870
      - REDIS_URL=redis://redis:6379
      - GW_MQTT_SERVER=tcp://mosquitto:1883
      - GW_SERVER_JWT_SECRET=verysecret
      - POSTGRES_DSN=postgres://loraserver_ns:loraserver_ns@postgresql_ns/loraserver_ns?sslmode=disable
      - AS_SERVER=appserver:8001

  appserver:
    image: loraserver/lora-app-server
    ports:
      - 8080:8080
    environment:
      - DB_AUTOMIGRATE=true
      - REDIS_URL=redis://redis:6379
      - POSTGRES_DSN=postgres://loraserver_as:loraserver_as@postgresql_as/loraserver_as?sslmode=disable
      - MQTT_SERVER=tcp://mosquitto:1883
      - NS_SERVER=loraserver:8000
      - JWT_SECRET=verysecret
      - HTTP_TLS_CERT=/etc/lora-app-server/certs/http.pem
      - HTTP_TLS_KEY=/etc/lora-app-server/certs/http-key.pem

  gatewaybridge:
    ports:
      - 1700:1700/udp
    image: loraserver/lora-gateway-bridge
    environment:
      - MQTT_SERVER=tcp://mosquitto:1883

  postgresql_ns:
    image: postgres:9.6-alpine
    ports:
      - 5432
    environment:
      - POSTGRES_PASSWORD=loraserver_ns
      - POSTGRES_USER=loraserver_ns
      - POSTGRES_DB=loraserver_ns

  postgresql_as:
    image: postgres:9.6-alpine
    ports:
      - 5432
    environment:
      - POSTGRES_PASSWORD=loraserver_as
      - POSTGRES_USER=loraserver_as
      - POSTGRES_DB=loraserver_as

  redis:
    ports:
      - 6379
    image: redis:4-alpine

  mosquitto:
    ports:
      - 1883
    image: eclipse-mosquitto

可以看到总共启动了7个服务,每个服务是都对应1个容器: loraserver、appserver、gatewaybridge、postgresql_ns、postgresql_as、redis、mosquitto

loraserver、appserver、gatewaybridge是该开源项目做的应用程序,后面四个是配套的数据库和MQTT代理组件,先不管。

三、实际安装

1.工作目录准备

创建一个 compose-loraserver 目录,作为项目工作目录。 目录下放置该 docker-compose.yml 文件。

2.启动

在该目录下执行 docker-compose up 命令,会整合输出所有容器的输出。

up
格式为 docker-compose up [options] [SERVICE...] 。

该命令十分强大,它将尝试自动完成包括构建镜像,( 重新) 创建服务,启动服务,并关联服务相关容器的一系列操作。链接的服务都将会被自动启动,除非已经处于运行状态。

可以说,大部分时候都可以直接通过该命令来启动一个项目。

默认情况, docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。

当通过 Ctrl-C 停止命令时,所有容器将会停止。

如果使用 docker-compose up -d ,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

默认情况,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建( 保持使用 volumes-from 挂载的卷) ,以保证新启动的服务匹配docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate 。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。

选项:
-d 在后台运行服务容器。
--no-color 不使用颜色来区分不同的服务的控制台输出。
--no-deps 不启动服务所链接的容器。
--force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。
--no-recreate 如果容器已经存在了,则不重新创建,不能与 --forcerecreate 同时使用。
--no-build 不自动构建缺失的服务镜像。
-t, --timeout TIMEOUT 停止容器时候的超时( 默认为 10 秒) 。

停止服务后,改用后台方式运行。

docker-compose up -d 

这样用 docker ps 顺手查看下,发现几个相关的容器全都运行起来了。

3.验证

看起来,所有的容器服务都已经跑起来了。

哇哦,一步搞定。

四、总结

通过这个例程,可以非常典型地了解到 Docker 的省时省力。以往开发人员,需要事无巨细地将每个步骤告诉给运维部署人员。有了 Docker,一个 yml 文件丢过去,运行一条 docker 命令,立马整套自动安装、配置、运行。

End


iotisan 博客专家

发布了251 篇原创文章 · 获赞 253 · 访问量 84万+

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 低耦合高内聚 原则的应用

    这次主要是分享对软件设计中的“低耦合、高内聚”原则的一些个人体会,通过lorawan代码等实例分析,让大家对这个设计思想有一些具象的理解。

    twowinter
  • ChirpStack 学习笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理

    在 2.8 应用集成 InfluxDB 笔记中有记录一个无法连接 influxdb 容器的问题,这篇笔记做个深入分析。

    twowinter
  • Golang 库 - uuid

    UUID(Universally Unique IDentifier)是一个128位数字的唯一标识。

    twowinter
  • Docker循序渐进

    上一篇的演示中使用的都是默认登录了Root权限后的操作,而实际的开发运维情况下,我们一般极少使用Root权限,所以Docker提供了一个权限组,我们只需要把当前...

    李郑
  • Docker 循序渐进

    上一篇大致介绍了什么是Docker和其安装(以Ubuntu为例)。这篇来说说,Docker的基本操作。 非Root用户授权 上一篇的演示中使用的都是默认登...

    李郑
  • 传统企业微服务落地大法(1)-不够痛就别微服务

    在多家传统行业的企业走访和落地了微服务之后,发现落地微服务是一个非常复杂的问题,甚至都不完全是技术问题。

    物流IT圈
  • Docker搭建MySQL服务

    前面我们已经安装好了Docker,也简单了解了Docker。那么我们可以尝试搭建一个MySQL服务。

    双面人
  • 操作Docker容器

    在前面我们学习了docker镜像相关的知识,接下来再来学习另一个核心概念---容器。容器是镜像的一个运行实例,所不同的是,镜像是静态的只读文件,而容器则是带有运...

    编程思录
  • CCSK云安全认证-M3-管理云计算的安全性和风险

    管理云计算时要记住 的首要问题是,一个组织永远不能外包治理的责任,即使是使用外部供应商的情况下。 无论采用云计算或不采用云计算服务,这都是正确的 云计算影响治...

    一只特立独行的兔先生
  • 在类中取得当前文件所在的相对路径与绝对路径

    /**  * <p>Title: 在类中取得当前文件所在的相对路径与绝对路径</p>  *  * <p>Description: 在类中取得当前文件所在的相对路...

    阿敏总司令

扫码关注云+社区

领取腾讯云代金券