🐋
Dockerを使った環境構築について
目的
Dockerを使用してアプリ開発をする上で、Dockerの環境構築を行ったのでその流れを記載します。(MySQL[Node.jsあり])
内容
目次参照
ディレクトリとファイルの準備
コマンド実行
・コマンドをまとめて実行
mkdir deploy_sample
cd deploy_sample
touch Dockerfile.dev
touch compose.yml
Dockerfile.devの記載
Dockerfile.dev
・Dockerfile.devファイルに追記
FROM ruby:3.2.3
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
RUN apt-get update -qq \
&& apt-get install -y ca-certificates curl gnupg \
&& mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& NODE_MAJOR=20 \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& wget --quiet -O - /tmp/pubkey.gpg 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
RUN apt-get update -qq && apt-get install -y build-essential libssl-dev nodejs yarn vim
RUN mkdir /myapp
WORKDIR /myapp
RUN gem install bundler
COPY . /myapp
compose.ymlの記載
compose.yml
・compose.ymlファイルに追記
services:
db:
image: mysql:8.0
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
ports:
- 3307:3306
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -uroot -ppassword
interval: 10s
timeout: 10s
retries: 3
start_period: 30s
web:
build:
context: .
dockerfile: Dockerfile.dev
command: bash -c "bundle install && bundle exec rails db:prepare && rm -f tmp/pids/server.pid && ./bin/dev"
tty: true
stdin_open: true
volumes:
- .:/myapp
- bundle_data:/usr/local/bundle:cached
- node_modules:/myapp/node_modules
environment:
TZ: Asia/Tokyo
ports:
- "3000:3000"
depends_on:
db:
condition: service_healthy
volumes:
mysql_data:
bundle_data:
node_modules:
Bootstrap
コマンド実行
・コマンドをまとめて実行
docker compose build
docker compose run --rm web gem install rails
docker compose run --rm web rails new . -d mysql -j esbuild --css=bootstrap
docker compose build
(docker-compose.yml ファイルに基づいてコンテナイメージをビルド)
docker compose run --rm web
(webを指定して実行し、終了したらコンテナを自動で削除)
gem install rails
(Railsをインストール)
rails new
(現在のディレクトリに新しいRailsアプリケーションを作成)
-d mysql
(データベースはMySQLを使用するように指定)
-j esbuild
(JavaScriptビルダーにesbuildを使用するように指定)
--css=bootstrap
(CSSフレームワークとしてBootstrapを使用するように指定)
config/database.ymlの修正
config/database.yml
・hostをdb
・passwordにpassword
を設定
(compose.ymlの内容に合わせます)
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
Procfile.devの修正
Procfile.dev
・web:に -b 0.0.0.0 -p 3000
をつける
web: env RUBY_DEBUG_OPEN=true bin/rails server -b 0.0.0.0 -p 3000
js: yarn build --watch
css: yarn build:css --watch
docker compose up
ターミナルで実行
・コンテナの起動
$ docker compose up
・コンテナを裏で起動
$ docker compose up -d
・コンテナが正常に動いているか確認
$ docker ps
Discussion