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

Dockerfileとcompose.yamlの連携①

 「Dockerfileとcompose.yamlの連携」では、「Dockerfile」と「compose.yaml」ファイルを連携させて、コンテナを構築します。

「Dockerfileとcompose.yamlの連携」は、次の3部に分けて解説します。

ここでは、Flaskコンテナを例に、Dockerfileとcompose.yamlの連携させてコンテナを作成していきます。

なぜ、「compose.yaml」ファイルだけでなく、「Dockerfile」も使うのでしょうか?

「compose.yaml」ファイルだけでなく、「Dockerfile」も必要なケースが出てきます。

 その理由ですが、WordPress、PHPなど、シェアが大きく、利用者が多いサービスは、わざわざ、OSのイメージをカスタマイズをしなくとも、Docker Hub上にそのサービスが含まれる様々なバージョンのイメージが存在ます。それを利用すればよいわけです。

しかし、

Docker Hub上に自分が使用したいイメージが必ず、存在するとは限りません。

 仮に、Docker Hub上に利用したいイメージが存在したとしても、そのまま利用できるケースよりも、他のパッケージをインストールしたり、ファイルをコピーしたりして、カスタマイズしたいケースの方が、むしろ多いでしょう。

そのような時に、「Dockerfile」を使用します。

 ここでは、Hocker HubのPythonイメージを使用します。しかし、Pythonイメージには、Flaskがインストールされていません。

そこで

Dockerfileを使用して、PythonイメージにFlaskをインストールしてカスタマイズして使用します。

Flaskとは

 Flaskは、PythonでWebアプリケーションを開発するための軽量なマイクロフレームワークです。Webアプリケーションフレームワークの1つであり、他の主要なフレームワークとしてはDjangoがありますが、Flaskはより軽量で柔軟性が高いとされています。

リンク:https://flask.palletsprojects.com/en/3.0.x/

Dockerfileとは

 Dockerfileは、Dockerコンテナ内で実行されるアプリケーションやサービスを定義するためのテキストファイルです。Dockerfileを使用することで、Dockerイメージを構築するための手順や設定を記述することができます。これにより、開発者やインフラエンジニアは、繰り返し利用可能な環境を素早く構築し、デプロイすることができます。

Dockerfileとは

Docker Hub上にあるイメージをカスタマイズするためのファイルです。

以下に、Dockerfileの構造と使用される主な命令を示します。

1.ベースイメージの指定

 Dockerfileの最初の行で、ベースとなるDockerイメージを指定します。例えば、Pythonアプリケーションを構築する場合、python:3.9といったPythonの公式イメージをベースにすることがあります。

FROM python:3.9
2.必要なパッケージのインストール

 アプリケーションが依存するパッケージやライブラリをインストールします。RUN命令を使用して、シェルコマンドを実行します。

RUN apt-get update && apt-get install -y \
    package1 \
    package2 \
    ...
3.アプリケーションのコードの追加

 アプリケーションのソースコードやファイルをコンテナ内にコピーします。COPY命令やADD命令を使用します。

COPY . /app
4.作業ディレクトリの設定

 WORKDIR命令を使用して、作業ディレクトリを指定します。以降の命令は、このディレクトリを起点として実行されます。

WORKDIR /app
5.ポートの公開

コンテナが公開するポートを指定します。EXPOSE命令を使用します。

EXPOSE 8080
6.起動コマンドの指定

コンテナが起動した際に実行されるコマンドを指定します。CMD命令やENTRYPOINT命令を使用します。

CMD ["python", "app.py"]

「CMD python app.py」のように記述することもできますが、[ ]で囲んで、「 , 」で区切ることが推奨されています。

・1~6までの手順のまとめ

1~6までの手順をDockerfileにまとめます。

FROM python:3.9
RUN apt-get update && apt-get install -y \
    package1 \
    package2 \
    ...
COPY . /app
WORKDIR /app
EXPOSE 8080
CMD ["python", "app.py"]

 Dockerfileはこれらの命令を使用して、Dockerイメージのビルドに必要な手順を定義します。これにより、同じDockerfileを使用して、開発、テスト、本番環境などの異なる環境に対応したDockerイメージを構築することができます。また、Dockerfileのバージョン管理を行うことで、環境の変更やアップデートを追跡し、再現性の高い開発プロセスを実現することができます。

不要なDockerオブジェクトの削除

まず、不要なDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
13c955e61eb6cd2967570824145c69fa6f2fc60f4e61bb9e772d45da9f0a80c2
84eb899b5d3af3a7a4c083b50bfd945e3d3f54b821f733d6365270761e39bd5d

Deleted Networks:
wordpress2_default

Deleted Images:
untagged: mariadb:10.8
untagged: mariadb@sha256:456709ab146585d6189da05669b84384518baecd83670c9e5221f8c20a47cf1e
deleted: sha256:d198cd11e8fce9d331f9f90c93406eb8533399812b7946cbabf6242325e534e8
deleted: sha256:625166392dfd64d437dc33c0df475d36df2c7ae1322b4493453ae2326bfe525a
deleted: sha256:2074c746db89c132665f980b8138eaa62d3066fa2ab937feb2028a52b8b02c7b
deleted: sha256:2b447039993cc0cbd39f81b224548959d2a66aa9391e1210ff138cffa5aae14a
deleted: sha256:862e08614baf14b3a70e4d05b0f250014ff49b7eb0e22224b2b796df0e916207
deleted: sha256:161fcbe39e24efa8f649c0fca37e230821dce2b5eb3ed2b45e0196aecd51183c
deleted: sha256:b4c9ca4e1e132efbf68176a98777551027c89cca182b1416c459427c61aa5c8f
deleted: sha256:cf4669588596dad2da86c26bea5360c3b11340dd2f03faea1812417915eb4d28
deleted: sha256:966e94ab6e166fb358a208cfd8169d22dea352501c96700eb7f45092a2962ee6
untagged: wordpress:6.5
untagged: wordpress@sha256:e61ec4b26e768f5068fbf118e3701529fe6399d1910a66cafb4a01983e52863d
deleted: sha256:bd7cf29c56a85d78b276968fc568df755e1d53ccb4fa61f8a8537725e58326dd
deleted: sha256:ae7d2d553b85ad697c639272e4e82a73401aead6bea71001f23e452be7e41ff3
deleted: sha256:3f91ff775f309dd6328de42cb767736e97bc3a25bf10be6a77032f170fb08503
deleted: sha256:b1ce06c34404c88a82fd6670c8c111b24665dba91710d34ab77afde0e86acfcd
deleted: sha256:7781706893c5d965b0eeaa45cffe90da72a370249fe93fbdedbf993d71819157
deleted: sha256:66f605aba20e3a540d8d46dc7c05f5768af72f98bb870d971645fd9f6993c982
deleted: sha256:22a352b8859db06b7ca53779017d6bccb61e07e8a3a1d3fe6ba84afcae8ba62b
deleted: sha256:713d0a3587d1e3bc1ed8846125f367d31eac6bc9ef5a527ed0f597fe97c1e41d
deleted: sha256:58b020b322768d2c93538026be0ec785edb541b7f28aa636c2844cb9ef788ffb
deleted: sha256:9846b8e10b5edb5e24d5044a63357754057e4e6b00132545b00019e4aea11afc
deleted: sha256:8233671601deae28a81c117944889d8908e38822aec6e35dbd209b9ed5893baf
deleted: sha256:63e5c449ab93a9ef33083f821a52f42dc54489ce516d0a4daf2b63129808f846
deleted: sha256:d0b3c8503c0b5dc8c50adb682680c1821c2362dc647f9496ff6da2b00dd901bf
deleted: sha256:c5cc4b106457a89de1fbeea596285cc0378c9a03db5eb92450d2a97bcb7c65f3
deleted: sha256:f1081009fe495b32804fd365eaa6933b9aefed7bc8692a7faeda9a5e79448001
deleted: sha256:a84707a2f7c991f90ba99ca39f907f201331361dbea7a43b9a3386af9a82be07
deleted: sha256:2d13dcf73c660764fc071cee00540dbb185c394a5f3ae62b54fcb7bda6ffd0f5
deleted: sha256:33bb35280735a6471306974bb1cb66abfd9edb686327d0fca7fac47ca6bfc6b4
deleted: sha256:f11b0bf8d46e7ccf1bbd96f417f06be0e4082adb292f9cfcf6900d58cd85dbe1
deleted: sha256:60908d778b5a0d0563cee37390f7c7370b7226a35e77dcf35ee1ede998fbc66c
deleted: sha256:e4df10d7e92fa157bcd347568ff345f6ffab9caa434257d937ecce2fac91cad8
deleted: sha256:a483da8ab3e941547542718cacd3258c6c705a63e94183c837c9bc44eb608999

Total reclaimed space: 1.114GB

・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。

環境によって削除されずに残っているDockerオブジェクトは異なります。

Dockerfileの作成

Dockerfileを作成します。

・ディレクトリの作成と移動

 Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。今回は「Dockerfile」も使用します。

 デフォルトでは、カレントディレクトリにある「compose.yaml」が読み込まれるため、作業ディレクトリに移動しておきます。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「flask1」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir flask1」コマンド
  • 「cd flask1」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir flask1

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/07    23:19                flask1

PS C:\Users\joeac\Desktop\docker> cd flask1
PS C:\Users\joeac\Desktop\docker\flask1>
・VSCodeの起動

VSCodeで「Dockerfile」ファイルを作成します。

・「code Dockerfile」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\flask1> code Dockerfile

VSCodeが起動します。

・「Dockerfile」ファイルの編集

・「Dockerfile」ファイルを以下のように編集して保存します。

FROM python:3.12
WORKDIR /usr/src/app
RUN pip install flask==3.0.2
CMD ["flask", "run", "--host=0.0.0.0"]

 このDockerfileは、Python 3.12イメージをベースにして、Flaskアプリケーションを実行するための設定です。

 CMD [“flask”, “run”, “–host=0.0.0.0”] は、CMD flask run –host=0.0.0.0 と記述することもできますが、[ ] で囲んで「 , 」で区切って記述することが推奨されています。

以下、各行の解説を行います。

命令説明
FROMPython 3.12イメージをベースにします。
WORKDIR作業ディレクトリを「/usr/src/app」に設定します。
RUNFlaskバージョン3.0.2をインストールします。
CMDコンテナが起動されたときに実行されるデフォルトのコマンドを指定します。Flaskアプリケーションを実行するためのコマンドを指定し、ホスト0.0.0.0(すべてのネットワークインターフェース)でFlaskの組み込みサーバーを実行するようにします。これにより、コンテナ内のFlaskアプリケーションがホストのすべてのIPアドレスからアクセス可能になります。
Dockerfile

 ここまでの操作でDockeイメージをカスタマイズする「Dockerfile」ファイルが出来上がりました。次の「Dockerfileとcompose.yamlの連携②」では、Flaskアプリケーションと「compose.yaml」ファイルを作成していきます。

Dockerfileとcompose.yamlの連携②

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 Dockerfileとcompose.yamlの連携② ここでは、Flaskアプリケーションと「compose.yaml…

関連コンテンツ