使用 Slack 机器人开始使用 Docker

太长不看

    • Slack bot + Redisの環境をローカルに構築するのは大変><

 

    • RedisをコンテナにしたらどのOSでも一発で動かせる!

 

    • Slack botもコンテナにしたらRedisコンテナとの連携も簡単!

 

    Docker Composeを使えばBotとRedisを1つのコマンドだけで起動できるよ

让Slack机器人在Docker容器上运行。

在Slack等平台上运行的机器人,例如Hubot或Ruboty,通常使用Redis等键值数据库来实现数据永久化。
这次我们尝试在Docker容器上运行这个Slack bot(Ruboty)+ Redis。

Redis容器

关于Redis,官方提供了容器,通过使用它,无需在本地环境安装Redis,只需进行docker pull和docker run就能让Redis在任何环境下运行起来。

$ docker run  -p 6379:6379 -v /srv/docker/redis:/var/lib/redis redis:latest

机器人容器

基础图像

在这个例子中,由于使用Ruboty来实现机器人,所以基于Ruby环境来构建。

FROM ruby:2.2.4

工作目录

接下来,随意创建一个工作目录并进行移动。

ENV PROJECT /ruboty
RUN mkdir $PROJECT
WORKDIR $PROJECT

依赖关系

接下来,只需添加Gemfile和Gemfile.lock(如果是Node.js,则需要添加package.json)并解决依赖关系。之所以先移动这两个文件,是出于与”使用Docker快速执行bundle install”一文相同的原因。

ADD Gemfile $PROJECT
ADD Gemfile.lock $PROJECT
RUN bundle install

跑!

最後に,プロジェクト全体をコンテナに移してbotを起動する.

ADD . $PROJECT
CMD ["ruboty", "--dotenv"]

基本上是这样的顺序。 shì de .)

仅需要一种翻译选项:补全

native extensionに依存したGemなど利用する場合は適宜apt-get等でいい感じにしておく.
書く場所はたぶんGemfileまわりのことを処理する直前がいい.

示例

FROM ruby:2.2.4

ENV PROJECT /ruboty
RUN mkdir $PROJECT
WORKDIR $PROJECT

# RUN apt-get update && \
#     apt-get -y --no-install-recommends install <native_extensions>

ADD Gemfile $PROJECT
ADD Gemfile.lock $PROJECT
RUN bundle install

ADD . $PROJECT
CMD ["ruboty", "--dotenv"]

コンテナの起動・連携

Redis容器

你想要设定的主要是以下三个选项吗?

    • 名前

 

    • ポート番号

 

    • Data Volumeの設定

データを永続化させたいんやろ?

$ docker run -d --name redis -p 6379:6379 -v /srv/docker/redis:/var/lib/redis redis

机器人容器

虽然启动选项不像Redis那么多,但在Ruboty中仍需要传递Redis的URL。因此需要使用–link选项。

$ docker run -d --name ruboty --link redis

另外,给予Ruboty一个如下的.env文件(其他必要的环境变量可以先写在这里,之后根据需要进行适当调整)。

REDIS_URL="redis://${REDIS_PORT_6379_TCP_ADDR}:${REDIS_PORT_6379_TCP_PORT}"
RUBOTY_ENV=production

这样可以很好地协作了。

使用Docker Compose可以方便地启动。

目前为止,我已在Docker容器上成功完成了一个能够运行并持久化数据的机器人。但是,存在一个严重的问题:启动命令非常冗长,而且需要输入两个命令才能正常运行。

$ docker run -d --name redis -p 6379:6379 -v /srv/docker/redis:/var/lib/redis redis
$ docker run -d --name ruboty --link redis

为了解决这个问题,可以使用Docker Compose。Docker Compose可以将容器的配置和选项等信息整合到一个名为docker-compose.yml的文件中。

ruboty:
  build: .
  links:
    - redis
  command: ruboty --dotenv --load ./lib/ruboty/trello_reporter.rb
redis:
  image: hypriot/rpi-redis
  ports:
    - 6379:6379
  volumes:
    - /srv/docker/redis:/data
  restart: always

仅需一次命令即可启动!

$ docker-compose up

概要

我介绍了一个在Slack等平台上使用的bot的例子,通过引入Docker来实现更轻松的构建和管理。

在本地构建Slack bot + Redis的环境很困难><
把Redis放入容器中,就可以在任何操作系统上一次启动!
把Slack bot也放入容器中,与Redis容器的配合也很简单!
使用Docker Compose,只需一个命令即可启动Bot和Redis。

如果是个人操作的机器人的话,我觉得相对于使用Docker容器处理Web应用程序,采用这种方式也可以更轻松地进行引入。所以,对于对Docker不太了解或害怕的人来说,试试这种方法怎么样?

广告
将在 10 秒后关闭
bannerAds