- Rails開発用イメージ
- Railsアプリを新規作成するために使用する
- コンテナ単体でRailsが動作する
- rootでないユーザで動作する(rootでも動作する)
sudo
が利用可能- productionステージにはRailsの動作に必要のないリソースを含めない
- entrypoint.sh を通さずに起動可能
- developmentステージでVS Codeのデバッグが使用可能
- developmentステージで
rails dbconsole
が使用可能
Key | Defaults | Description |
---|---|---|
USER | app | コンテナのLinuxユーザ名 |
UID | 1000 | コンテナのLinuxユーザのUID |
GROUP | $USER | コンテナのLinuxユーザのグループ名 |
GID | $UID | コンテナのLinuxユーザのGID |
APP_HOME | /workspace | Railsルート |
DB | - (sqlite3) | Railsで使用するデータベース。 sqlite3, mysql, postgresql, sqlserver |
Key | Defaults | Description |
---|---|---|
TZ | - | タイムゾーン |
RAILS_MASTER_KEY | - | Railsのmaster.key |
SA_PASSWORD | - | Sql Server の SA のパスワード |
-
docker-compose.yml を作成
version: "3.9" services: ap: build: context: .docker/ap ports: - "3000:3000"
-
コンテナを起動
docker-compose up
-
docker-compose.yml を作成
ローカルのカレントディレクトリを コンテナのWORKDIR(/workspace)にマウントして起動する。 (※ローカルに存在しないディレクトリをマウントすると所有者がrootになるので注意)
command: bash
により Rails server ではなくbashを起動するようにし、tty: true
によりコンテナを起動させ続け、stdin_open: true
により attach 可能にする。version: "3.9" services: ap: build: context: .docker/ap command: bash stdin_open: true tty: true ports: - "3000:3000" volumes: - .:/workspace
-
コンテナを起動
docker-compose up
-
Railsアプリを作成
ローカルのカレントディレクトリをマウントしているため 生成されたファイルがローカルに反映される。
-
Gemfileを生成
docker-compose exec ap bundle init
-
Gemfileを編集してrailsをインストール
Gemfile
gem "rails"
docker-compose exec ap bundle install
-
Railsアプリを作成
docker-compose exec ap bundle exec rails new .
-
コンテナのユーザのUID,GIDをローカルユーザ一致させることで回避できる。
-
ローカルユーザのIDを確認
$ id uid=1000(localuser) gid=1000(localuser) groups=1000(localuser)
-
コンテナビルド時に作成されるユーザのUID,GIDを指定
ap: build: context: .docker/ap args: USER: localuser UID: 1000 GROUP: localuser GID: 1000
-
コンテナをビルドし直して起動
docker-compose up --build