6.1 イメージ (Images)
Dockerを効果的に使うには、いくつかの重要な用語、つまりイメージ、コンテナ
、そしてレジストリ
を理解する必要があるよ。これらを詳しく解説して、それぞれの目的と相互の関係を理解しよう。
Dockerイメージ — これはコンテナを作るためのテンプレートだよ。イメージにはアプリケーションを実行するために必要なすべての要素が含まれているんだ: オペレーティングシステム、アプリケーション、ライブラリや依存関係、さらに設定ファイルも含まれているよ。オブジェクト指向プログラミング(OOP)に例えるなら、Dockerイメージがクラスで、コンテナがクラスのインスタンス(オブジェクト)になるんだ。イメージはDockerfile — イメージを作成するための手順を記載したテキストファイル — を使って作成されるよ。
イメージの主な特徴:
- レイヤー構造: イメージはいくつかのレイヤーから構成されているよ。ベースレイヤーがあり、それ以降のレイヤーは前のレイヤーに対する変更内容を表しているんだ。これにより、ストレージスペースを節約できて、ダウンロード時間が短縮されるんだ。
- 再利用性: 同じイメージを使って複数のコンテナを作成することができるよ。
- 移植性: イメージは異なるシステム間で移動可能だよ。これにより、開発、テスト、そしてさまざまな環境でのデプロイに最適なんだ。
イメージの使用例:
自分でイメージを作成する: Dockerfileを書いて、自分のアプリケーションとその依存関係の設定を指定することで、独自のイメージを作成できるんだ。
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
既存のイメージを使う: Docker Hubで利用可能なイメージを使って、ウェブサーバーやデータベースなどの標準アプリケーションをすぐにデプロイできるんだ。
docker pull nginx
このコマンドは、Docker Hubのパブリックリポジトリからnginxイメージをダウンロードするよ。
6.2 コンテナ(Containers)
Dockerコンテナとは、イメージの起動されたインスタンスのことだよ。コンテナはアプリケーションやその依存関係を分離して、独立した実行環境で動かすことができる。これによって、ホストシステムや他のコンテナとは無関係に動作させられるんだ。コンテナは軽量だし、仮想マシンみたいに独自のカーネルを作らないで、ホストのオペレーティングシステムのカーネルを利用するからなんだ。
コンテナの主な特徴:
- 分離: コンテナはアプリケーションを分離することで、独立した動作を保証し、依存関係の衝突を防ぐよ。
- 軽量性: コンテナは仮想マシンに比べてリソースの消費が少ないんだ。だって、独自のオペレーティングシステムが必要ないからね。
- 高速起動: コンテナは仮想マシンよりもかなり早く起動・停止できるから、動的な環境やスケーリングに最適だよ。
コンテナ利用例:
コンテナの起動: docker run コマンドを使えば、イメージからコンテナを起動できるよ。
docker run -d -p 80:80 --name mynginx nginx
コンテナの管理: Dockerはコンテナを管理するためのコマンドを提供しているよ。start、stop、restart、rm、execとか。
docker stop mynginx
docker rm mynginx
全てのコマンドとそのパラメータについては、次の講義で詳しく学ぶよ。
6.3 レジストリ (Registries)
Dockerレジストリ — Dockerイメージを保存するストレージだよ。レジストリは開発者や組織がイメージを保存、管理、配信できるようにするんだ。パブリックとプライベートのレジストリがあるよ。
レジストリの主な特徴:
- パブリックレジストリ: Docker Hubのようなものは、コミュニティや公式開発者が作成した多数のイメージにアクセスできるんだよ。
- プライベートレジストリ: 組織内部でイメージを保存・管理するために使われ、アクセス制御やセキュリティを提供してくれる。
- CI/CDとの統合: レジストリは継続的インテグレーションとデプロイのシステムと簡単に統合でき、イメージの作成とデプロイのプロセスを自動化できるよ。
レジストリの利用例:
1. Docker Hub: パブリック(そして最も人気のある)Dockerイメージのレジストリだね。たくさんの準備済み(そしてダウンロード統計から信頼できることが多い)イメージにアクセスできるよ。
docker pull nginx
docker push myusername/myimage:tag
2. プライベートレジストリ: Docker Registryを使って独自のレジストリをセットアップして使うことができるよ。
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
イメージ、コンテナ、レジストリの連携
この3つのコンポーネントは密接に関連していて、Docker作業の基盤となるんだ:
- イメージの作成: 開発者はDockerfileを使ってイメージを作成し、ローカルに保存するよ。
- イメージをレジストリにアップロード: イメージはレジストリ(例: Docker Hubやプライベートレジストリ)にアップロードされ、保存されて他のユーザーやシステムが利用できるようになるんだ。
- コンテナの起動: ユーザーはレジストリからイメージをダウンロードして、アプリケーションを隔離して実行するためのコンテナを起動するよ。
6.4 オーケストレーション (Orchestration)
オーケストレーション — これは分散環境で複数のコンテナを管理するプロセスのことだよ。オーケストレーションツールはコンテナのデプロイ、スケーリング、管理を自動化するのを助けてくれるんだ。
- Kubernetes: 一番人気のコンテナオーケストレーションプラットフォームで、異なるノード上のコンテナクラスターを管理するのを可能にしてくれるよ。
- Docker Swarm: Dockerに組み込まれたオーケストレーションプラットフォームで、Dockerクラスターを作成・管理できるんだ。
- オーケストレーションの機能: 自動スケーリング、自己復元、ネットワーク管理、そして負荷分散も含まれるよ。
6.5 ネットワーク (Networks)
Dockerのネットワークは、コンテナ同士や外部の世界とやり取りすることを可能にするよ。Dockerは、いろんな利用シナリオに合わせたネットワークタイプを提供してる。
- Bridge: Dockerがデフォルトで作成するネットワーク。ブリッジネットワークの中のコンテナはお互いにやり取りができるよ。
- Host: コンテナがホストマシンのネットワークインターフェースを使って、直接アクセスを得ることができる。
- Overlay: 複数のDockerデーモン間でネットワークを作成するために使われる。オーケストレーションに必要だよ。
- None: コンテナのすべてのネットワークインターフェースを無効にする。分離されたタスクに便利。
6.6 ボリューム (Volumes)
ボリューム (Volumes) は、コンテナのデータを永続的に保存するための仕組みだよ。これを使うと、コンテナの再起動や削除されてもデータが失われることはない。
- ボリュームの作成: ボリュームはコマンド
docker volume create
で作成されるんだ。 - ボリュームのマウント: ボリュームは起動時にフラグ
-v
を使ってコンテナに接続するよ。 - 利点: ボリュームはコンテナ間でのデータ保存や共有を簡単にするし、bind mountsよりもパフォーマンスが良いんだよ。
重要!
ボリュームは仮想ハードディスクみたいなもので、仮想マシンやコンテナに接続することができるんだ。通常はホストOS上で普通のファイルとして保存されているよ。
GO TO FULL VERSION