使用Docker来建立Rails+Elasticsearch的环境

首先

我想使用Docker构建Rails+Elasticsearch环境,所以我创建了它?

各种版本 (gè

・Mac操作系统
・苹果M1芯片
・Ruby 2.7版本
・Ruby on Rails 6.1.7版本
・docker容器 20.10.21版本
・docker-compose工具 2.12.1版本

步骤

    1. 文件结构

 

    1. 创建应用程序

 

    1. 构建镜像

 

    1. 连接数据库

 

    进行操作验证

1. 文件结构

整体构成如下:

% tree .
.
├── Dockerfile
├── Dockerfile-elasticsearch
├── Gemfile
├── Gemfile.lock
├── docker-compose.yml
└── entrypoint.sh

请创建六个文件?

touch Dockerfile
touch Dockerfile-elasticsearch
touch Gemfile
touch Gemfile.lock
touch docker-compose.yml
touch entrypoint.sh

每个部分的内容如下所示✍️

Dockerfile 用中文进行同义转述:一个选项就够了:

Dockerfile 文件

FROM ruby:2.7
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update -qq \
    && apt-get install -y nodejs yarn \
    && mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

Dockerfile-弹性搜索

FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.1
# 日本語用のプラグイン
RUN bin/elasticsearch-plugin install analysis-kuromoji
# 国際的に規約されてる文字用のプラグイン
RUN bin/elasticsearch-plugin install analysis-icu

docker-compose.yml 的翻译如下:

version: '3'
services:
   # elasticsearchコンテナ
  elasticsearch:
    build:
      context: .
      dockerfile: Dockerfile-elasticsearch
    environment:
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
    volumes:
      - esdata:/usr/share/elasticsearch/data
  # kibanaコンテナ
  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.1
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
  # DBコンテナ
  db:
    # M1対応
    platform: linux/x86_64
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/var/lib/mysql
  # Railsコンテナ
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
      - elasticsearch
    stdin_open: true
    tty: true
volumes:
  esdata:
  mysql-data:

Gemfile – 文件

source 'https://rubygems.org'
gem 'rails', '~> 6.1.4'

Gemfile.lock 文件

不需要在这里填写任何东西

入口点.sh

#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"

2. 制作应用程序

输入以下代码,创建应用程序。

% docker-compose run web rails new . --force --no-deps --database=mysql

3. 建立形象

请构建图像

% docker-compose build

与数据库建立连接

为了连接数据库,需要编辑config/database.yml。

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
  host: <%= ENV.fetch("MYSQL_HOST", "db") %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

接下来,我们将创建一个数据库,请在终端上运行以下代码。

% docker-compose run web rake db:create

5. 确认动作

在终端上,执行以下代码。

% docker-compose up

请确认是否已经实施,当每个结果返回时,请回复OK。

铁轨

本地主机:3000

基本上是指Kibana

本地主机:5601

弹性搜索

本地主機:9200
↓結果

{
  "name" : "xxxxxxxxx",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "xxxxxxxxx",
  "version" : {
    "number" : "7.10.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "xxxxxxxxx",
    "build_date" : "2020-12-05T04:58:07.655216Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

最终 (zuì

以上就是环境配置的全部内容了。如果有任何错别字,请联系我们?。

文献引用

・ https://qiita.com/mitsuooo/items/dc2dd995cc94e042e33b

・ https://qiita.com/mitsuooo/items/dc2dd995cc94e042e33b 的链接

广告
将在 10 秒后关闭
bannerAds