- dockerをインストール している前提とする
- docker compose で動かす
- docker compose は、複数コンテナを1単位として管理するツール。例えば、
rails
, postgres
, redis
をひとまとまりで管理するなど。
Dockerfile を作成#
- rails アプリのルートディレクトリに以下の
Dockerfile
を作成する
ARG RUBY_VERSION=3.4.1
FROM ruby:${RUBY_VERSION}
ARG APP_NAME=app_name
ARG APP_PATH=/${APP_NAME}
WORKDIR ${APP_PATH}
COPY . .
RUN bundle install
EXPOSE 3000
CMD rails server -b 0.0.0.0
FROM ruby:${RUBY_VERSION}
WORKDIR ${APP_PATH}
- この後の作業ディレクトリの指定
RUN mkdir ${APP_PATH} && cd ${APP_PATH}
としなくていい
COPY . .
COPY {ホストのディレクトリ} {コンテナのディレクトリ}
として、ホストのファイルをコンテナにコピーする
- 今回は、両方ともカレントディレクトリ
RUN bundle install
EXPOSE 3000
- 公開ポートを指定する
EXPOSE
自体は何もしない。ドキュメンテーションのための記述。
- このイメージを使う人が、 Dockerfile を見るだけでコンテナ側のポートの設定ができる
- なので無くてもいい
CMD rails server -b 0.0.0.0
- コンテナ起動時のデフォルトのコマンドを指定する
- コンテナ起動時にコマンドを渡されたら、渡されたコマンドで上書きされる
- Dockerfile に1つだけ記述するもの
- コンテナの実行プロセスになる
docker-compose.yml を作成#
- rails アプリのルートディレクトリに以下の
docker-compose.yml
を作成する
services:
web:
build:
context: .
network: host
ports:
- 127.0.0.1:3000:3000
services
- 管理するコンテナの一覧を記載
build
- docker ビルドの設定
context
- ビルドを実行するディレクトリ
dockerfile
を指定しない場合、Dockerfile が存在するディレクトリを指定
network
- ビルド時のネットワークを指定
- デフォルトだと外部との通信がうまくいかなったので
host
を指定した
ports
{ホストのポート}:{コンテナのポート}
でポートの公開を設定
- 単に
3000:3000
だと 0.0.0.0
に公開するので、一旦 127.0.0.0.1
に限定した