Docker コンテナとイメージの管理方法

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

はじめに

Docker は、アプリケーションの開発、デプロイ、管理方法を革新しました。この包括的なチュートリアルでは、コンテナとイメージの構築、デプロイから監視、トラブルシューティングまで、Docker コンテナを効果的に管理する方法を学びます。Docker ユーザーの経験レベルが初心者であろうとベテランであろうと、このガイドは Docker コンテナ管理の技術を習得するための必須スキルを提供します。

Docker コンテナの概要

Docker とは何か?

Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するためのオープンソースプラットフォームです。コンテナは、アプリケーションのコード、依存関係、ランタイム環境をパッケージ化した軽量で移植可能な自己完結型のユニットであり、異なるコンピューティング環境間でのアプリケーションの移動を容易にします。

Docker コンテナの利点

  1. 一貫性: Docker コンテナは、基盤となるインフラストラクチャに関係なく、アプリケーションが同じ方法で実行されることを保証します。
  2. スケーラビリティ: コンテナは、変化する需要に対応するために容易にスケールアップまたはスケールダウンできます。
  3. 効率性: コンテナは従来の仮想マシンよりも軽量で、リソースをより少なく使用します。
  4. 移植性: Docker コンテナは、Docker ランタイムをサポートするあらゆるシステムで実行できるため、アプリケーションを異なる環境間で簡単に移動できます。

Docker アーキテクチャ

Docker はクライアント・サーバーアーキテクチャを採用しており、Docker クライアントは Docker デーモン(サーバー)と通信して、コンテナの構築、実行、管理などの様々な操作を実行します。

graph LD
    subgraph Docker アーキテクチャ
        client[Docker クライアント]
        daemon[Docker デーモン]
        registry[Docker レジストリ]
        client -- 通信 --> daemon
        daemon -- pull/push --> registry
    end

Docker コンポーネント

  1. Docker イメージ: Docker イメージは、コンテナの構成要素です。アプリケーションコード、依存関係、ランタイム環境を含んでいます。
  2. Docker コンテナ: コンテナは、Docker イメージの実行インスタンスです。分離性、軽量性、移植性を備えています。
  3. Docker レジストリ: Docker レジストリは、Docker イメージの保存と配布システムです。最も一般的なレジストリは、Docker 社が提供するパブリックレジストリである Docker Hub です。

Docker の開始

Docker を開始するには、システムに Docker ランタイムをインストールする必要があります。Docker は公式 Docker ウェブサイト (https://www.docker.com/get-started) からダウンロードしてインストールできます。

Docker をインストールしたら、Docker コンテナを探索して使用し始めることができます。次のセクションでは、Docker イメージの管理方法を学びましょう。

Docker イメージの管理

Docker イメージのプル

レジストリから Docker イメージをプルするには、docker pull コマンドを使用します。

docker pull ubuntu:22.04

これにより、Docker Hub レジストリから ubuntu:22.04 イメージがプルされます。

Docker イメージのビルド

Dockerfile を使用して独自の Docker イメージをビルドできます。Dockerfile は、イメージのビルド手順を含むテキストファイルです。以下の Dockerfile が例です。

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

イメージをビルドするには、以下のコマンドを実行します。

docker build -t my-nginx-app .

これにより、my-nginx-app という名前の新しい Docker イメージが作成されます。

Docker イメージのリスト表示

システム上のすべての Docker イメージをリスト表示するには、docker images コマンドを使用します。

docker images

これにより、各イメージの名前、タグ、イメージ ID、作成日時、サイズなどに関する情報を含む表が表示されます。

Docker イメージのタグ付け

Docker イメージにタグを追加して、整理および管理することができます。イメージにタグを追加するには、docker tag コマンドを使用します。

docker tag my-nginx-app:latest my-nginx-app:v1.0

これにより、my-nginx-app イメージに新しいタグ v1.0 が作成されます。

Docker イメージのプッシュ

Docker イメージを構築してタグ付けしたら、docker push コマンドを使用してレジストリにプッシュできます。

docker push my-nginx-app:v1.0

これにより、my-nginx-app:v1.0 イメージがデフォルトのレジストリ(Docker Hub)にプッシュされます。

Docker イメージの削除

Docker イメージを削除するには、docker rmi コマンドを使用します。

docker rmi my-nginx-app:v1.0

これにより、my-nginx-app:v1.0 イメージがシステムから削除されます。

Docker イメージの管理方法を学んだので、次のセクションでは Docker コンテナの実行とデプロイ方法を学びましょう。

Docker コンテナの実行とデプロイ

Docker コンテナの実行

Docker コンテナを実行するには、docker run コマンドを使用します。

docker run -d -p 80:80 my-nginx-app

これにより、my-nginx-app イメージに基づいた新しいコンテナが起動し、ホストのポート 80 がコンテナのポート 80 にマッピングされます。

-it フラグを使用して対話型のコンテナを実行することもできます。

docker run -it ubuntu:22.04 /bin/bash

これにより、対話型の Ubuntu コンテナが起動し、コンテナ内部でシェルプロンプトが表示されます。

実行中のコンテナの管理

実行中のすべてのコンテナをリスト表示するには、docker ps コマンドを使用します。

docker ps

実行中のコンテナを停止するには、docker stop コマンドを使用します。

docker stop my-nginx-app

停止したコンテナを起動するには、docker start コマンドを使用します。

docker start my-nginx-app

コンテナログへのアクセス

実行中のコンテナのログを表示するには、docker logs コマンドを使用します。

docker logs my-nginx-app

これにより、my-nginx-app コンテナのログが表示されます。

コンテナ内でのコマンドの実行

実行中のコンテナ内でコマンドを実行するには、docker exec コマンドを使用します。

docker exec -it my-nginx-app /bin/bash

これにより、my-nginx-app コンテナ内で対話型のシェルセッションが起動します。

Docker コンテナのデプロイ

本番環境で Docker コンテナをデプロイするには、Docker Compose や Kubernetes などのツールを使用できます。これらのツールは、複数のコンテナとその依存関係を管理およびオーケストレーションするのに役立ちます。

シンプルな Docker Compose ファイルの例を次に示します。

version: "3"
services:
  web:
    image: my-nginx-app
    ports:
      - "80:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password

この設定をデプロイするには、docker-compose up コマンドを使用します。

Docker Compose や Kubernetes を使用することで、コンテナ化された環境でアプリケーションを簡単にスケール、管理、デプロイできます。

まとめ

このチュートリアルでは、Docker コンテナとイメージの管理の基本を学びました。Docker ベースのアプリケーションを構築、デプロイ、保守する方法を理解し、スムーズかつ効率的に動作させることができるようになりました。Docker の力を活用することで、開発およびデプロイプロセスを効率化し、生産性とスケーラビリティを高めることができます。Docker をさらに探求し、実験することで、スキルを向上させ、この革新的なテクノロジーの潜在能力を最大限に引き出すことができます。