Dockerfileとは
Dockerfileは、コンテナの設計図です。アプリケーションやパッケージの動作環境を定義し、その環境をもとにDockerイメージを作成するために使います
Dockerfileの作成
このDockerfileでは、Ubuntu 20.04をベースにして、curlをインストールし、ローカルのファイルをコンテナ内にコピーした後、bashシェルをデフォルトで実行する設定をしています。
FROM ubuntu:20.04
RUN apt update
RUN apt install -y curl
COPY . /app/
CMD ["bash"]
FROM
どのベースイメージを使用するか指定します。この場合は、Ubuntu 20.04の公式イメージが使われます。
Dockerイメージはレイヤー構造になっているため、ベースイメージの上に他の命令を積み重ねることで環境をカスタマイズします。
RUN
シェルコマンドを実行するための命令です。例えば、apt updateコマンドでパッケージリストを更新し、apt install -y curlでcurlというツールをインストールしています。
apt ubuntu: パッケージリストを最新の状態に更新します。
apt install -y curl: curlというパッケージをインストールします。
-y: 対話なしで「Yes」を自動的に選択してインストールを進めるオプションです。
&&:コマンドをまとめて書くことができます。例えば、以下のようにしてレイヤーを減らし、イメージサイズを小さくすることが推奨されます。
RUN apt update && apt install -y curl
COPY
ローカル環境にあるファイルやディレクトリを、Dockerイメージ内の指定した場所にコピーします。この例では、カレントディレクトリ(.)の内容をコンテナ内の/app/ディレクトリにコピーしています。
COPY 追加元 追加先
CMD
コンテナが起動したときに実行されるデフォルトのコマンドを指定します。ここではbash(シェル)が実行されるように設定しています。
CMD ["実行ファイル", "パラメータ1", "パラメータ2"]
補足: ENTRYPOINTとCMDの違い
• CMDは、デフォルトで実行されるコマンドを指定するだけで、コンテナ実行時に上書きが可能です。
• ENTRYPOINTは、強制的に実行されるコマンドで、上書きができません。
まとめ
FROM: ベースとなるDockerイメージを指定。
RUN: シェルコマンドを実行。複数のコマンドを&&でつなげてイメージサイズを最適化。
COPY: ローカルのファイルやディレクトリをコンテナ内にコピー。
CMD: コンテナが起動したときのデフォルトのコマンド。
Dockerfileを使うことで、誰でも同じ環境を簡単に再現でき、開発・テスト・本番環境の統一が容易になります。