📚

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
    ・ コンテナ接続は attachexec を利用。
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種類)

  1. Volume
    • ホスト上の/var/lib/docker/volumesをコンテナにマウント。
    • docker volume createで作成し、--mountで指定。
    • 複数コンテナ間でファイル共有が可能。
データマウントとは?

コンテナは基本的に「使い捨て」で、削除すると中のデータも消えてしまいます。
そのため、コンテナの外(ホストマシン)にデータを保存したり、複数コンテナ間でデータを共有する仕組みが必要になります。
この コンテナとホスト間でストレージを共有する仕組み のことを「データマウント」と呼びます。

Volumeが推奨される理由
  • コンテナ削除時にもデータを保持できる。
  • 複数コンテナ間でデータ共有が可能。
  • Dockerが管理するため安全でパフォーマンスも安定している。
  1. Bind Mount

    • ホスト上の任意ディレクトリをコンテナにマウント。
    • ホストから直接操作可能で設定不要。
    • 空ディレクトリをマウントするとデータ消失の恐れあり。
  2. tmpfs

    • ホストのメモリ領域をコンテナにマウント。
    • ホストやコンテナ終了時にデータが自動的に解放。
    • メモリサイズの制限が設定可能。

⑥ Dockerネットワーク

ネットワークの目的

  • 複数コンテナ間での通信を実現。
  • 例:APIサーバとMySQLコンテナの通信。

デフォルトネットワーク(3種類)

  • Bridge(デフォルト)
    • コンテナ同士はIP指定で通信可能。
    • コンテナ名で通信する場合は独自ネットワーク作成が必要。
  • Host
    • Dockerホストと同じネットワークを利用。
    • ポート設定不要。
  • None
    • 完全にネットワークから切り離す設定。

独自ネットワーク

  • docker network createで作成。
  • 組み込みDNSによりコンテナ名で通信可能。
Bridgeと独自ネットワークの違い
  • Bridgeネットワーク:デフォルト設定。コンテナ間通信はIPアドレス指定が必要。
  • 独自ネットワークdocker network createで作成。コンテナ名で通信できるため、設定がシンプル。

⑦ Docker Compose

目的

  • 複数コンテナの設定をまとめて管理・実行するツール。
  • 環境構築を効率化し、共有を容易にする。

使用手順

  1. DockerfileまたはDocker Hubイメージを準備。
  2. docker-compose.ymlを定義。
  3. 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接続

クラウド対応

  • AWSGCPDockerホストを作成・管理可能。
Docker SwarmとKubernetesの違い
  • Docker Swarm:Dockerに標準で備わっているクラスタ管理機能。設定が簡単で学習コストが低い。
  • Kubernetes:より高度な機能を持つオーケストレーションツール。大規模システム向け。

⑨ Docker Swarm

概要

  • 複数Dockerホストを統合管理するためのオーケストレーションツール。
  • Kubernetesと同様にクラスタ管理機能を提供。

基本概念

  • Workerノード:コンテナ実行専用。
  • Managerノード:クラスタ管理+コンテナ実行。
  • Overlayネットワーク:ノード間通信を自動設定。

主な機能

  1. ServiceとTask管理
    • Service:コンテナの数や実行場所を定義。
    • Task:実際に動作するコンテナ。
  2. ローリングアップデート
    • 遅延設定をして順次更新。
  3. オートスケーリング
    • 負荷に応じて自動でコンテナ数を調整。
  4. Auto Healing
    • ノード障害時にコンテナを自動復旧。

主なコマンド

  • docker swarm init:Swarmクラスタ作成
  • docker node ls:ノード一覧表示
  • docker service create:サービス作成
  • docker service scale:コンテナ数スケーリング




以上です。






GitHubで編集を提案

Discussion