Open36

Rails6アプリ on Docker

ken1flanken1flan

自分のPCについて

  • MacBook Air
  • Apple M1
  • macOS Ventura 13.2.1

昔から使い続けてて、いらんもんがいろいろ気づかずに残ってそうなシロモノ。
DockerもIntel Macのときに入れてました。

ken1flanken1flan

Dockerをインストール

brewでやろうとしたがやめた

最初brewでインストールしました。
コンソールを眺めていたら、amd64のパッケージだったので :thinking: となりながら。
本家Dockerにはarm64のバイナリがありましたし。

まぁ、いっか…と思って起動してみたら、CPUアーキテクチャが違うぞとエラーが出ました。
OKしたら起動しようと努力していたようでしたが…メニューバーでクジラがずっとコンテナの積み下ろしを続けてました。
通常の手順で停止しようとしてもダメで、アクティビティモニタからDockerを強制終了しました。

本家Dockerからarm64版をインストール

そんな感じだったので、本家からarm64版をダウンロードしてインストールしました。
インストールは無事に済んだのですが…起動ができず…。
あちこち見てたら、factory resetができるダイアログが出ているのに気づき、ポチりました。

もう一度起動を試みると、ちゃんと起動しました。

チュートリアル

Dockerを起動すると、チュートリアルを進めてきました。
インストールでトラブっていたので、ちゃんと動くことを確認したく、やりました。

ごく普通に終わりました。

…ただ、チュートリアル中にDockerHubにイメージをpushしようとしたときに気づいたのですが、ずっと前に設定したアカウント情報がそのままになっており…factory resetとは?となりました。

それ以外は問題なく起動したので、よかったです。

ken1flanken1flan

雑な第1稿。
Mysql2::Error::ConnectionErrorが出た><

Dockerfile
FROM ruby:3.0.5

# RUN apt-get update -qq && apt-get install -y nodejs mysql-client
RUN apt-get update -qq && apt-get install -y nodejs

WORKDIR /app
COPY Gemfile Gemfile.lock /app/
RUN bundle install
COPY . /app
docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    platform: linux/amd64
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: rails6_docker_development
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      DATABASE_HOST: db
      DATABASE_USER: root
      DATABASE_PASSWORD: password
      DATABASE_NAME: rails6_docker_development
ken1flanken1flan

たぶん…これで直ると思うんだけど…

~/src/rails6_docker[Use_docker(;´▽`A]
13:04 $ git diff
diff --git a/config/database.yml b/config/database.yml
index 93fb88a..e8b260d 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -27,6 +27,7 @@ development:
 test:
   <<: *default
   database: rails6_docker_test
+  host: db

 # As with config/credentials.yml, you never want to store sensitive information,
 # like your database password, in your source code. If your source code is
~/src/rails6_docker[Use_docker(;´▽`A]
13:04 $

Docker上に反映されないのでしょんぼりしてます…。

ken1flanken1flan

Docker Desktopでコンテナをterminal経由で操作できるけど………
補完も履歴もなくてしんどい……。

ken1flanken1flan

ChatGPTに聞きました。
docker-composeでcommandを上書きして対応するのか…。my.cnfを生成して置きに行くよりいいかもしれません。

ken1flanken1flan

開発環境として使う際に期待していること

必須

  • エディタの変更がコンテナにすぐ反映される
  • データベースを使い慣れたクライアントで操作できる
  • コンテナ上のターミナルが操作しやすい
  • デバッガが使える

できれば

  • Dockerを導入していない場合と共存が可能である
  • github上の環境で開発できるようにしたい
ken1flanken1flan

VSCodeのDockerからAtattch Shellすると、なんにも設定してなかったのに、補完とか使えるようになってました…。Dockerfileでいろいろ入れなくてもいいんですね…。
(Docker Desktopのターミナルは何も設定されていないものでした。)

このターミナル上で問題なく、rspecもrubocopも動いてくれました。

ken1flanken1flan

stdin_openttyのオプションをtrueにしておいて…
docker psで名前を特定し、docker attachするとできました。

終了するときは1ctrl-p+ctrl+qでした。

若干不便なのは…
VSCodeだとターミナル上でctrl+qすると別の機能が立ち上がってしまって不便かもしれません…。

参照

https://docs.docker.jp/engine/reference/commandline/attach.html

https://github.com/ken1flan/rails6_docker/pull/1/commits/0152747b72f2aacd5774cecea4874be6113d78e5

ken1flanken1flan

vscode-rdbgはdockerといっしょには使えないのかな…。ちゃんと止まるように設定できなかったです。

ken1flanken1flan

必須は片付いたかなあ。

開発環境として使う際に期待していること

必須

  • エディタの変更がコンテナにすぐ反映される
  • データベースを使い慣れたクライアントで操作できる
  • コンテナ上のターミナルが操作しやすい
  • デバッガが使える

できれば

  • Dockerを導入していない場合と共存が可能である
  • github上の環境で開発できるようにしたい
ken1flanken1flan
  • Azure上の仮想Linuxマシンのコンテナ
  • コンテナのLinuxはデフォルトubuntuだけど、任意のものもOK、だけどwinとmacは使えない。
  • 接続はVSCode(デスクトップ/ブラウザ)、Jetbrainsのゲートウェイアプリケーション、Github CLI
  • Organizationが設定していればOrganizationに、なければ個人に課金
    - 無料枠…120時間/CPUコア(最低2コアなので最長60時間)、15GB
    - https://zenn.dev/dzeyelid/articles/a30a98618c40bd

https://docs.github.com/ja/codespaces/overview#what-is-a-codespace

ken1flanken1flan

エンジニアに高いマシンを配るより、GitHub Codespacesで払ったほうが安い場合も出てくるかもなぁ…。

40万円のマシン(3年くらい使う)→ 11111円/月
+開発環境のメンテナンス費 ?円

20万円のマシン(2年くらい使う)→ 8333円/月
github codespaces 2core → 3807円/月
+開発環境のメンテナンス費 ?円/開発者数

ken1flanken1flan

リポジトリトップのCodeのところからできるのか…!

ken1flanken1flan


docker-compose.yml の右クリックメニューから…Compose up!


動き出した…。


起動した…!

ken1flanken1flan


ブラウザで開く…!


ブロック…!

これ、アプリがブロックしてますね。
ローカルのブラウザから、codespacesで起動したコンテナに到達しているので、ひとまず安心。

ken1flanken1flan

config.hostsをnilにしたら先に進んだ…。

@ken1flan ➜ /workspaces/rails6_docker (main) $ git diff config/environments/development.rb
diff --git a/config/environments/development.rb b/config/environments/development.rb
index 66df51f..cf98293 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -59,4 +59,6 @@ Rails.application.configure do
   # Use an evented file watcher to asynchronously detect changes in source code,
   # routes, locales, etc. This feature depends on the listen gem.
   config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+
+  config.hosts = nil
 end
@ken1flan ➜ /workspaces/rails6_docker (main) $
ken1flanken1flan

かたづいたかな…?

開発環境として使う際に期待していること

必須

  • エディタの変更がコンテナにすぐ反映される
  • データベースを使い慣れたクライアントで操作できる
  • コンテナ上のターミナルが操作しやすい
  • デバッガが使える

できれば

  • Dockerを導入していない場合と共存が可能である
  • github上の環境で開発できるようにしたい
ken1flanken1flan

一旦、ここまででいっか…。
長くなっちゃったもんな…。