概要
Dockerイメージだけでは不足している情報をコンテナに付け足すための設定ファイル。
コンテナ上でのプロセス作成を効率化するために用いられる。
例えば「dockerを用いてCentOSベースのコンテナを作り、その上にapacheサーバーを立ててphpでhoge
と表示する」ことを考えた場合、Dockerイメージに含まれているのはCentOSの情報のみであり、apacheとphpのインストールやサーバーの起動、phpファイルのコンテナへのコピーなどといった作業は手動で行うことになる。
しかし、これらの作業の手順を記したDockerfileを作成しておき、そこからコンテナを作成することで、上記の作業を全て自動で実行することができる。
Dockerファイルを用いたコンテナ作成の手順
- Dockerファイルの作成
- 必要なファイル(今回でいえば
hoge
と出力するためのphpファイル)の用意 - DockerファイルからDockerイメージを作成
- コンテナの作成
Dockerファイルの作成〜具体例
FROM centos:centos7
RUN yum -y install httpd php
COPY test.php /var/www/html/
CMD ["/usr/sbin/httpsd","-DFOREGROUND"]
=========注意=============
- Dockerファイルのファイル名はDockerファイルとしてください。
- Dockerファイルはホームディレクトリ以外に作成してください。通っているパスの関係でdockerイメージの作成(後述)に支障が出る場合があります。
=========注意終わり=========
Dockerファイルの作成〜具体例の解説
FROM centos:centos7
centos:centos7
というdockerイメージをベースにしてコンテナを作ることを宣言。
RUN yum -y install httpd php
apache
とphp
のインストール。
FROMで指定したイメージに対して行う作業にはRUN
コマンドをつける必要がある。
COPY test.php /var/www/html/
test.phpというファイル(hoge
と表示するためのファイル)を/var/www/html/
というディレクトリにコピーする。
/var/www/html/
はdockerコンテナにデフォルトで用意されているファイルの一つ。
apacheの初期設定ではこの/var/www/html/
以下に置かれたファイルがWebサイト上で表示されるようになっている。
CMD ["/usr/sbin/httpsd","-DFOREGROUND"]
コマンドの起動。
`["実行するコマンド", "引数"]とすることで、指定した形式でコマンドが実行される。
今回は作成したapacheサーバーをバックグラウンドで実行している。
Dockerファイルの作成補足〜RUN, COPYとCMDの違い
RUNやCOPYなどのコマンドを直接Dockerfileに記述する場合とCMDコマンドの引数として指定する場合では、コマンドの実行タイミングに違いが出る。
直接記述したコマンドに関してはDockerファイルからDockerイメージを作成する際
に実行されるのに対し、CMDの引数に指定したコマンドに関してはDockerコンテナ作成時
に実行される。
上記の例ではベースとなったdockerイメージに追加してほしい要素、すなわちapacheのインストールなどはコマンドを直接記述してイメージ作成時に実行されるようにし、サーバーの起動に関してはコンテナ作成時に実行されるようにCMDコマンドで指定している。
Dockerイメージの作成
Dockerファイルが存在するディレクトリにて以下のコマンドを入力する。
% docker build -t dockerイメージの名前:タグ名 .
末尾のコロンはDockerファイルのパス。
タグ名は省略可能(省略した場合はlatest
になる)。
Dockerファイル関連のコマンド達
# ベースイメージを指定
# 公式
FROM イメージ名:タグ名
# 例
FROM centos:centos7
# ベースイメージに対するインストール
# 公式
RUN -y install xxx
# 例
RUN -y install httpd php
# -yをつけることで、ダウンロードファイル容量確認後の処理を継続するかどうかの選択をスキップすることができる
# ここを-tにしてしまうとyes/no選択の部分で処理が中断してしまうので、必ず"-y"をつける
# ファイルのコピー
# 公式
COPY ファイル名 コピー先のディレクトリ
# 例
COPY test.php /var/www/html/
# ファイルの追加
# 公式
ADD コピー元のパス コピー先のイメージのパス
# 例
ADD https://wwww.xxx.com /tmp
# COPYとは異なりURLの指定が可能。また、圧縮ファイルの展開も自動で行われる。