CodeGym /コース /Docker SELF /Docker Imagesとの出会い

Docker Imagesとの出会い

Docker SELF
レベル 13 , レッスン 0
使用可能

1.1 Docker Imagesの基本

Docker Images (Dockerイメージ) — これはDockerコンテナ向けのテンプレートだよ。アプリの実行に必要な全てが詰まってる: コード、ライブラリ、依存関係、ツール、そして設定ファイル。Docker Imagesとは何か、それがどう構成されているのかを理解すると、Dockerを効率よく使えるようになるよ。

Docker Image — これは変更不可能なテンプレートで、コンテナを作成するために使われるんだ。アプリケーションを隔離環境で実行するための必要なコンポーネントが全部入ってる。コンテナを起動すると、Dockerがイメージをインスタンス化して実行するんだよ。

Docker Imagesの主な特徴:

  1. 不変性 (Immutability): Docker Imagesは変更不可能。コンテナ内の変更は元のイメージに影響を与えないんだ。内容を変更したい場合は、新しいイメージを作成する必要があるよ。
  2. レイヤー構造 (Layered Structure): Docker Imagesはいくつかのレイヤーで構成されてる。それぞれのレイヤーは前のものに対する変更を表すんだ。これにより、レイヤーを再利用することでスペース効率が良くなるんだよ。
  3. 識別 (Identification): 各イメージはユニークな識別子 (SHA256ハッシュ) を持ってる。それに加えて、イメージをバージョン管理しやすくするためのタグが1つ以上付けられていることが多いんだ。

Docker Imagesの構造:

Docker Imagesはレイヤー構造になってて、それぞれのレイヤーはファイルシステムになってる。これらのレイヤーはDockerのキャッシュに保存されて、他のイメージでも再利用できるんだよ。このレイヤー構造のおかげでDocker イメージは軽量で効率的なんだ。例えば、最初のレイヤーはOS、次がPython、その次が自分のアプリって感じで構成される。

Docker Imagesの主要コンポーネント:

  1. ベースレイヤー (Base Layer): イメージの初期レイヤーで、他のイメージを作る土台になることが多いんだ。例えば、UbuntuやAlpine LinuxのようなミニマルなOSバージョンがベースレイヤーになることがあるよ。
  2. 中間レイヤー (Intermediate Layers): これらのレイヤーは、Dockerfile内で実行されたコマンドによって作成されるんだ (例えば、パッケージのインストールやファイルコピーなど)。各レイヤーが前のレイヤーに対して変更を加える感じだね。
  3. 最終レイヤー (Final Layer): CMD、ENTRYPOINTの指示やコンテナ内での変更に基づいて作られる最後のレイヤーが「コンテナレイヤー」と呼ばれるよ。このレイヤーは一時的で、コンテナが動作している間だけ存在してるんだ。

1.2 Docker Imagesのレイヤーの仕組み

Dockerイメージの各レイヤーは、前のレイヤーに対する変更のセットです。Dockerがイメージを作成する際、Dockerfileの各指示を実行し、変更ごとに新しいレイヤーを追加します。

レイヤー作成の例:

  1. ベースイメージ: 例えばubuntu:20.04のようなベースイメージから始めます。これが最初のレイヤーになります。
  2. パッケージのインストール: コマンドRUN apt-get update && apt-get install -y python3は、Pythonがインストールされた新しいレイヤーを作成します。
  3. ファイルのコピー: コマンドCOPY . /appはアプリケーションのファイルを新しいレイヤーに追加します。
  4. 作業ディレクトリの設定: コマンドWORKDIR /appは、後続のコマンドに対して作業ディレクトリを設定するレイヤーを作成します。

レイヤー利用の利点:

  1. 再利用性: レイヤーは他のイメージでも再利用可能です。例えば、2つのイメージが同じベースレイヤーを使用している場合、Dockerはそれを一度だけダウンロードし、スペースおよび時間を節約します。
  2. キャッシュ: Dockerはレイヤーをキャッシュするため、イメージのビルドプロセスが速くなります。レイヤーが変更されていない場合、Dockerは再ビルドの代わりにキャッシュされたものを使用します。
  3. モジュール性: レイヤー構造はモジュール的なイメージ開発を可能にします。特定のレイヤーだけを更新または変更でき、全体のイメージに影響を与えません。

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の作成:

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という名前のイメージを作成できるよ:

Terminal

docker build -t my_python_app .

3. イメージからコンテナを起動:

作成したイメージmy_python_appからバックグラウンドでコンテナを起動するには、次のコマンドを使ってね:

Terminal

docker run -d my_python_app
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION