プログラミング

Dockerfile、docker-compose.ymlの中身で使われるコマンドや意味の説明

コンテナ

仮想環境そのもの。

イメージ

Dockerコンテナを実行する際に必要なもの。

Dockerfile

Dockerのイメージを自動で作成してくれるファイル。

Docker compose

複数のコンテナからなるサービスを構築、実行する手順を自動的にし、管理を用意にする機能。“`docker compose hogehoge“` というコマンドを実行することで、そのファイルから設定を読みこんえ全てのコンテナを起動することができる。

Dockerfileの中身でよく使われるコマンド

FROM

使用するイメージとバージョン

-qq

エラー以外何も吐かないようにする

-y

全てyesで実行する設定。これなしだと途中で止まってしまうので自動的でイエスで進んでもらうために必要。

RUN

コマンドの実行

WORKDIR

作業ディレクトリ先の設定

COPY

コピー元とコピー先のファイルまたはディレクトリを指定

docker-compose.ymlで使われるコマンド

service

アプリケーションを動かすための各要素のこと。
通常はwebとdb(Mysql、Postgresql)と名前をつける。

rm -f tmp/pids/server.pid

pidはプロセスIDのこと。pidはそもそも開発用サーバーを起動するときにtmp/pids/server.pidに書き込まれる。終了するときにserver.pidが削除される。
server.pidが書かれているとサーバーが起動中と判断される。rails sが実行できないときにserver.pidを削除するとうまくいく可能性がある。終了する際にはrmによって削除する必要がある。

ports

ports:
- "3000:3000"

コンテナ内のポート3000番をホストの3000番にマッピングする。コンテナ内に立てたサーバにhttp://localhost:3000でアクセスできるようになる。
これがないとコンテナにアクセスできない。
例えば、下記のようにするとhttp://localhost:3001でコンテナ内に立てたサーバにアクセスできる。

ports:
- "3001:3000"

 

volumes

volumes:
- ./db/mysql/volumes:var/lib/mysql

 

データを永続化するためにある。
コンテナは消すことができるが、仮装環境を捨ててしまうとデータベースも一緒に破棄されてしまう。volumesを捨てるとデータを永続化することができる。
ホストの./db/mysql/volumesをコンテナ内の/var/lib/mysqlにマウント(同期)するという意味。
Dockerのコンテナとローカルのファイルを同期している。つまりdockerのコンテナが破棄されてもローカルのファイルが残っているという事になる。

.がホストのディレクトリ全てを意味している。