使用Docker在Rails上进行演示,试试看…
首先
)只需要一个选择,原文如下:
(_
 ̄ ̄  ̄ 、
/ `ヽ
,-、 -=- -=- ‘,_
r´ γ  ̄ ヽ γ ̄ヽ ‘,ヽ.
{ i=={ l l.=l l .} | i__ Docker演示!
. i < ̄`ヽ、 弋ゝ _ノ 弋ゝ ノ >´ , ィ´
弋__ > 、 ヽ、  ̄  ̄ / /ヽ
| ` ー }
ゝ、 /
`ー -、 – ______ , ィ´
/ l / |>く| \ ハ
/_ .l > l:l l:l l l ハ
, ‐´ `ヽ、l l:l l:l l lー、
γ ヽ.’, l:l l:l l l ヽ
{ }. ‘, l:l l:l .l l }
‘, / ‘, l:l l:l l l /
我想做的事情 (Wǒ zuò de
-
- Postgresql と Redis がつながる Rails を Docker の上でつくりたい
Docker
できるだけ軽く、速く、安全なコンテナを作る
Ubuntu で Docker を使うと権限関連がひどいことになるので、それを防ぎたい
PostgreSQL
Rails でマスタとレプリカを使いたいので、コンテナは2台は必要
Redis
Rails でキャッシュと Sidekiq 用に2台ほしい
Ruby on Rails
快適な Rails 開発環境を手に入れたい
关于开发环境的事项
$ uname -a
Linux def 5.4.0-29-generic #33-Ubuntu SMP Wed Apr 29 14:32:27 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ docker -v
Docker version 19.03.8, build afacb8b7f0
$ docker-compose -v
docker-compose version 1.25.0, build unknown
代码 (Mandarin Chinese)
在 Github 的存储库中可以找到。
首先,创建一个 Ruby 的 Dockerfile。
FROM node:14.1.0-alpine3.11 as node
FROM ruby:2.7.1-alpine3.11 as ruby
ENV LANG=C.UTF-8
ENV RAILS_ENV=development
ENV RACK_ENV=development
ENV USER_NAME=un
ENV GROUP_NAME=gn
ENV USER_ID=1000
ENV GROUP_ID=1000
WORKDIR /usr/www/com/
COPY --from=node /usr/local/bin/node /usr/local/bin/
COPY Gemfile Gemfile.lock yarn.lock package.json ./
RUN addgroup -S ${GROUP_NAME} -g ${GROUP_ID} && \
adduser -S ${USER_NAME} -G ${GROUP_NAME} -u ${USER_ID} && \
apk update && apk upgrade && \
apk add build-base tzdata libxml2-dev curl imagemagick postgresql-client postgresql-dev yarn && \
if [ ${RAILS_ENV} != "production" ]; then apk add git chromium-chromedriver chromium zlib-dev xvfb wait4ports xorg-server dbus ttf-freefont mesa-dri-swrast curl udev graphviz; fi && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
gem update --system && \
if [ ${RAILS_ENV} = "production" ]; then bundle config set without 'production'; fi && \
bundle install --jobs 20 --retry 5 && \
bundle update && \
yarn install && \
yarn upgrade && \
yarn cache clean
USER 1000:1000
下一个步骤是使用 Docker Compose 进行配置建立。
version: '3.7'
volumes:
pg-volume:
redis-sidekiq-volume:
redis-cache-store-volume:
networks:
main:
driver: bridge
services:
database-master:
image: postgres:12-alpine
ports:
- 54321:5432
environment:
POSTGRES_USER: asdf
POSTGRES_PASSWORD: qwer
POSTGRESQL_REPLICATION_MODE: master
TZ: Etc/GMT
volumes:
- pg-volume:/var/lib/postgresql/data
networks:
main:
database-replica:
image: postgres:12-alpine
ports:
- 54322:5432
environment:
POSTGRES_USER: asdf
POSTGRES_PASSWORD: qwer
POSTGRESQL_REPLICATION_USER: asdf
POSTGRESQL_REPLICATION_PASSWORD: asdf
POSTGRESQL_MASTER_HOST: database-master
POSTGRESQL_REPLICATION_MODE: slave
POSTGRESQL_MASTER_PORT_NUMBER: 5432
TZ: Etc/GMT
depends_on:
- database-master
networks:
main:
redis-cache-store:
networks:
main:
image: redis:5.0.7
environment:
TZ: Etc/GMT
ports:
- 6379:6379
volumes:
- redis-cache-store-volume:/var/lib/redis
networks:
main:
redis-sidekiq:
networks:
main:
image: redis:5.0.7
environment:
TZ: Etc/GMT
ports:
- 6380:6379
volumes:
- redis-sidekiq-volume:/var/lib/redis
networks:
main:
application-server:
user: 1000:1000
build:
context: ./rails/
target: ruby
ports:
- 3001:3000
volumes:
- ./rails/:/usr/www/com/
stdin_open: true
tty: true
environment:
REDIS_CACHE_STORE_URI: 'redis://redis-cache-store:6379/0'
REDIS_SIDEKIQ_URI: 'redis://redis-sidekiq:6379/0'
DATABASE_MASTER_HOST: 'database-master'
DATABASE_MASTER_USERNAME: 'asdf'
DATABASE_MASTER_PASSWORD: 'qwer'
DATABASE_MASTER_PORT: 5432
DATABASE_REPLICA_HOST: 'database-replica'
DATABASE_REPLICA_PASSWORD: 'qwer'
DATABASE_REPLICA_USERNAME: 'asdf'
DATABASE_REPLICA_PORT: 5432
command:
/bin/sh -c "yarn install --check-files && bundle update && bundle exec rails db:migrate:reset && bundle exec rails s -p 3000 -b '0.0.0.0' --early-hints"
links:
- redis-cache-store
- redis-sidekiq
- database-master
- database-replica
networks:
main:
确认动作
$ docker-compose up -d && xdg-open http://localhost:3001/
没有做到的事情
-
- リバースプロキシが入っていない
-
- Docker
Trivyでイメージの安全性を確認する。
マルチステージビルドを活用して、コンテナを軽量化する
Production環境で使えるイメージには程遠い…
最后
计算机科学的进步和发展是需要付出牺牲的。
请引用相关文献。
-
- https://gist.github.com/satendra02/1b335b06bfc5921df486f26bd98e0e89
-
- https://naoty.dev/posts/87.html
- https://ruby-rails.hatenadiary.com/entry/20141102/1414854000
更新纪录
- 2020-05-07: Dockerfile を更新