前回の記事ではdocker-composeを使って既存のイメージからWordPressを起動しました。今回はDockerfileを使って自分だけのオリジナルイメージを作る方法を解説します。
Dockerfileとは
Dockerfileは「自分だけのイメージを作るための設計書」です。nginxやmysqlなど既存のイメージをベースにして、自分のファイルや設定を追加したカスタムイメージを作れます。
Dockerfile(設計書を書く)
↓ docker build
イメージ(オリジナルイメージの完成)
↓ docker run
コンテナ(実際に動く)
Dockerfileを使うメリットは、同じイメージを誰でも再現できることです。「このDockerfileさえあれば同じ環境が作れる」という状態になります。
「独自イメージ」「カスタムイメージ」という言葉について
Docker界隈では、Dockerfileを使って自分で作ったイメージのことを「独自イメージ」や「カスタムイメージ」と呼びます。nginxやmysqlのようにDocker Hubで公開されている既製品のイメージに対して、自分でファイルや設定を追加して作ったイメージのことを指します。今回で言えばnginxをベースにindex.htmlを追加した「my-nginx」がカスタムイメージです。技術書や記事でよく出てくる言葉なので覚えておくと便利です。
STEP1:作業フォルダを作る
mkdir ~/Desktop/my-docker && cd ~/Desktop/my-docker
STEP2:HTMLファイルを作る
コンテナの中に入れるHTMLファイルを作成します。
cat > index.html << 'EOF'
My Docker Page
Dockerで動いています!
これは独自イメージから起動したコンテナです。
EOF
STEP3:Dockerfileを作る
cat > Dockerfile << 'EOF'
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html
EOF
Dockerfileの命令を解説
| 命令 | 意味 |
|---|---|
| FROM nginx:latest | ベースとなるイメージを指定する。ここではnginxの最新版をベースにする |
| COPY index.html /usr/share/nginx/html/index.html | 手元のindex.htmlをコンテナ内のnginxのHTMLフォルダにコピーする |
FROMは必ず1行目に書きます。既存のイメージをベースにして、その上に自分の変更を積み重ねていくイメージです。COPYは「手元のファイルをコンテナの中のどこに置くか」を指定します。
よく使うDockerfileの命令一覧
| 命令 | 意味 | 例 |
|---|---|---|
| FROM | ベースイメージを指定する(必須・1行目) | FROM nginx:latest |
| COPY | 手元のファイルをコンテナ内にコピーする | COPY index.html /usr/share/nginx/html/ |
| RUN | イメージビルド時にコマンドを実行する | RUN apt-get install -y curl |
| CMD | コンテナ起動時に実行するコマンドを指定する | CMD ["python", "app.py"] |
| WORKDIR | 作業ディレクトリを指定する | WORKDIR /app |
| ENV | 環境変数を設定する | ENV PORT=8080 |
| EXPOSE | コンテナが使うポート番号を記載する(ドキュメント的な役割) | EXPOSE 80 |
STEP4:イメージをビルドする
docker build -t my-nginx .
コマンドの意味
| 部分 | 意味 |
|---|---|
| docker build | Dockerfileからイメージを作る命令 |
| -t my-nginx | 作るイメージに「my-nginx」という名前をつける(-tはtagの略) |
| . | Dockerfileがある場所を指定する(.は現在のフォルダという意味) |
ビルドが成功すると以下のように表示されます。
[+] Building 0.1s (7/7) FINISHED
=> [1/2] FROM docker.io/library/nginx:latest
=> [2/2] COPY index.html /usr/share/nginx/html/index.html
Dockerfileの命令が1行ずつステップとして実行されているのがわかります。FROMとCOPYの2行なので[1/2][2/2]の2ステップになっています。
STEP5:コンテナを起動して確認する
docker run -d -p 8080:80 my-nginx
ブラウザでhttp://localhost:8080にアクセスして、作成したHTMLの内容が表示されれば成功です。既存のnginxイメージではなく、自分でカスタムしたmy-nginxイメージからコンテナが起動しています。
イメージの確認・削除
ビルドしたイメージは以下のコマンドで確認できます。
docker images
my-nginxイメージが一覧に追加されているのが確認できます。不要になったイメージは以下のコマンドで削除できます。
docker rmi my-nginx
まとめ
Dockerfileを使うことで既存のイメージをベースにした独自イメージを作れます。FROM・COPY・RUN・CMDの4つの命令を覚えておけば基本的なDockerfileは書けます。次のステップとして作成したイメージをAWSのECR(Elastic Container Registry)にpushして、ECS上で本番運用する方法を学びます。

