Docker+Rails環境で開発をする
環境
- macOS High Sierra 10.13.6
- Docker Community Edition Version 18.06.0-ce-mac70
- Ruby 2.4.1
- Ruby On Rails 5.1.4
みなさんこんにちは。
サーバサイドに出戻りエンジニアの金子です。
最近サーバサイドの開発をしていますが、しばらくiOSエンジニアとして動いていたため、いろいろ取り残されている感じがあります。
先日手始めに、Dockerで開発環境を構築してみました。
いまさらDockerでRails(API)+Rails(worker)+SQS+MySQLの環境を構築してみた
今回はDocker環境で開発する前に、こんな場面ではどうするんだろうと疑問に思っていたことと、その場面での実際の対応方法をご紹介したいと思います。
編集したソースコードをDockerコンテナに反映する
私の環境ではホストOSはMacでDocker for Macの環境のため、ソースコード編集はホストOS上のvimで行い、実行環境はDockerコンテナという構成になっています。
↑大雑把ですが上図のようなイメージです。
開発時には編集したソースコードをDockerコンテナに反映する必要がありますが、開発ディレクトリをDockerコンテナにマウントすることで編集時に即時反映することが可能です。
app: tty: true stdin_open: true build: context: . dockerfile: Dockerfile-dev container_name: app_container command: bundle exec shoryuken -R -C config/shoryuken.yml networks: - default volumes: - .:/app
開発環境一式を以前書いたブログにまとめたようにdocker-composeで管理しているので、docker-compose.ymlで上記のようにvolumesの設定をすることで、実行ディレクトリをそのままdockerのアプリ実行ディレクトリにマウントすることができます。
Dockerコンテナ上でrails c
ログファイルの確認は開発ディレクトリの中身をマウントしているので直接tailするなりして見ていますが、rails c
を使う場合、Dockerコンテナ内にしか開発環境がない状況ではコンソールにログインして実行する必要があります。
実際の方法を調べるまではサーバのようにコンテナに対してSSHログインするのかと思っていましたが、よく考えてみたら1プロセスで動いているコンテナにSSHサーバは入っていないので、SSHでログインするということはありませんでした。
コンテナ上でコマンドを実行する場合には以下のようにシェルにアクセスします。
docker exec -it app_container bash
上記の例ではapp_container
というDockerコンテナのbashに入れます。
あとはrails cコマンドを実行するのみです。
lanchester@3d2232e5186f:~$ bundle exec rails c
2018/11/7 追記
上記の方法は少し回りくどかったです。
以下のコマンドでrails c
実行できます。
docker exec -it api_container bundle exec rails c
Dockerコンテナ上でbinding.pry
デバッグ時などに使うと便利なrpy-railsですが、Dockerコンテナ上で実行されているRails上で実行するためにはコンテナのコンソールをアタッチします。
docker attach app_container
コンソールをアタッチすると、Railsのデバッグログが表示されて、コンソールでbundle exec rails s
を実行したのと同じ状態になります。
Control-P + Q
でアタッチしたコンソールから抜けることができます。
Control-D
でも抜けることは可能ですが、その場合コンテナ自体も停止します。
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境