💎

RailsのプロジェクトをDockerコンテナ上に作成する

公開日
8日前
2024-09-21
更新履歴

ディレクトリ構成

ディレクトリ構成
  • Project Root
    • Taskfile.yaml
    • docker
      • docker-compose.yml
      • server
        • Dockerfile
      • server
        • .devcontainer
        • devcontainer.json

      Taskfile.yml作成

      Taskfile.yml
      version: '3'
      
      tasks:
        'dev:build':
          desc: 開発環境コンテナビルド
          cmds:
            - docker-compose -f docker/docker-compose.yml up -d --build
        'dev:start':
          desc: 開発環境コンテナ起動
          cmds:
            - docker-compose -f docker/docker-compose.yml up -d
        'dev:stop':
          desc: 開発環境コンテナ停止
          cmds:
            - docker-compose -f docker/docker-compose.yml down

      Dockerfile作成

      docker/server/Dockerfile
      FROM ruby:3.2.4-slim
      WORKDIR /tmp
      RUN apt-get update && apt-get install -y \
          build-essential \
          curl \
          libmysqld-dev \
          wget \
          git \
          vim \
          nano \
          zsh \
       && apt-get clean \
       && rm -rf /var/lib/apt/lists/* \
       && gem install bundler
      docker/docker-compose.yaml
      version: "3"
      
      name: "project"
      
      volumes:
        db_data:
        redis_data:
        server_bundle:
        server_workspace_root:
      
      services:
        server_workspace:
          build: server
          command: sleep infinity
          environment:
            BUNDLE_APP_CONFIG: /var/workspace/server/.bundle
          working_dir: /var/workspace/server
          volumes:
            - ../:/var/workspace/:cached
            - ~/.ssh/:/root/.ssh/
            - server_bundle:/usr/local/bundle
            - server_workspace_root:/root/
          ports:
            - 3000:3000
        db:
          image: mysql:8.0
          volumes:
            - db_data:/var/lib/mysql
          environment:
            MYSQL_ROOT_PASSWORD: root
          ports:
            - 3306:3306
        redis:
          image: "redis:7"
          volumes:
            - "redis_data:/data"
          ports:
            - "6379:6379"

      Devcontainerの設定

      server/.devcontainer/devcontainer.json
      {
        "name": "project-server",
        "dockerComposeFile": "../../docker/docker-compose.yml",
        "service": "server_workspace",
        "workspaceFolder": "/var/workspace/server",
        "customizations": {
          "vscode": {
            "extensions": [
              "castwide.solargraph",
              "donjayamanne.githistory",
              "EditorConfig.EditorConfig",
              "esbenp.prettier-vscode",
              "GitHub.vscode-pull-request-github",
              "KoichiSasada.vscode-rdbg",
              "MateuszDrewniak.ruby-test-runner",
              "Shopify.ruby-lsp"
            ]
          }
        },
        "shutdownAction": "none"
      }

      Railsプロジェクト作成

      Gemfileを作成するために次のコマンドを実行します。

      Terminal
      bundle init

      Gemfileを修正

      Gemfileの次の記述のコメントを外して有効にします。

      Gemfile
      gem 'rails'

      rails gemをインストール

      Terminal
      bundle config set path 'vendor/bundle'
      bundle install

      rails new

      Terminal
      bundle exec rails new . -B --api -d mysql --skip-test

      rails new のオプション

      オプション説明
      --apiAPIモードでインストール
      --skip-testminitestのスキップ
      -Bbundle install のスキップ
      -d mysqlmysql を使用する

      .gitignore修正

      .gitignore に以下を追記する。

      .gitignore
      vendor/bundle

      Dotenvを追加

      Gemfileの次の記述を追加して bundle install を実行します。

      Gemfile
      group :development, :test do
        # ...
        gem "dotenv-rails"
      end

      DBセットアップ

      Terminal
      bundle exec rails db:setup
      bundle exec rails db:migrate

      開発サーバー起動

      Teminal
      bundle exec rails s -b 0.0.0.0