はじめに
Dockerfileとは、Dockerイメージを作成するためのテキストファイルで、コンテナを構築する際に必要となります。
コンテナのベースとなるOSや必要なソフトウェア、設定を定義します。
本記事では、Dockerfileの基本構造や記述例を紹介し、未来の自分への備忘録としても活用できるように、初学者の方でも簡単に始められるよう解説します。
Dockerfileとは?
Dockerfileは、テキストファイル形式で記述され、Dockerイメージを作成するためのビルド指示を定義します。
引用画像:https://qiita.com/gon0821/items/f9e3bcbb6cb01d4ef7fa
Dockerfileを基にdocker build
コマンドを実行すると、指定された内容に基づいてカスタマイズされたDockerイメージが生成されます。
Dockerfileの基本構造
Dockerfileの記述は基本的に上から順に実行されます。
# ベースとなるイメージを指定
FROM python:3.9-slim
# 作業ディレクトリを設定
WORKDIR /app
# 必要なファイルをコンテナにコピー
COPY requirements.txt .
# 必要なパッケージをインストール
RUN pip install -r requirements.txt
# アプリケーションコードをコピー
COPY . .
# コンテナ内で実行するコマンドを指定
CMD ["python", "app.py"]
上記のファイルは、主要な命令を含む簡単なDockerfileの例です。
主な命令の解説
1. FROM
FROM
命令は、使用するベースとなるDockerイメージを指定します。
FROM python:3.9-slim
このイメージはコンテナの初期状態となり、すべての操作はこのベースイメージに基づいて行われます。
ここでは、Python 3.9の軽量イメージ(python:3.9-slim
)を使用しています。
これは最小限のPython環境を提供し、アプリケーションの依存関係を追加でインストールすることを前提としています。
2. WORKDIR
WORKDIR
命令は、コンテナ内で作業を行うディレクトリを指定します。
WORKDIR /app
このディレクトリ内でファイル操作やコマンドの実行が行われるようになります。
ここでは、作業ディレクトリを/app
に設定しています。
この後、COPY
やRUN
コマンドでファイルを/app
ディレクトリ内に操作します。
3. COPY
COPY
命令は、ホストのファイルやディレクトリをコンテナ内にコピーするために使用されます。
COPY requirements.txt .
ここでは、ホストのrequirements.txt
ファイルをコンテナ内の現在の作業ディレクトリ(/app
)にコピーしています。
これにより、依存関係を後でインストールするために必要なファイルがコンテナに配置されます。
COPY . .
こちらもCOPY
命令ですが、今回はカレントディレクトリ(.
)にあるすべてのファイルとディレクトリをコンテナ内のカレントディレクトリ(/app
)にコピーしています。
これにより、アプリケーションのコード全体がコンテナに取り込まれます。
4. RUN
RUN
命令は、コンテナビルド時にコマンドを実行するための命令です。
RUN pip install -r requirements.txt
このコマンドはビルド時に実行され、実行結果がイメージに反映されます。
ここでは、pip install -r requirements.txt
というコマンドを実行しています。
このコマンドは、requirements.txt
にリストされているPythonパッケージをインストールします。これにより、アプリケーションの必要なライブラリがインストールされます。
5. CMD
CMD
命令は、コンテナが起動されたときに実行するコマンドを指定します。
CMD ["python", "app.py"]
これはコンテナ起動時に実行され、通常はアプリケーションのエントリーポイントを設定します。
ここでは、python app.py
というコマンドを指定しています。
コンテナが起動すると、app.py
というPythonスクリプトが実行され、アプリケーションが動作を開始します。
まとめ
ここまでお読みいただき、ありがとうございました!記念すべき150本目の記事に選ばれたテーマは「Dockerfile」でした(笑)!
今回は、基本的な構成を理解することで、アプリケーションのDockerfileの基本構造と主な命令についての知識を体系的に整理しました!
今後もDocker周りの知識整理を続けていきますので、この内容が誰かの技術的な支えとなれば幸いです。
おまけ:Dockerを使ったReactアプリ開発
通っているITスクールの課題で、ReactとDockerを使って複数のアプリを作成した際の備忘録記事です。
自分のローカル環境で「クソゲー」を量産してしまいましたが、個人的にはDockerやReactに関する知識が身につき、良い個人開発の経験となりました(笑)。