作成する環境
全体像
Dockerfile作成
docker-compose.ymlファイル作成
docker-compose up でコンテナ作成
データベース作成(初めて起動する場合)
マイグレーションを適用する(初回)
host:3000にアクセスする。
Dockerfile作成
⇨Dockerfileとはコンテナの中にどんなプログラミング言語やOSの環境を作るかを定義するファイル.
今回はRubyとRailsの環境をコンテナ内に作成します。
FROM ruby:3.2.2 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs WORKDIR /myapp COPY Gemfile Gemfile.lock /myapp RUN bundle install
FROM.
⇨プログラミング言語やOSを記載.
今回はrubyの3.2.2というバージョンをコンテナ内で使ってねという意味
RUN.
⇨linuxコマンドでライブラリーなどをインストールするコマンド.
WORKDIR.
⇨コンテナ内で作業するディレクトリを指定している。コンテナ内に指定のディレクトリがない場合は作成してくれる。またその作成したディレクトリまで移動してくれる。
COPY.
左<ホストマシン>右<コンテナ内>という構文です.
ホストマシンのGemfileをコンテナ内の/myapp/Gemfileという場所にコピーするという意味
COPY Gemfile /myapp/Gemfile
2つ目のRUN.
⇨RUNコマンドが使われているのでbundle installしてという意味
bundle installはGemfileの中身をインストールしてという意味。
docker-compose.ymlファイル作成
docker-compose.ymlとは複数のコンテナを一括管理するためのファイル。 ↓railsとpostgresを一括管理
version: '3.8' services: db: image: postgres:12.18-alpine3.18 restart: always environment: POSTGRES_PASSWORD: password volumes: - "db-data:/var/lib/postgresql/data" web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" depends_on: - db volumes: db-data:
version.
⇨新しいものを使いたかったので3.8を使いました。他にもバージョンはありますので下記参照して下さい
services.
⇨ 起動するコンテナの設定の定義をするのがservices.
今回で言うと「db」、「web」と言うコンテナを作成するという意味。このコンテナ名の名前は任意につけることができる。
db
image.
⇨コンテナ内にどんな環境を作成するか.
今回はpostgres:12.18-alpine3.18という環境をdockerhubから取得したイメージから作成する。
enviroment.
⇨データベースを使用するときにuser名とパスワードが求められるのでその設定をする。postgresではuser名を記載しないとデフォルトでpostgresを指定していることになる。
[db]のvolumes.
⇨コンテナ内のデータをホストマシンに共有するためのもの。要はコンテナが破棄されデータが消えてもホストマシンにデータを残すための設定。
構文.
ホストマシンの名前付きボリューム:コンテナ内のデータが保存されているパス
名前付きボリュームとは?
⇨コンテナ内のデータを保存するための空間に名前をつけたのもの。今回はホストマシンの中のdb-dataという名前の空間にコンテナのデータを保存する。
docker-compose.ymlファイルの最後に記載されている以下でホストマシンの中に db-data:という名前付きボリュームを作成している。
volumes: db-data:
web
build.
⇨dockerfileまでのパスを指定し、そのdockerfileをbuildしイメージを作成。
command.
⇨コンテナが作成されたときに実行されるコマンド。サーバーを立ち上げています。
「web」volumes.
⇨ホストマシンとコンテナ内を同期してます。この設定のおかげでホストマシンの変更がリアルタイムでコンテナ内に反映される(逆も然り)。
ports.
⇨ローカルとコンテナ内のポートを作成
depends_on:.
⇨コンテナ間の依存関係を制御するオプション
データベース作成(初めて起動する場合)
コンテナ起動
docker compose up
データベース作成
docker-compose run web rake db:create
マイグレーションを適用
docker-compose run web rails db:migrate
6. host:3000にアクセスする。
http://localhost:3000
画面に「Task」という文字が表示されたら完成。