Dockerfileとは
- 任意のイメージを元にイメージを自動で作るための設定ファイル
- インストールするものや事前に必要なものがわかっている場合に記載
- ここで設定した内容を元にイメージを作成するため一度作ると捗る
- Dockerfileはイメージの仕様書
Dockerfileの用語の確認(よく使いそうなもの)
- FORM(親イメージの指定)
- Dockerfileの中で一番最初に実行される命令で尚且つ必須。
- ここでは使用するイメージの指定を行うようにする。
- MAINTAINER(作成者情報)
- 必須ではない。
- 公開するDockerfileがどこの誰が作ったものかわかるように明記する。
- RUN(buildコマンドの実行)
- Dockerイメージ内にあるコマンドをroot権限として実行する。
- RUNはあくまでコンテナ作成用のコマンド(インストールしたいものなどを指定)
- 実行命令はCMDもしくはENTRYOINT命令で行う。
- 対話的やりとりができないため事前に非対話オプションを指定
- 非対話オプションの例: apt-get install -y
- RUNするものが複数ある場合は" \ "を使い区切れる
- COPY(ファイルの追加)
- Dockerを起動してるマシンのファイルやディレクトリをDockerイメージにコピーする
- CMD(実行コマンドの指定)
- CDMで指定できるコマンドは1つのみ
- 複数ある場合は最後のCMDが実行される
- Dockerコンテナがフォアグラウンドになっていない場合はコンテナが終了する
Dockerfileからイメージを作成する
# FROM: ベースイメージを指定します
FROM ubuntu
# MAINTAINER: イメージの作成者を記述できます
MAINTAINER Raichel
# RUN: buildする時に実行される
RUN ["echo","now building..."]
# CMD: RUNする時に実行される
CMD ["echo", "now running..."]
- Dockerfileからイメージを作成するコマンド
- docker build -t イメージ名:タグ名 Dockerfileのパス
vagrant@Ubuntu1504:~/Docker$ docker build -t raichel/echo .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 0 : FROM ubuntu
---> 2f96784406d7
Step 1 : MAINTAINER Raichel
---> Running in 62259761105a
---> 96c110f4e59e
Removing intermediate container 62259761105a
Step 2 : RUN echo now building...
---> Running in 79ad57390189
now building...
---> b095db4756ab
Removing intermediate container 79ad57390189
Step 3 : CMD echo now running...
---> Running in a9269f60fe83
---> 42acfcfd0116
Removing intermediate container a9269f60fe83
Successfully built 42acfcfd0116
イメージを確認してみる
- raichel/echoって名前のイメージが存在するか確認する
vagrant@Ubuntu1504:~/Docker$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
raichel/echo latest 42acfcfd0116 31 seconds ago 206.5 MB
ubuntu latest 2f96784406d7 22 hours ago 206.5 MB
おもったこと
- Dockerfile色々ルール多い(第一印象)
- CMDが1つしか実行されない問題をどう解決しようか…