Dockerの公式についての覚書
行いたいこと
- Dockerについて公式になぞっての学習したので覚え書きをしていく。
Dockerについて
-
Docker
は、アプリケーションを 開発(develop)、配送(ship)、実行(run) するためのオープンプラットフォーム。 - インフラ環境とアプリケーションを切り離し、環境間の差異を減らすことで、ソフトウェアの提供速度と信頼性を向上さる。
Docker プラットフォームでできること
- 環境の違いによるトラブルをなくせる
・開発
→テスト
→本番
の流れでよく起きる、「手元では動いたのに本番でエラーになる」といった問題を防げる。
・Docker
はアプリと必要な環境(OS・ライブラリ・設定)をまとめてパッケージ化できるので、どこでも同じ状態で動かせる。
- すぐにデプロイできて、必要に応じて増減できる
・コンテナは数秒で起動できるので、新しいアプリや機能をすぐに公開できる。またクラウド
やオンプレ
など場所を問わず動かせるため、柔軟にスケーリング(増減)が可能。
・アクセスが増えるときだけサーバーを増やし、落ち着いたら減らせるので効率的。
- サーバーを効率よく使える
・仮想マシン(VM)
は、OSごと動かすため重いが、DockerコンテナはホストOSを共有するので軽量。
・その分、同じサーバーでより多くのアプリを同時に動かせる。サーバーの無駄を減らし、コスト削減にもつながる。
アーキテクチャ構成要素
- Docker デーモン(
dockerd
) - Docker クライアント(
docker
CLI) - Docker Desktop
- Docker レジストリ / Docker Hub
- Docker オブジェクト
アーキテクチャ構成要素
-
Docker デーモン(
dockerd
)
REST API
を通じてコマンドを受け取り、イメージ/コンテナ/ネットワーク/ボリュームなどを管理。 -
Docker クライアント(
docker
CLI)
ユーザが操作するツール。CLI コマンドをデーモンに送る。 -
Docker Desktop
Mac, Windows, Linux用 GUI
含むパッケージ。Engine, CLI, Compose, Kubernetes
などが含まれており、開発環境を手軽に構築可能。 -
Docker レジストリ / Docker Hub
イメージの保存と共有の場所。パブリック/プライベート両方対応。 -
Docker オブジェクト
オブジェクト 説明 イメージ(Image) 読み取り専用のテンプレート。ベースイメージにレイヤーを重ねて構成 コンテナ(Container) イメージを実行した状態。プロセスが隔離された環境で動く実体 ネットワーク / ボリューム コンテナ間通信、データ永続化等を扱う補助的な構成要素
基礎技術・用語
-
コンテナ(Container)
・軽量で隔離された実行環境。→ 例えるなら「アプリ専用の小さな部屋」。
・部屋の中にはアプリに必要なもの(ライブラリや設定)だけが入っており、外の環境に影響されない。
・そのため「自分のPCでは動いたけど、他の環境では動かない」という問題を解決できる。
-
イメージ(Image)
・コンテナを作るための設計図。→ 例えるなら「料理のレシピ」。
・1つのイメージから何個でもコンテナを作れる。
・イメージはレイヤー構造になっていて、
例えば- OSのベース
- ミドルウェア(例: nginx, MySQL)
- アプリ本体
と積み重なって構成されている。
-
レジストリ(Registry)
・イメージを保存・配布するための場所。→ 例えるなら「アプリの倉庫」。
・よく使われるのは Docker Hub(公式の公開レジストリ)。
・自分専用の プライベートレジストリ を作って、チームで共有することも可能。
-
Docker Compose
・複数のコンテナをまとめて管理するためのツール。→ 例えるなら「建物全体の設計図」。
・docker-compose.yml
に Web サーバー、DB、キャッシュなどの構成を書いておけば、
docker compose up
コマンドひとつで全部まとめて起動できる。
・複雑なシステムを簡単に動かせるので、開発・検証環境で特によく使われる。
デーモン設定のポイント
- 設定方法
- 設定ファイルの場所
- データ格納ディレクトリ
デーモン設定のポイント
主要な設定内容
-
設定方法
- JSON ファイルによる設定
- 起動時のフラグ指定
- 両方で同一オプションを重複させるとエラーになる可能性あり
-
設定ファイルの場所
環境 デフォルトパス Linux 通常モード /etc/docker/daemon.json
Linux rootless モード ~/.config/docker/daemon.json
Windows C:\ProgramData\docker\config\daemon.json
-
データ格納ディレクトリ (
data-root
)
デーモンはイメージ・コンテナ・ボリュームなどを一つのディレクトリに保存。デフォルトは Linux で/var/lib/docker
。必要に応じて変更可能。
公式推奨の学習ステップ
-
Docker
をインストール(Docker Desktop や Linux 環境で) - 基本概念の理解:
イメージ、コンテナ、レジストリ、Compose
など - 小さなアプリケーションをDocker化して動かす(
Dockerfile
の書き方、ビルド、実行) - コンテナ間通信、データ永続化(ボリューム)、ネットワークなど応用
- 複数コンテナサービスをまとめて管理する
Docker Compose
を使いこなす
1. Docker をインストールの解説
最初のステップはDocker
の環境構築、
Windows / macOS
→ Docker Desktop
を利用
Linux → apt
/ yum
などパッケージマネージャ経由でインストール
インストール後は docker --version
で確認できる。
2. 基本概念の理解の解説
イメージ
: アプリの設計図(再利用可能なテンプレート)
コンテナ
: イメージから実行される実体(動いているアプリ本体)
レジストリ
: イメージを保存・共有する場所(Docker Hub が代表例)
Compose
: 複数コンテナを一括管理できるツール
→ これらを押さえるとでDockerの利便性を理解できる。
3. 小さなアプリケーションをDocker化して動かしてみるの解説
簡単な Web アプリや API を Docker 化して実験していく
手順例:
Dockerfile
を作成
docker build
でイメージ作成
docker run
で実行
「自分のアプリがどこでも動く」を確認することができる
4. コンテナ間通信、データ永続化、ネットワークなど応用の解説
コンテナ間通信
: 複数のコンテナをネットワークで接続
データ永続化
(ボリューム): コンテナを削除してもデータを保持可能
ネットワーク
: 複数アプリを連携させる仕組み
→ ここで本番環境を意識した使い方に近づく。
5. 複数コンテナサービスをまとめて管理する Docker Compose の解説
docker-compose.yml
を使って、複数のサービスを一括で管理可能。
例: Web サーバー + DB + キャッシュをまとめて起動/停止
チーム開発や本格的なアプリ開発で必須のスキル。
以上です。
Discussion