ruby:latest使ってるので
当然最新rubyになりますが、、、笑
redisはおまけ,
自分はsidekiqに使うので入れておきました。
いらなかったら消してください。
ディレクトリ構造
app
├─ Dockerfile
├─ Gemfile
├─ Gemfile.lock
└─ docker-compose.yml
各ファイルの中身
Dockerfile
FROM ruby:latest
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 \
imagemagick \
build-essential \
libpq-dev \
postgresql-client
WORKDIR /app
COPY Gemfile Gemfile.lock /app/
RUN bundle install
docker-compose.yml
version: '3'
volumes:
db-data:
redis:
bundle:
node_modules:
services:
web:
build: .
command: >
bash -c "rm -f tmp/pids/server.pid &&
bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- '3000:3000'
volumes:
- '.:/app'
- 'bundle:/usr/local/bundle:cached'
- 'node_modules:/app/node_modules'
- '/app/vendor'
- '/app/tmp'
- '/app/log'
- '/app/.git'
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
depends_on:
- db
- redis
links:
- db
db:
image: postgres
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
volumes:
- 'db-data:/var/lib/postgresql/data'
redis:
image: redis:latest
command: redis-server
ports:
- 6379:6379
volumes:
- redis:/data
node_modules,vendor,tem,log,.gitはup高速化のためvolumeを作成しました。
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6.1'
Gemfile.lock
# 何も書かないでね
アプリ立ち上げ
appディレクトリにて以下のコマンドでapp立ち上げ
rspec使うので skip-testしてますがそこら辺はお好みで!
--forceは強制上書き、
--no-depsはリンクしたサービスを起動しない設定。
--webpackerはwebpacker:installをやってくれます。
docker-compose run web rails new . --force --no-deps --database=postgresql --skip-test --webpacker
webpackerがインストールできました!
となれば成功です。
次にdatabase.ymlを修正しましょう。
database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: product_register_development
test:
<<: *default
database: product_register_test
production:
<<: *default
database: product_register_production
username: product_register
password: <%= ENV['PRODUCT_REGISTER_DATABASE_PASSWORD'] %>
修正したら、db:createを実行
docker-compose run web rake db:create
createできました!
となったら
docker-compose up
でcontainerとserver立ち上げて成功です!
docker-compose exec web bash
でコンテナ入って確認してみましょう。
※僕はtest_appという名前でアプリを作成しました。
CMDとかENTRYPOINTとかcommand:とかvolume:とかcontainer_name:とか好きにカスタマイズしてください。
日々精進。