🐋

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

http://localhost:3000






GitHubで編集を提案

Discussion