使用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. 文件结构
整体构成如下:
% 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 的链接