DockerでRailsの開発環境を作ってみる(その①)
cloud9でrailsの開発をしていたが、自分が普段使っているエディターで開発したいこともあり、ローカルにDockerとrailsの環境を作ることにしました。
環境情報
自宅PC
・Ubuntu 16.04.6 LTS
・Docker version 18.09.7
cloud9
・Ubuntu 18.04.3 LTS
・Docker version 19.03.5
Docker基礎知識
少し前にDockerをインストールして放置だったので、まずはDockerの再勉強から始めた。
下記のサイトを参考。
Docker入門(第一回)~Dockerとは何か、何が良いのか~ | さくらのナレッジ
自分なりにまとめてみる。
Dockerの良さ
・仮想マシンはゲストOSを用意して動かすが、DockerはホストOSは共有して、プロセスとユーザーを隔離してマシンが複数あるかのように動かすため軽量。
・環境設定をコード化したファイルを作成できるので、どこでも同じ環境が作れる。
・CIツールと組み合わせて、自動ビルド&デプロイ&テストができる。
Dockerインストール
下記を参考にインストールした。
Ubuntuにdockerをインストールする - Qiita
Rails環境構築
こっからは、実際にcloud9内で環境を作っていきます!
下記を参考に進めていきます。
DockerでRuby on Railsの開発をしよう - Qiita
以下の作業フォルダを作る。
Dockerfile(コピペしてrubyのバージョンを変更)
※rm -rf /var/lib/apt/lists/*の意味
ubuntuをdocker buildするときaptのキャッシュを削除し容量を小さくする - Qiita
ということらしい
docker-compose.yml(コピペして、コメントの削除とbuildとmysqlのバージョンを変更)
Gemfile(コピペしてrailsのバージョンを変更)
docker-composeでコンテナ起動
docker-composeのインストールがされてなかったのでインストール後に再度起動
結果エラー・・・
ERROR: for sampleruby_db_1 Cannot start service db: driver failed programming
external connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34
a7d2c9090e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy:
listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: for db Cannot start service db: driver failed programming external
connectivity on endpoint sampleruby_db_1 (ea47a718d7390b13f4638e7b34a7d2c9090
e070cc0cff06b04fe94169c0a8f15): Error starting userland proxy: listen
tcp 0.0.0.0:3306: bind: address already in use
ポート3306が使われてるからかなーと思い、調べたらmysqldがあるので削除。
またしてもTraceback (most recent call last):から始まる長いエラー・・・が出たので、バージョンを記事と合わせた。
ruby:2.6.3 → 2.3.1
mysql:8.0 → 5.7
'rails', '6.0.1' → 5.1.4
しかし、またTraceback〜以下略が出たので、いろいろ調べた。
docker-composeのバグを踏んだのでアップグレードした話 - mimikunの技術メモ
上記の記事を参考にしてアップグレートをしたが、それでも直らない・・・。
というわけで公式(Quickstart: Compose and Rails | Docker Documentation)を見ることにした。(最初にそれすべきだった)
続きはその②で成功したら報告します・・・