Docker CLI を効果的に活用する方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker CLI は、開発者がコマンドラインインタフェースを通じて Docker コンテナ、イメージ、ネットワークと対話するための強力なツールです。この包括的なチュートリアルでは、コンテナの効率的な管理と操作方法、堅牢な開発環境の構築方法、コンテナ化ワークフローの最適化方法について、Docker CLI の基本的なテクニックを指導します。

Docker CLI の基礎

Docker CLI とは?

Docker コマンドラインインタフェース (CLI) は、Docker デーモンと対話し、コンテナ、イメージ、ネットワーク、ボリュームを管理するための強力なツールです。テキストベースのインタフェースを提供し、Docker コマンドを実行し、様々な操作を行うことができます。

インストールと設定

Docker CLI を使用する前に、Ubuntu 22.04 システムに Docker がインストールされていることを確認してください。

## パッケージインデックスを更新
sudo apt update

## Docker をインストール
sudo apt install docker.io

## インストールを確認
docker --version

Docker CLI の基本構造

Docker CLI コマンドは標準的な構文に従います。

docker <オブジェクト> <コマンド> <オプション>

コマンドのカテゴリ

カテゴリ 目的
管理コマンド Docker オブジェクトの管理
イメージコマンド イメージのプル、ビルド、管理
コンテナコマンド コンテナの作成、実行、制御
ネットワークコマンド Docker ネットワークの設定
ボリュームコマンド 永続的なデータストレージの管理

認証と権限

graph TD
    A[ユーザー] --> B{Docker CLI}
    B --> |sudoが必要| C[ルート権限]
    B --> |ユーザーグループ| D[Docker グループアクセス]

すべてのコマンドで sudo を使用しないようにするには、ユーザーを docker グループに追加します。

## 現在のユーザーを docker グループに追加
sudo usermod -aG docker $USER

## セッションを再起動
newgrp docker

Docker CLI の設定

設定ファイルは通常以下の場所に配置されています。

  • /etc/docker/daemon.json (システム全体)
  • ~/.docker/config.json (ユーザー固有)

主要な概念

  1. Docker デーモン: Docker オブジェクトを管理するバックグラウンドサービス
  2. Docker クライアント: デーモンと対話するための CLI ツール
  3. Docker オブジェクト: イメージ、コンテナ、ネットワーク、ボリューム

これらの基本を理解することで、ユーザーはコンテナ化タスクに Docker CLI を効果的に活用できます。LabEx は、Docker の管理に関する確かな基礎を築くために、これらの基本的なコマンドの実践を推奨します。

コモン Docker コマンド

イメージ管理コマンド

イメージのプル

## Docker Hub からイメージをプル
docker pull ubuntu:latest
docker pull nginx:1.21

イメージのリスト表示

## ローカルにあるすべてのイメージをリスト表示
docker images
docker image ls

イメージのビルド

## Dockerfile からイメージをビルド
docker build -t myapp:v1 .

コンテナ操作

コンテナの実行

## 新しいコンテナを実行
docker run -d --name web-server nginx
docker run -it ubuntu:latest /bin/bash

コンテナ管理コマンド

コマンド 説明
docker ps 実行中のコンテナのリスト docker ps
docker ps -a すべてのコンテナのリスト docker ps -a
docker start 停止したコンテナの起動 docker start web-server
docker stop 実行中のコンテナの停止 docker stop web-server
docker rm コンテナの削除 docker rm web-server

ネットワークコマンド

graph TD
    A[Docker ネットワークコマンド]
    A --> B[ネットワークの作成]
    A --> C[ネットワークのリスト表示]
    A --> D[ネットワークの詳細表示]

ネットワーク操作

## カスタムネットワークの作成
docker network create mynetwork

## ネットワークのリスト表示
docker network ls

## コンテナをネットワークに接続
docker network connect mynetwork web-server

ボリューム管理

## ボリュームの作成
docker volume create mydata

## ボリュームのリスト表示
docker volume ls

## コンテナにボリュームのマウント
docker run -v mydata:/app nginx

デバッグと検査

## コンテナのログの表示
docker logs web-server

## 実行中のコンテナでコマンドを実行
docker exec -it web-server bash

## コンテナの詳細の検査
docker inspect web-server

高度なコマンド

クリーンアップ

## 使用されていないイメージの削除
docker image prune

## 停止したすべてのコンテナの削除
docker container prune

最良のプラクティス

  1. 常に具体的なイメージタグを使用する
  2. 不要なコンテナとイメージを削除する
  3. ボリュームを使用して永続的なデータを保存する
  4. ネットワークの分離を活用する

LabEx は、これらの一般的な Docker CLI コマンドを習得することで、コンテナ化された環境を効率的に管理することを推奨します。

CLI ワークフローパターン

開発ワークフロー

graph TD
    A[コード開発] --> B[Docker イメージのビルド]
    B --> C[コンテナのテスト]
    C --> D[レジストリへのプッシュ]
    D --> E[コンテナのデプロイ]

典型的な開発サイクル

## プロジェクトをクローン
git clone https://github.com/example/project

## Dockerfile を作成
touch Dockerfile

## イメージをビルド
docker build -t myapp:dev .

## テスト用コンテナを実行
docker run -d --name test-container myapp:dev

継続的インテグレーションワークフロー

ビルドとテスト

## ビルド引数を使用してイメージをビルド
docker build --build-arg ENV=development -t myapp:ci .

## 自動化されたテストを実行
docker run --rm myapp:ci npm test

コンテナライフサイクル管理

ワークフロー段階

段階 Docker コマンド 目的
ビルド docker build イメージの作成
テスト docker run コンテナの検証
プッシュ docker push イメージの共有
デプロイ docker run プロダクションでの実行

マルチコンテナデプロイ

Docker Compose ワークフロー

## docker-compose.yml でサービスを定義
version: '3'
services:
web:
build: .
ports:
- "8000:80"
database:
image: postgres:latest

## マルチコンテナ環境を起動
docker-compose up -d

マイクロサービスパターン

graph TD
    A[API サービス] --> B[データベース サービス]
    A --> C[キャッシュ サービス]
    A --> D[認証サービス]

サービス管理

## マイクロサービス用のネットワークを作成
docker network create microservices-net

## ネットワーク接続を使用してサービスを実行
docker run -d --name api --network microservices-net myapi
docker run -d --name database --network microservices-net mydb

デバッグワークフロー

トラブルシューティング手順

## コンテナログを検査
docker logs api-service

## 対話型シェルを実行
docker exec -it api-service /bin/bash

## コンテナのリソース使用量を確認
docker stats api-service

プロダクションデプロイワークフロー

イメージタグ付け戦略

## プロダクション用のイメージにタグを付ける
docker tag myapp:latest myregistry.com/myapp:v1.0

## プライベートレジストリにプッシュ
docker push myregistry.com/myapp:v1.0

## プロダクションでプルして実行
docker pull myregistry.com/myapp:v1.0
docker run -d myregistry.com/myapp:v1.0

最良のプラクティス

  1. 具体的なイメージタグを使用する
  2. マルチステージビルドを実装する
  3. イメージサイズを最小限にする
  4. Docker Compose を複雑なセットアップに活用する

LabEx は、これらのワークフローパターンを実践することで、Docker コンテナの管理とデプロイプロセスを効率化することを推奨します。

まとめ

Docker CLI コマンドとワークフローパターンを習得することで、開発者はコンテナ管理スキルを大幅に向上させることができます。このチュートリアルでは、Docker コンテナを操作、作成、管理、最適化するための基本的な技術を習得し、現代のソフトウェア開発およびデプロイシナリオで Docker の潜在能力を最大限に活用できるよう装備しました。