-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdocker-compose.yml
142 lines (132 loc) · 5.12 KB
/
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
version: "3.7"
# 共通化のための機能でプレフィックスとして"x-"をつける
# https://github.com/compose-spec/compose-spec/blob/master/spec.md#fragments
# Dockerfileで定義したアプリケーションコンテナの構築で必要な情報を提供する
x-app: &app
build:
context: .
dockerfile: ./.dockerdev/Dockerfile
args:
RUBY_VERSION: '2.6.6'
PG_MAJOR: '12'
NODE_MAJOR: '12'
YARN_VERSION: '1.21.1'
BUNDLER_VERSION: '2.1.2'
environment: &env
#「X: ${X:-smth}」は「コンテナ内のXという環境変数はホストマシンにXという環境変数の値があればそれを用い、なければ別の値を用いる」
# 「RAILS_ENV=test docker-compose up rails」のようにコマンドで別の環境を指定してサービスを実行できる
RAILS_ENV: ${RAILS_ENV:-development}
NODE_ENV: ${NODE_ENV:-development}
# tmpフォルダをDockerのtmpsfsマウントを行うことで高速化しています
# https://docs.docker.com/v17.09/engine/admin/volumes/tmpfs/
tmpfs:
- /tmp
# Rubyのサービスで共有するボリュームを提供する
x-backend-volumes: &backend-volumes
volumes:
# postgresの設定ファイル
- .dockerdev/.psqlrc:/root/.psqlrc:ro
# bashrcの設定ファイル
- .dockerdev/.bashrc:/root/.bashrc:ro
# :cachedはMacOSでのDocker環境の効率を高めるため
# https://docs.docker.com/docker-for-mac/osxfs-caching/
# https://www.docker.com/blog/user-guided-caching-in-docker-for-mac/#h.gwo2at29v042
- .:/app:cached
# bundleをDockerボリュームに配置しgemデータを永続化する
- bundle:/bundle
# Dockerボリュームに配置しホストマシンでディスク操作が重くなるのを回避
- rails_cache:/app/tmp/cache
- node_modules:/app/node_modules
- packs:/app/public/packs
# Rubyのサービスで共有する振る舞いを提供する
x-backend: &backend
<<: *app
# コンテナの標準入力をオープンしたままにする
stdin_open: true
# コンテナに疑似TTYを割り当てる(起動しっぱなしにする)
tty: true
environment:
# この*envは*appを読み込んでいないと使用できません
<<: *env
# redisにアクセスできるようの設定
REDIS_URL: redis://redis:6379/
# bootsnapのキャッシュディレクトリを永続化したディレクトリに設定
BOOTSNAP_CACHE_DIR: /bundle/bootsnap
WEBPACKER_DEV_SERVER_HOST: webpacker
# コマンドを使用した時のhistoryが永続化されるので再度コンテナにアクセスした時に
# 以前使用したコマンドを履歴から使用できるようになる
HISTFILE: /app/log/.bash_history
PSQL_HISTFILE: /app/log/.psql_history
# `rails credentials:edit`コマンドでcredentialファイルを管理するのに使用する
EDITOR: vi
# NOTE:説明が難しくてまだ理解できていないとりあえずメモリーに関係があるもの
MALLOC_ARENA_MAX: 2
# pumaのworker数設定
WEB_CONCURRENCY: ${WEB_CONCURRENCY:-1}
depends_on:
- postgres
- redis
services:
rails:
<<: *backend
<<: *backend-volumes
command: >
bash -c "bundle install &&
yarn install --check-files &&
bin/rake db:create &&
bin/rake db:migrate &&
rm -f tmp/pids/server.pid &&
bundle exec rails server -b 0.0.0.0"
ports:
- '3000:3000'
# railsコンテナにアクセスする時はこちらを使う
# docker-compose run --rm runner を実行(テストやマイグレーションやrakeタスク何でもOK)
# ただしテストを実行する時は RAILS_ENV=test bundle exec rspec --format progress で実行すること
runner:
<<: *backend
<<: *backend-volumes
command: /bin/bash
ports:
- '3002:3002'
sidekiq:
<<: *backend
<<: *backend-volumes
command: bundle exec sidekiq -C config/sidekiq.yml
redis:
image: redis:5.0-alpine
volumes:
- redis:/data
ports:
- 6379
webpacker:
<<: *app
<<: *backend-volumes
command: ./bin/webpack-dev-server
ports:
- '3035:3035'
environment:
<<: *env
# webpacker.ymlの設定を上書き、Webpack dev serverに「外部から」アクセスできる
# ようになります(デフォルトではlocalhostで実行されます)
WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
postgres:
image: postgres:12.1
volumes:
# ここのディレクトリに「/docker-entrypoint-initdb.d/」SQLファイルを置いておくと自動で実行してくれる
# 詳しくは「https://hub.docker.com/_/postgres」の「Initialization scripts」を参照すること
- .dockerdev/init_postgres/:/docker-entrypoint-initdb.d/
# psqlコマンドのプロンプトを見やすくするための設定
- .dockerdev/.psqlrc:/root/.psqlrc:ro
- postgres:/var/lib/postgresql/data
- ./log:/root/log:cached
environment:
PSQL_HISTFILE: /root/log/.psql_history
ports:
- '5432:5432'
volumes:
postgres:
bundle:
node_modules:
rails_cache:
packs:
redis: