📚
Dockerについての基礎学習
行いたいこと
- Dockerの基本概念から応用技術まで全体像を理解する
Dockerの基本概念
Dockerとは
- Docker社が提供する
コンテナ型仮想化技術
。 - ゲストOSを起動せず、
Docker Engine
上でコンテナを動かすため、従来の仮想化より軽量。
コンテナ型仮想化技術とは?
物理マシンや仮想マシンと違い、ホストOS上で直接アプリケーションを動かすための仮想化方式。
軽量で高速に動作し、開発環境の差異をなくすのに役立つ。
Dockerのメリット
- 複数開発者間での環境共有が容易。
- 軽量な動作で環境をどのマシン(PC)にも再現可能。
- 複雑なシステム構成(アーキテクチャ)でも効率的に共有できる。
ここでのアーキテクチャとは?
・ここで言う「アーキテクチャ」は、システムやアプリケーションの構造や設計思想を指す
Docker Engineの構成要素
① Docker Engine
- Dockerを利用するための常駐プログラム。
-
「Docker for Mac」「Docker for Windows」
などをインストールして利用。
② イメージ(Image)
- コンテナを起動するための設定ファイルをまとめたもの。
-
tag
でバージョン管理(例:nginx:latest
)。 - レイヤー構造で読み取り専用。
レイヤー構造とは?
Dockerイメージは複数の「レイヤー」で構成されており、変更があった部分だけ新しいレイヤーとして追加される。
これによりイメージの再利用が効率的になり、ビルド時間も短縮される。
③ コンテナ(Container)
- イメージから起動されるアプリケーションの実行環境。
- 主な操作コマンド
・create
,start
,stop
,restart
・pause
,unpause
,rm
・ コンテナ接続はattach
やexec
を利用。
attachとexecの違い
-
docker attach
:コンテナの「標準入出力」に接続する。 -
docker exec
:コンテナ内で新しいプロセスを起動する。
例えば、既存コンテナ内でbash
を実行する場合はdocker exec -it コンテナID bash
を使う。
④ Docker Hub(Container Registry)
-
Dockerイメージ
を共有するためのサービス。 -
GitHub
のようにリポジトリを作成してpush
/pull
可能。 - 利用には
Docker Hub
アカウントの作成とログインが必要
プライベートレジストリとは?
Docker Hubのような公開レジストリではなく、社内や特定チーム向けにイメージを管理するための非公開レジストリ。
代表例:AWS ECR、GCP Artifact Registry、GitHub Container Registry。
Container Registryとは?
「コンテナレジストリ(Container Registry)」とは、Dockerイメージを保存・管理・共有するためのサービスの総称
Docker Hubはその中でも最も一般的に使われる公式レジストリ
データ管理・ネットワーク・Docker Compose
⑤ Dockerにおけるデータ管理
コンテナレイヤーのデメリット
- コンテナ削除時にデータが消える。
- コンテナ間でデータ共有不可。
- ユニオンファイルシステムのため書き込み速度が遅い。
データマウント手法(3種類)
-
Volume
- ホスト上の
/var/lib/docker/volumes
をコンテナにマウント。 -
docker volume create
で作成し、--mount
で指定。 - 複数コンテナ間でファイル共有が可能。
- ホスト上の
データマウントとは?
コンテナは基本的に「使い捨て」で、削除すると中のデータも消えてしまいます。
そのため、コンテナの外(ホストマシン)にデータを保存したり、複数コンテナ間でデータを共有する仕組みが必要になります。
この コンテナとホスト間でストレージを共有する仕組み のことを「データマウント」と呼びます。
Volumeが推奨される理由
- コンテナ削除時にもデータを保持できる。
- 複数コンテナ間でデータ共有が可能。
- Dockerが管理するため安全でパフォーマンスも安定している。
-
Bind Mount
- ホスト上の任意ディレクトリをコンテナにマウント。
- ホストから直接操作可能で設定不要。
- 空ディレクトリをマウントするとデータ消失の恐れあり。
-
tmpfs
- ホストのメモリ領域をコンテナにマウント。
- ホストやコンテナ終了時にデータが自動的に解放。
- メモリサイズの制限が設定可能。
⑥ Dockerネットワーク
ネットワークの目的
- 複数コンテナ間での通信を実現。
- 例:APIサーバとMySQLコンテナの通信。
デフォルトネットワーク(3種類)
-
Bridge(デフォルト)
- コンテナ同士はIP指定で通信可能。
- コンテナ名で通信する場合は独自ネットワーク作成が必要。
-
Host
- Dockerホストと同じネットワークを利用。
- ポート設定不要。
-
None
- 完全にネットワークから切り離す設定。
独自ネットワーク
-
docker network create
で作成。 - 組み込みDNSによりコンテナ名で通信可能。
Bridgeと独自ネットワークの違い
- Bridgeネットワーク:デフォルト設定。コンテナ間通信はIPアドレス指定が必要。
-
独自ネットワーク:
docker network create
で作成。コンテナ名で通信できるため、設定がシンプル。
⑦ Docker Compose
目的
- 複数コンテナの設定をまとめて管理・実行するツール。
- 環境構築を効率化し、共有を容易にする。
使用手順
-
Dockerfile
またはDocker Hubイメージ
を準備。 -
docker-compose.yml
を定義。 -
docker-compose up
で起動。
メリット
- 単一のymlファイルで複数コンテナを管理。
- 環境設定を簡単に共有可能。
主なコマンド
-
docker-compose up
:起動 -
docker-compose down
:削除 -
docker-compose ps
:一覧表示 -
docker-compose run
:コマンド実行
実装例:Djangoアプリ
-
Dockerfile
でPythonとDjango環境を定義。 -
docker-compose.yml
でwebサーバとdbサーバを設定。 -
depends_on
で起動順序を制御。
depends_onとは?
docker-compose.yml
内でサービス間の起動順序を指定するオプション。
例:DB → Webサーバの順に立ち上げたい場合に使用する。
Docker Machine・Docker Swarm
⑧ Docker Machine
概要
-
Docker Engine
を搭載した仮想マシンを管理するCLIツール。 -
VirtualBox
などの仮想化ソフトを利用。 - ローカル・リモート両方の
Dockerホスト
を管理可能。
主なコマンド
-
docker-machine ls
:ホスト一覧表示 -
docker-machine create
:新規ホスト作成 -
docker-machine start/stop
:起動・停止 -
docker-machine ssh
:ホストへSSH接続
クラウド対応
-
AWS
やGCP
にDockerホスト
を作成・管理可能。
Docker SwarmとKubernetesの違い
- Docker Swarm:Dockerに標準で備わっているクラスタ管理機能。設定が簡単で学習コストが低い。
- Kubernetes:より高度な機能を持つオーケストレーションツール。大規模システム向け。
⑨ Docker Swarm
概要
-
複数Dockerホストを統合管理
するためのオーケストレーションツール。 -
Kubernetes
と同様にクラスタ管理機能を提供。
基本概念
-
Workerノード
:コンテナ実行専用。 -
Managerノード
:クラスタ管理+コンテナ実行。 -
Overlayネットワーク
:ノード間通信を自動設定。
主な機能
-
ServiceとTask管理
-
Service
:コンテナの数や実行場所を定義。 -
Task
:実際に動作するコンテナ。
-
-
ローリングアップデート
- 遅延設定をして順次更新。
-
オートスケーリング
- 負荷に応じて自動でコンテナ数を調整。
-
Auto Healing
- ノード障害時にコンテナを自動復旧。
主なコマンド
-
docker swarm init
:Swarmクラスタ作成 -
docker node ls
:ノード一覧表示 -
docker service create
:サービス作成 -
docker service scale
:コンテナ数スケーリング
以上です。
Discussion