Docker 環境の基礎構築とコンテナ管理手法

Docker 技術の概要

Docker は、アプリケーションとその依存ライブラリを標準化されたユニットである「コンテナ」にパッケージ化するためのオープンソースエンジンです。これにより、開発者はインフラストラクチャに依存しない形でソフトウェアをビルド、共有、実行することが可能になります。コンテナは Linux カーネルの機能(名前空間や cgroups など)を利用してプロセスレベルの隔離を実現しており、従来の仮想マシンと比較して軽量で起動が高速であるという特徴があります。

主な利点としては以下の点が挙げられます:

  • 環境の統一: 開発、テスト、本番環境で同一のコンテナイメージを使用することで、「手元では動いたのにサーバーで動かない」といった問題を防ぎます。
  • 迅速なスケーリング: イメージから瞬時にコンテナを起動できるため、負荷変動に応じた動的な拡張が容易です。
  • マイクロサービスへの適応: 単一のホスト上で複数の独立したサービスを実行し、リソースを効率的に共有しながら隔離された環境を維持できます。
  • リソース隔離: 各コンテナは独自のファイルシステム、ネットワーク、プロセス空間を持ち、相互干渉を最小限に抑えます。

主要な構成要素

Docker のアーキテクチャを理解するには、以下の 3 つの核心概念を把握する必要があります。

1. Docker イメージ (Images)
コンテナを実行するための読み取り専用テンプレートです。オペレーティングシステム、ミドルウェア、アプリケーションコードなどが層(レイヤー)になって構成されています。オブジェクト指向プログラミングにおける「クラス」に相当する概念です。

2. Docker コンテナ (Containers)
イメージから起動された実行中のインスタンスです。アプリケーションが動作するための完全な環境を含んでおり、「クラスから生成されたオブジェクト」に例えられます。コンテナは作成、起動、停止、削除が可能です。

3. Docker レジストリ (Registries)
イメージを保管・配布するための倉庫です。Docker Hub のような_PUBLIC_なレジストリや、組織内で構築する_PRIVATE_なレジストリがあります。Maven のリポジトリや Git リモート repository と类似的な役割を果たします。

コンテナ lifecycle 管理コマンド

Docker をインストールした後、主に以下のコマンドを使用してイメージやコンテナを操作します。

  • イメージの検索: 公開されているイメージを探します。
    docker search redis:alpine
  • ローカルイメージの一覧: 現在ダウンロード済みのイメージを表示します。
    docker images
  • イメージの取得: レジストリからイメージをダウンロードします。
    docker pull redis:7.0
    ※ 形式は REPOSITORY:TAG です。TAG を省略すると latest が選択されます。
  • コンテナの起動: イメージから新しいコンテナを生成し実行します。
    docker run -d --name "cache_service_01" -p 6380:6379 redis:7.0
    • -d: バックグラウンド実行
    • --name: コンテナに任意の名前を付与
    • -p: ホストのポートとコンテナのポートをマッピング(ホスト:コンテナ)
  • 実行中コンテナの確認: 現在起動しているコンテナの一覧を表示します。
    docker ps
    直近 5 件を表示する場合は docker ps -n 5 を使用します。
  • 詳細情報の確認: コンテナの設定や状態を確認します。
    docker inspect cache_service_01
  • コンテナの停止と起動:
    docker stop cache_service_01
    docker start cache_service_01
  • コンテナの削除: 停止済みのコンテナを削除します。
    docker rm cache_service_01
  • イメージの削除: 不要なイメージを削除します。
    docker rmi redis:7.0
    使用中でも強制削除する場合は -f オプションを追加します。

Web サーバーのデプロイ事例

Nginx を使用して複数の Web サーバーインスタンスを立ち上げる手順を示します。

  1. イメージの準備: 必要なイメージをローカルに用意します。
    docker pull nginx:stable
  2. 複数インスタンスの起動: 異なるポートをバインドして複数のコンテナを実行します。
    docker run -d --name "web_front_01" -p 9080:80 nginx:stable
    docker run -d --name "web_front_02" -p 9081:80 nginx:stable
    docker run -d --name "web_front_03" -p 9082:80 nginx:stable
  3. 動作確認: ブラウザまたは curl コマンドでアクセス可能なことを確認します。
    curl http://127.0.0.1:9080
    ※ クラウド環境の場合、セキュリティグループまたはファイアウォール設定で該当ポートのインバウンド規則を開放する必要があります。

私有レジストリの活用

組織内で独自のイメージを管理するには、私有レジストリを使用します。ここでは一般的な手順を示します。

  1. レジストリへのログイン: 認証情報を入力してアクセス権を取得します。
    docker login --username=user@example.com registry.internal.corp
  2. イメージのタグ付け: ローカルイメージをレジストリ用の命名規則に変更します。
    docker tag a1b2c3d4e5f6 registry.internal.corp/team/project_app:v1.0.0
  3. イメージのプッシュ: 私有レジストリへアップロードします。
    docker push registry.internal.corp/team/project_app:v1.0.0
  4. 別環境での展開: 別のサーバーからイメージを_pull_して起動します。
    docker pull registry.internal.corp/team/project_app:v1.0.0
    docker run -d --name "prod_app" -p 8080:8080 a1b2c3d4e5f6

タグ: Docker containerization nginx DevOps linux

7月12日 20:00 投稿