このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker基礎】Dockerfileでイメージを作る

Dockerfileでイメージを作る

 これまで学んできたとおり、コンテナを直接書き出すdocker commit)という方法でイメージを作ることも可能です。しかし、より再現性が高く、チーム内で共有しやすい方法がDockerfileを使ったビルドです。ここでは、Dockerfileを記述してオリジナルのイメージを作成する流れを、Apacheコンテナを例にして詳しく解説します。

1.やることの流れ

  1. Dockerfileを作成(元となるイメージ httpd、上書きするファイル index.html
  2. ビルド(docker build) してオリジナルイメージを生成
  3. 確認(docker image ls など)
  4. オリジナルイメージからコンテナを起動し、index.html が初期ページになるか確認

2. 作成するイメージの情報

項目
元になるイメージhttpd
書き出すイメージ名apache-original2
Dockerfileを置く作業ディレクトリC:\Users\ユーザー名\Desktop\Docker\apache

3.Dockerfile でイメージを作る流れ

  1. FROM: どのイメージをベースにするか(ここでは httpd
  2. COPY: 追加・上書きしたいファイルをイメージに含める。
  3. docker build -t <イメージ名> . → ビルドして新しいイメージを作成
  4. docker run で起動して動作確認

4.手順詳細

STEP1:作業ディレクトリに移動&準備

作業ディレクトリに移動して、「apache」ディレクトリを作成し、そのディレクトリに移動します。

フォルダ作成

PS C:\Users\joeac> cd C:\Users\joeac\Desktop\docker
PS C:\Users\joeac\Desktop\docker> mkdir apache
PS C:\Users\joeac\Desktop\docker> cd apache

index.htmlファイルを準備

PS C:\Users\joeac\Desktop\docker\apache> code index.html

index.htmlファイルの中身

<html>
<meta charset="utf-8"/>
<body>
<div>演習で学ぶDocker基礎</div>
</body>
</html>

文字コードを UTF-8 にして保存します。

STEP2:Dockerfile を作成

テキストエディタで Dockerfile を作り、以下のように記述します。

FROM httpd
COPY index.html /usr/local/apache2/htdocs/

ポイント

  • FROM httpdhttpd イメージをベースにする
  • COPY index.html /usr/local/apache2/htdocs/index.html を Apache のドキュメントルートに上書き

STEP3:docker build でイメージ化

 次のコマンドを実行して、オリジナルのイメージファイルを作成します。コマンドの後ろに「.」があるので、注意してください。これはカレントディレクトリを意味しています。

docker build -t apache-original2 .
  • -t apache-original2: イメージ名を apache-original2 として指定
  • .: カレントディレクトリ(Dockerfile があるフォルダ)をビルドコンテキストとして指定

実行結果

PS C:\Users\joeac\Desktop\docker\apache> docker build -t apache-original2 .
[+] Building 0.2s (7/7) FINISHED                 docker:desktop-linux
 => [internal] load build definition from Dockerfile             0.0s
 => => transferring dockerfile: 91B                              0.0s
 => [internal] load metadata for docker.io/library/httpd:latest  0.0s
 => [internal] load .dockerignore                                0.0s
 => => transferring context: 2B                                  0.0s
 => [internal] load build context                                0.0s
 => => transferring context: 134B                                0.0s
 => [1/2] FROM docker.io/library/httpd:latest                    0.1s
 => [2/2] COPY index.html /usr/local/apache2/htdocs/             0.0s
 => exporting to image                                           0.0s
 => => exporting layers                                          0.0s
 => => writing image sha256:e4311a9bcee9175c68468916bfdfd35a3de  0.0s
 => => naming to docker.io/library/apache-original2              0.0s
...(以下省略)...

実行が成功すると、apache-original2 というイメージが生成される。
docker image ls で確認可能。

STEP4:イメージが作成されたことを確認

docker image ls

実行結果

REPOSITORY        TAG       IMAGE ID       CREATED              SIZE
apache-original2  latest    e4311a9bcee9   About a minute ago   147MB
httpd             latest    4ce47c750a58   5 months ago         147MB

apache-original2 が表示されていれば成功。

STEP5:新しいイメージからコンテナを起動

docker run --name apache-container -d -p 8080:80 apache-original2
  • コンテナ名: apache-container
  • ポート: 8080:80
  • イメージ: apache-original2

 ブラウザで http://localhost:8080/ にアクセスすると、初期画面が index.html の内容に置き換わっているはず。

STEP6:後始末

コンテナ削除

docker stop apache-container
docker rm apache-container

イメージ削除

docker image rm apache-original2

httpd は元イメージなので残しておく

まとめ

  • Dockerfile + docker build を使うと、手順書(Dockerfile)が残るため、再現性チーム共有に優れている。
  • 基本構文
FROM <ベースイメージ>
COPY <ホストのファイル> <イメージ内パス>
RUN <ビルド時に実行するコマンド>
CMD <コンテナ起動時に実行するコマンド>
  • イメージ確認docker image ls
  • 後から同じイメージを元にいくらでもコンテナを量産できる。

 これで、Dockerfile 方式でのイメージ作成の流れが理解できたはずです。次は、コンテナをイメージとして持ち運ぶ方法を学んで、別の環境に配布・移行するシナリオを見ていきましょう。