0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初心者によるDocker+WSL2+VScodeの環境設定がよーやくできた!

Posted at

私にはまだDockerなんてものは早いと思ったんですが、rbenvの設定が全然出来ず、「これはDockerでやったほうが早いわ!」と思って作成。
山浦先生のほぼ丸パクリです。よくわかんない人は見るべき。本当に分かりやすかったです。

本番環境には入れない予定。あくまで忘備録です。

先にメモ

Dockerfileとdocker-composeはGemfileとかと同じ位置に配置

Gemfile

sqliteからmysql2へ

Dockerfile

Dockerfile
FROM ruby:2.7

# 追記
ENV RAILS_ENV=production

# 必要なライブラリのNode.jsとyarnをインストールしている
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

WORKDIR /app
COPY . /app
RUN gem install bundler:1.17.2 && bundle update --bundler
RUN bundle config --local set path 'vendor/bundle' \
  && bundle install

# 以下追記
COPY start.sh /start.sh
RUN chmod 744 /start.sh
CMD ["sh", "/start.sh"]

docker-compose.yml

docker-compose.yml
version: '3'
# 2つのサービス(dbとweb)を定義する
services:
  db:
    image: mysql:8.0
    # mysqlの8.0から認証形式が変わったのでその設定
    command:  --default-authentication-plugin=mysql_native_password
    volumes:
      # ローカル:Dockerでsqlのデータを同期する設定
      # コンテナを削除してもデータを引継ぎが出来る
      - ./db/mysql_data:/var/lib/mysql
    # 環境変数の設定
    environment:
      # mysqlはパスワードが無いとエラーになるので設定
      MYSQL_ROOT_PASSWORD: password
  # webというサービスがrailsを示している
  web:
    # 参照先
    build: .
    # rails s でポートは3000、バインドはどこでもOKと設定
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    # 同期設定
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    # webサービスはdbサービスに"依存"しているという記述
    # これを記述するとIPアドレスを指定せずdbと書けば接続出来る
    depends_on:
      - db

database.yml

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test
  host: <%= ENV.fetch("APP_DATABASE_HOST") { 'db' } %>

production:
  <<: *default
  database: <%= ENV['APP_DATABASE'] %>
  username: <%= ENV['APP_DATABASE_USERNAME'] %>
  password: <%= ENV['APP_DATABASE_PASSWORD'] %>
  host: <%= ENV['APP_DATABASE_HOST'] %>

start.sh

start.sh
#! /bin/sh

# Dockerfileで普通はif分岐しないのでシェルスクリプトで対応
if [ "${RAILS_ENV}" = "production" ]
then
    bundle exec rails assets:precompile
fi

# PORTの値が無ければ3000を代入する
bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0

.gitignore

.gitignore
# 追記
.env
/db/mysql_data/*

いよいよ開始!

sudoコマンドかdockerグループを作成すべし。

ubuntu(WSL2)
$ docker-compose run web bundle exec rails new . --force --skip-bundle
$ docker-compose build
$ docker-compose run web rails db:create
$ docker-compose run web rails db:migrate
$ docker-compose up -d

localhost:3000に接続して開発環境の設定おわり!いやはや簡単だ~

Containerを閉じる

docker-compose downでコンテナの活動を止めて、docker system prune -aで使っていないコンテナを削除。
Dockerのアプリからも出来るからすごいなーと思ってます。

事前準備段階で上手くいかない

  • linuxをWSL1からWSL2に変更

  • Docker Desktopのアップデート

これが終わってからDocker Desktopの設定変更にとりかかる

Finish!

間違っていたら教えてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?