⑥Docker・コンテナ

DockerfileでカスタムDockerイメージを作成する【書き方と命令一覧】

⑥Docker・コンテナ
記事内に広告が含まれています。

前の記事でDockerをインストールし、hello-worldを動かしました。この記事ではDockerfileを使って「自分だけのイメージ」を作る方法を学びます。Dockerfileを理解することで、Dockerの最も重要な概念の一つが身につきます。

Dockerfileとは何か?

Dockerfileとは、Dockerイメージを作るための手順書をテキストで書いたファイルです。「どのベースイメージを使うか」「どのライブラリをインストールするか」「どのファイルをコピーするか」などの手順を書いておくと、docker buildコマンドで自動的にイメージが作られます。

レシピに例えると「ベースイメージ=CookPadのベースレシピ」で、それにRUNCOPYの作業を加えてオリジナルの料理(イメージ)を作るイメージです。

最小限のDockerfileを作ってみよう

まず最もシンプルなDockerfileを作って動かすまでやってみましょう。作業用のディレクトリを作ってその中にDockerfileファイルを作成します。

mkdir myapp
cd myapp
nano Dockerfile

Dockerfileに以下を記述します。

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl
CMD ["echo", "Hello from my Docker image!"]

3行それぞれの意味を説明します。

  • FROM ubuntu:22.04:Ubuntu 22.04をベースにする、という宣言です。必ずDockerfleの1行目に書きます
  • RUN apt-get update && apt-get install -y curl:イメージをビルドするときに実行するコマンドです。ここではcurlをインストールしています
  • CMD […]:コンテナ起動時に実行するデフォルトコマンドです

イメージをビルドしてコンテナを起動する

docker build -t myapp:1.0 .
docker run myapp:1.0

docker build -t myapp:1.0 .の各部分を説明します。-t myapp:1.0は「イメージにmyappという名前と1.0というタグ(バージョン)を付ける」という指定で、末尾の.(ドット)は「カレントディレクトリのDockerfileを使う」という意味です。

Dockerfileの主な命令一覧

命令意味使い方の例
FROMベースイメージを指定(必須・1行目)FROM ubuntu:22.04
RUNビルド時にコマンドを実行RUN apt-get install -y nginx
COPYホストからファイルをコピーCOPY app.py /app/
WORKDIR作業ディレクトリを指定WORKDIR /app
CMDコンテナ起動時のデフォルトコマンドCMD ["python3", "app.py"]
EXPOSEコンテナが使うポートを明示EXPOSE 8080
ENV環境変数を設定ENV PORT=8080
USER実行ユーザーを指定USER appuser

実践的なDockerfileの例:Pythonアプリ

# ベースイメージ
FROM python:3.11-slim

# 作業ディレクトリを設定
WORKDIR /app

# 依存関係ファイルを先にコピー(キャッシュ効率化)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# コードをコピー
COPY . .

# ポートを開放
EXPOSE 5000

# 起動コマンド
CMD ["python3", "app.py"]

この例でrequirements.txtをコードより先にコピーしているのは、ビルドキャッシュを有効活用するためです。コードだけ変更した場合、pip installの処理がキャッシュから再利用されてビルドが速くなります。

つまずきやすいポイント

「No such file or directory」エラー

COPYのコピー元ファイルが見つからない場合に発生します。docker buildを実行するディレクトリに対象ファイルが存在するかlsで確認してください。

ビルドが遅い

初回は全レイヤーのビルドに時間がかかりますが、キャッシュが機能する2回目以降は速くなります。変更がないレイヤーはキャッシュから再利用されるためです。

まとめ

  • Dockerfileはイメージを作るための手順書(テキストファイル)
  • 必ずFROMから始まる。ベースイメージはpython:3.11-slimなど軽量なslimバリアントがおすすめ
  • docker build -t 名前:tag .でイメージをビルド、docker runで起動
  • requirements.txtはコードより先にコピーするとビルドキャッシュが効く

次の記事ではDocker Composeを使って、Webサーバーとデータベースなど複数のコンテナをコマンド1つで起動する方法を学びます。

コメント

タイトルとURLをコピーしました