» Go:使用ElasticSearch构建全文检索API » 4. 部署 » 4.2 Docker Compose

Docker Compose

Docker Compose 是一个用于定义和运行多容器的 Docker 工具。它允许你使用 YAML 文件配置应用程序的服务、网络和卷,然后使用单个命令启动所有运行所需的容器,包括应用程序的依赖中间件和服务。

注意

安装 Docker Compose 最方便最推荐的方式是安装 Docker 桌面版。Docker 桌面版包含了 Docker 引擎,Docker CLI 和 Docker Compose。
按需安装 Compose:https://docs.docker.com/compose/install/

添加 compose/docker-compose.yml:

services:
  lr-fulltext-books:
    build:
      context: ../
      dockerfile: Dockerfile
    ports:
      - 8080:8080
    volumes:
      - ./config.yml:/home/.server/config.yml
    depends_on:
      es:
        condition: service_started
  es:
    image: bitnami/elasticsearch:latest
    ports:
      - 9200:9200
    volumes:
      - ~/lr-es-data:/bitnami/elasticsearch/data

添加 compose/config.yml:

app:
  port: 8080
  page_size: 10
search:
  address: "http://es:9200"
  index: "book_idx_cn"

运行所有服务:

cd compose
docker compose up

你将看到如下内容:

[+] Running 2/2
 ✔ Container compose-es-1                 Recreated                                                                                                                                                                                   0.1s 
 ✔ Container compose-lr-fulltext-books-1  Created                                                                                                                                                                                     0.0s 
Attaching to es-1, lr-fulltext-books-1
es-1                 | elasticsearch 15:18:14.49 INFO  ==> Welcome to the Bitnami elasticsearch container
es-1                 | elasticsearch 15:18:14.51 INFO  ==> ** Starting Elasticsearch setup **
...

你不再需要手动安装设置 Elasticsearch。它们都被 docker compose 搞定了。

如果没有数据的话,放入测试图书数据。

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"哈利·波特与魔法石","author":"J.K. 罗琳","published_at":"1997-06-26","content":"一个年轻男孩发现自己是一名巫师,并开始在霍格沃茨魔法学校接受教育,在那里他揭开了“魔法石”的秘密。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"杀死一只知更鸟","author":"哈珀·李","published_at":"1960-07-11","content":"小说设置在大萧条期间的美国南部,通过年轻的斯考特·芬奇的眼睛探索了种族不义和道德成长的主题。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"魔戒","author":"J.R.R. 托尔金","published_at":"1954-07-29","content":"一个名叫弗罗多·巴金斯的霍比特人踏上了一场艰险的旅程,摧毁一枚强大的戒指,并拯救中土世界,免受黑暗领主索伦的侵害。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"麦田里的守望者","author":"J.D. 赛林格","published_at":"1951-07-16","content":"霍尔顿·考菲尔德在被驱逐出预备学校后,讲述了他在纽约市的经历,探讨了疏远、身份和纯真等主题。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"牧羊少年奇幻之旅","author":"保罗·柯艾略","published_at":"1988-01-01","content":"牧羊人圣地亚哥从西班牙前往埃及,寻找埋在金字塔附近的宝藏。沿途,他学到了追随梦想的重要性。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"饥饿游戏","author":"苏珊·柯林斯","published_at":"2008-09-14","content":"在一个反乌托邦的未来,青少年被迫参加名为饥饿游戏的电视死斗。凯特尼斯·艾弗丁自愿代替妹妹参加,并成为叛乱的象征。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"1984","author":"乔治·奥威尔","published_at":"1949-06-08","content":"温斯顿·史密斯生活在一个由党领导的极权社会中。他反抗压迫性的政权,但最终屈服于其控制。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"龙纹身的女孩","author":"斯蒂格·拉尔森","published_at":"2005-08-01","content":"记者米卡埃尔·布隆奎斯特和黑客丽斯贝特·萨兰德调查了一个富裕家庭的年轻女子失踪案,揭示了黑暗的秘密和腐败。"}' \
  http://localhost:8080/books

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"消失的女孩","author":"吉莲·弗林","published_at":"2012-06-05","content":"在他们的第五个结婚纪念日上,尼克·邓恩的妻子艾米失踪了。随着媒体的狂热报道和怀疑的增加,尼克发现自己陷入了一场欺骗和背叛的旋涡中。"}' \
  http://localhost:8080/books

现在,如果你访问页面 http://localhost:8080/books?q=new+york+girl ,你将看到所有相关文档。

使用其他查询尝试 http://localhost:8080/books?q=boy+mystery ,看看有什么结果。

你的全文检索 API 服务成功啦! 📢