前回、Dockerの基本的な使い方をPostgreSQLを例に紹介しました。今回は、より実践的なRails環境構築する方法を紹介します。ここでDockerのポリシーについて説明します。Vagrantでは1つのVM内に、PostgreSQLとRailsを同居させて紹介しました。Dockerでは1コンテナ・1プロセスポリシーがありPostgreSQLとRailsは別のコンテナ、つまり別のDockerfileで構築します。このポリシーは各ソフトウェアを同居させると、同じ依存ライブラリ使うけどバージョン違うので問題が発生する。いうケースを避けるためでもあるようです。前回はmy_project直下にDockerfileを配置しました。今回はPostgreSQLとRails用の2つのDockerfileを準備するので、まずDockerfile置き場を作ります。(作らなくても動きますが、作っといたほうがわかりやすいです。my_project/docker_file配下にDockerfile_postgresという名前のファイルで配置します。公式のRuby2.4イメージがベースです。Railsを動かすにはNode.jsが必要です。このRuby公式イメージにNode.jsをRUNコマンド等を使ってインストールするのもよいですが普通に手間です。そこでDockerにはマルチステージビルドという機能を使います。これはベースイメージに局所的に別のベースイメージを繋げて利用できます。--from=nodeで連結しました。これでNode.jsをインストールせずとも、Node.jsを利用できます。my_project/docker_file配下にDockerfile_railsという名前のファイルで配置します。3000yarnのバージョンは新しくなっているのかもしれません。githubのDockerfile(8/stretch/Dockerfile)のYARN_VERSIONを確認してください。startして起動するのは不便です。Composeという機能を利用して、起動・終了を一括で行えるようにします。こちらはDockerfileとは異なりmy_project直下にdocker-compose.ymlという名前のファイルで配置します。truePostgre用のDockerfile_postgresを指定、ポートを15432で開放。Railsも同様に指定しポートを3000で開放depends_onでPostgreコンテナが起動してからRails起動するように指定linksでRailsからpostgres:5432でPostgreSQLにアクセスできるように指定Windows側にあるRailsソースmy_project/srcをコンテナの/wwwにマウント起動順序を指定したり、コンテナ間接続ができるのは便利ですね。Compose使い方ビルドPostgreSQLとRails用コンテナ作成のために一度にビルドします。今回はあくまでVagrantでRails環境を構築する方法の紹介なので省きます。上記のように、基盤構築担当者が各Dockerfileとdocker-compose.ymlを準備します。Compose起動してもらえば、あっというまに開発環境が整えられます。composeで複数コンテナを一括管理・起動コンテナ間通信を簡単に実現と準備の手間や保守性にも優れていることがおわかりいただけたと思います。(settings.json)20年以上の実績とノウハウをもとにお客様のニーズに最適な方法を提案する株式会社クリエーション・ビューのブログです。