1.1 Docker Imagesの基本
Docker Images (Dockerイメージ) — これはDockerコンテナ向けのテンプレートだよ。アプリの実行に必要な全てが詰まってる: コード、ライブラリ、依存関係、ツール、そして設定ファイル。Docker Imagesとは何か、それがどう構成されているのかを理解すると、Dockerを効率よく使えるようになるよ。
Docker Image — これは変更不可能
なテンプレートで、コンテナを作成するために使われるんだ。アプリケーションを隔離環境で実行するための必要なコンポーネントが全部入ってる。コンテナを起動すると、Dockerがイメージをインスタンス化して実行するんだよ。
Docker Imagesの主な特徴:
- 不変性 (Immutability): Docker Imagesは変更不可能。コンテナ内の変更は元のイメージに影響を与えないんだ。内容を変更したい場合は、新しいイメージを作成する必要があるよ。
- レイヤー構造 (Layered Structure): Docker Imagesはいくつかのレイヤーで構成されてる。それぞれのレイヤーは前のものに対する変更を表すんだ。これにより、レイヤーを再利用することでスペース効率が良くなるんだよ。
- 識別 (Identification): 各イメージはユニークな識別子 (SHA256ハッシュ) を持ってる。それに加えて、イメージをバージョン管理しやすくするためのタグが1つ以上付けられていることが多いんだ。
Docker Imagesの構造:
Docker Imagesはレイヤー構造になってて、それぞれのレイヤーはファイルシステムになってる。これらのレイヤーはDockerのキャッシュに保存されて、他のイメージでも再利用できるんだよ。このレイヤー構造のおかげでDocker イメージは軽量で効率的なんだ。例えば、最初のレイヤーはOS、次がPython、その次が自分のアプリって感じで構成される。
Docker Imagesの主要コンポーネント:
- ベースレイヤー (Base Layer): イメージの初期レイヤーで、他のイメージを作る土台になることが多いんだ。例えば、UbuntuやAlpine LinuxのようなミニマルなOSバージョンがベースレイヤーになることがあるよ。
- 中間レイヤー (Intermediate Layers): これらのレイヤーは、Dockerfile内で実行されたコマンドによって作成されるんだ (例えば、パッケージのインストールやファイルコピーなど)。各レイヤーが前のレイヤーに対して変更を加える感じだね。
- 最終レイヤー (Final Layer): CMD、ENTRYPOINTの指示やコンテナ内での変更に基づいて作られる最後のレイヤーが「コンテナレイヤー」と呼ばれるよ。このレイヤーは一時的で、コンテナが動作している間だけ存在してるんだ。
1.2 Docker Imagesのレイヤーの仕組み
Dockerイメージの各レイヤーは、前のレイヤーに対する変更のセットです。Dockerがイメージを作成する際、Dockerfileの各指示を実行し、変更ごとに新しいレイヤーを追加します。
レイヤー作成の例:
- ベースイメージ: 例えば
ubuntu:20.04
のようなベースイメージから始めます。これが最初のレイヤーになります。 - パッケージのインストール: コマンド
RUN apt-get update && apt-get install -y python3
は、Pythonがインストールされた新しいレイヤーを作成します。 - ファイルのコピー: コマンド
COPY . /app
はアプリケーションのファイルを新しいレイヤーに追加します。 - 作業ディレクトリの設定: コマンド
WORKDIR /app
は、後続のコマンドに対して作業ディレクトリを設定するレイヤーを作成します。
レイヤー利用の利点:
- 再利用性: レイヤーは他のイメージでも再利用可能です。例えば、2つのイメージが同じベースレイヤーを使用している場合、Dockerはそれを一度だけダウンロードし、スペースおよび時間を節約します。
- キャッシュ: Dockerはレイヤーをキャッシュするため、イメージのビルドプロセスが速くなります。レイヤーが変更されていない場合、Dockerは再ビルドの代わりにキャッシュされたものを使用します。
- モジュール性: レイヤー構造はモジュール的なイメージ開発を可能にします。特定のレイヤーだけを更新または変更でき、全体のイメージに影響を与えません。
Docker Imagesの識別とタグ付け:
各Dockerイメージは、イメージとすべてのレイヤーの内容に基づいて生成されるユニークなハッシュ(SHA256)によって識別されます。利便性やバージョン管理のため、Dockerイメージにはタグを付けることもできます。
イメージ識別の例:
次のコマンドは、システム上のすべてのイメージのリストを表示し、各リポジトリ、タグ、識別子、サイズを含みます:
docker images
1.3 Docker Imagesの操作
Dockerは、イメージを操作するためのたくさんのコマンドを提供してるよ。以下がその主なものだ:
- イメージの作成:
docker build
- イメージからコンテナを起動:
docker run
- イメージ一覧の表示:
docker images
- イメージの削除:
docker rmi
- Docker Hubでイメージを検索:
docker search
- Docker Hubからイメージをダウンロード:
docker pull
- Docker Hubにイメージをアップロード:
docker push
Docker Imageを作成して使う例:
1. Dockerfileの作成:
# ベースイメージにUbuntuを使用
FROM ubuntu:20.04
# Pythonをインストール
RUN apt-get update && apt-get install -y python3
# アプリケーションのファイルをコンテナにコピー
COPY . /app
# 作業ディレクトリを設定
WORKDIR /app
# アプリケーションを起動するコマンドを指定
CMD ["python3", "app.py"]
2. イメージをビルド:
次のコマンドで現在のディレクトリのDockerfileを使って、my_python_app
という名前のイメージを作成できるよ:
docker build -t my_python_app .
3. イメージからコンテナを起動:
作成したイメージmy_python_app
からバックグラウンドでコンテナを起動するには、次のコマンドを使ってね:
docker run -d my_python_app
GO TO FULL VERSION