【32日目】Dockerの導入
今日の学習はこちらのUdemy動画を見ながら、Ruby on Railsについて学習していきます。https://www.udemy.com/rails-kj/learn/lecture/9307614#questions
全部の内容を仔細に書くのは難しいので、あとあと確認したいなという内容を箇条書きでメモしていくスタイルを試みます。
なお、すでにRuby部分は履修しており、今日はDockerの導入など、開発環境構築からになります。
30 Dockerについて
《概要》
従来のVirtualBoxなどに変わり最近使用される開発環境
ドットインストールで習ったのはVirtualBoxだったので、2017年以降の流行りなのだと思われる。
起動スピードがはやく、AWSなどのクラウドサービスにコンテナを移行する機能をサポートしているのが便利。
構成としては、PC上にMoby LinuxによるDockerの実行環境を作成し、その中にコンテナと呼ばれるRubyの実行環境を作成する。この中身を「イメージ」と呼び、Rubyそのものやライブラリ、Linuxが動作するためのファイルなどが含まれている。
このコンテナに、PC上にあるRails用のフォルダをマウントすることで、仮想環境上で開発が可能になるとのこと。
《疑問》
マウントというのが技術的にどのようなことなのかよくわからなかった。
単にファイルをコピペするだけではないという感ではあった。
このあと教えてくれるかもしれない。
31〜33 インストール
特に困らず
34 Dockerfileの解説
先生が用意してくれたファイルによってRubyの開発環境をDLして使用するようだ。
Dockerfileを実行すると、
Ruby2.4.5を使用して、
/appを作成し、その中に必要なファイルをコピーし、bundle installし、
Dockerfileの置いてあるディレクトリの中身を/appにコピーしてくれる。
35 GemfileとGemfile.lock
Gemfileはgemの一覧を作ってbundle installしたら一気にgemを導入できる。
Gemfile.lockは、インストールしたgemの名前とバージョンが記される。
他の開発者と開発環境を揃えるために使う。
installする際には依存関係にあるgemもinstallしてくれる。
36 docker-compose.ymlとDockerの設定
ここには複数のコンテナ設定に従ってまとめて起動するための設定が入っている。ymlとは構造化されたデータを表現するためのフォーマット
この動画では、Railsを実行するコンテナと、MySQLサーバを実行するコンテナの2つを起動する。
#バージョン設定
version: '3'
services:
#Rails用コンテナ
web: #サービス名 データ通信で使用できる。
build: . #buildはイメージを作成すること
# . はdocker-compose.ymlと同じディレクトリにあるファイルをもとにイメージを作成することを意味する。
command: bundle exec rails s -p 3000 -b '0.0.0.0'
# command はコンテナを立ち上げた時の処理を示す
volumes: #volume はデータ保存領域のこと。
#前者を後者にマウントする = 共有する
- .:/app
ports: # コンテナ外の公開するポート番号 : コンテナ内部の転送先ポート番号
- 3000:3000
depends_on: # 先に起動するサービスを指定
- db
tty: true # この二つはRailsでpryを使用してデバッグする際に必要な設定
stdin_open: true
#MySQLサーバ用コンテナ
db:
image: mysql:5.7
volumes: #下で定義したPC内部のデータ保存領域をコンテナ内部にマウントしている
- db-volume:/var/lib/mysql
environment: #コンテナ内の環境変数を定義
MYSQL_ROOT_PASSWORD: password
volumes: #PC内部のデータ保存領域名を定義
db-volume:
何もしないとデータはコンテナ内部に保存されるが、それだとコンテナが消えてしまうとデータも消滅するため、PC内部にデータを保存し、それをマウントすることでDockerに反映している。
環境変数:OS上で保持される変数のこと。
38 Dockerの実行
docker-compose run web rails new . --force --database=mysql
設定ファイルが置いてあるディレクトリまでコマンドラインで移動して、上記コマンドを実行する。
・docker-compose run web はdocker-compose.ymlファイルに定義したwebサービスのコンテナで後に続くコマンドを実行する意味。
・rails new は指定したディレクトリにRailsファイルを作成する。. なので、いまいるディレクトリ上に作成される。
・--force は既存のファイルを上書きする。
・--database=mysqlはMySQLを設定するオプション
作成されたファイルやgemをコンテナ内に取り込むためにビルドする。
docker-compose build
ビルドしたら、config/database.ymlを編集し、データベースに接続するための設定を行う。
docker-compose.ymlで設定したパスワードとhost( 今回はdb )とする。
docker-compose up d
upコマンドを入力し、ドッカーを立ち上げ、次のコマンドによってデータベースを作成する。
docker-compose run web bundle exec rake db:create
一度docker-compose stopでコンテナを止めて、docker-compose startで再起動し、localhost:3000にアクセス。
=> Yay! You're on Rails!
この記事が気に入ったらサポートをしてみませんか?