Docker コンテナに追加のユーティリティをインストールする方法

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

はじめに

Docker コンテナは、アプリケーションを軽量かつ効率的にパッケージ化してデプロイする方法を提供しますが、場合によっては、その機能を拡張するために追加のユーティリティをインストールする必要があることがあります。このチュートリアルでは、Docker コンテナに追加のユーティリティをインストールする手順を説明し、Docker ベースのアプリケーションを特定のニーズに合わせてカスタマイズできるようにします。

Docker コンテナの理解

Docker は、開発者がアプリケーションを一貫性のある再現可能な方法でパッケージ化してデプロイできるようにする人気のコンテナ化プラットフォームです。Docker コンテナは、アプリケーションとその依存関係をカプセル化し、基盤となるインフラストラクチャに関係なく同じように動作することを保証します。

Docker コンテナとは何か?

Docker コンテナは、軽量で独立した実行可能なソフトウェアパッケージで、アプリケーションを実行するために必要なすべてのもの(コード、ランタイム、システムツール、ライブラリ)を含んでいます。コンテナは互いに、およびホストオペレーティングシステムから分離されており、アプリケーションが実行される一貫性のある予測可能な環境を提供します。

Docker コンテナの利点

  • ポータビリティ:Docker コンテナは、Docker がインストールされたあらゆるシステムで実行できるため、アプリケーションが異なる環境でも同じように動作することが保証されます。
  • 一貫性:Docker コンテナは一貫性のある予測可能なランタイム環境を提供し、「自分のマシンでは動くけど」という問題を解消します。
  • 効率性:Docker コンテナは軽量で、従来の仮想マシンよりも少ないリソースを使用するため、実行とスケーリングがより効率的です。
  • スケーラビリティ:Docker を使用すると、手動で、または Docker Compose や Kubernetes などのオーケストレーションツールを通じて、コンテナの複数インスタンスを実行することでアプリケーションを簡単にスケールできます。
graph LR
    A[Host Operating System] --> B[Docker Engine]
    B --> C[Docker Container 1]
    B --> D[Docker Container 2]
    B --> E[Docker Container 3]

Docker のアーキテクチャ

Docker はクライアント - サーバーアーキテクチャを使用しており、Docker クライアントが Docker デーモン(サーバー)と通信して、Docker コンテナの構築、配布、実行を行います。Docker デーモンは、イメージ、コンテナ、ネットワーク、ボリュームなどの Docker オブジェクトを管理する責任があります。

コンポーネント 説明
Docker Client Docker デーモンとやり取りするために使用されるコマンドラインインターフェイス(CLI)。
Docker Daemon イメージ、コンテナ、ネットワーク、ボリュームなどの Docker オブジェクトを管理するバックグラウンドプロセス。
Docker Images Docker コンテナを作成するために使用される読み取り専用のテンプレート。
Docker Containers Docker イメージの実行可能なインスタンス。
Docker Registries Docker イメージを保存および配布するためのリポジトリ。

Docker で追加のユーティリティをインストールする

Docker コンテナは軽量で単一のアプリケーションの実行に特化して設計されていますが、コンテナ内に追加のユーティリティやツールをインストールする必要がある場合があります。これは、トラブルシューティング、デバッグ、またはアプリケーションの機能拡張に役立ちます。

Docker コンテナでパッケージをインストールする

Docker コンテナに追加のパッケージをインストールするには、使用しているベースイメージのパッケージマネージャーを使用できます。たとえば、Ubuntu ベースのイメージを使用している場合は、aptパッケージマネージャーを使用してパッケージをインストールできます。

## Dockerfile
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
 vim \
 curl \
 wget \
 net-tools \
 && rm -rf /var/lib/apt/lists/*

上記の例では、Docker コンテナにvimcurlwget、およびnet-toolsパッケージをインストールしています。

インストールされたユーティリティにアクセスする

追加のユーティリティがインストールされたら、実行中のコンテナ内でそれらにアクセスできます。たとえば、vimテキストエディタやcurlコマンドを使用して HTTP リクエストを行うことができます。

## Run the container
docker run -it my-ubuntu-image /bin/bash

## Access the installed utilities
root@container:/## vim
root@container:/## curl https://www.example.com

インストールされたユーティリティを永続化する

コンテナに対して行った変更(インストールされたパッケージを含む)は、デフォルトでは永続化されないことに注意する必要があります。インストールされたユーティリティがコンテナの後続の実行で利用可能であることを確認する必要がある場合は、次のいずれかの方法を使用する必要があります。

  1. 新しい Docker イメージをビルドする:Dockerfile を変更して必要なユーティリティのインストールを含め、その後イメージを再ビルドします。
  2. ボリュームを使用する:必要なユーティリティや設定ファイルを含むボリュームをコンテナにマウントします。
graph LR
    A[Docker Container] --> B[Ephemeral File System]
    B --> C[Installed Utilities]
    A --> D[Volume]
    D --> E[Persistent Utilities]

Docker コンテナに追加のユーティリティをインストールする方法を理解することで、アプリケーションの機能を拡張し、コンテナ環境内の問題のトラブルシューティングやデバッグを容易にすることができます。

実用的なユースケースと例

Docker コンテナに追加のユーティリティをインストールすることは、さまざまなシナリオで役立ちます。以下にいくつかの実用的なユースケースと例を示します。

デバッグとトラブルシューティング

Docker コンテナでアプリケーションを実行する際に、トラブルシューティングやデバッグタスクを実行する必要があることがあります。vimcurlwget、またはnet-toolsなどのユーティリティをインストールすると、コンテナの環境、ネットワーク接続、およびログを調べるのに役立ちます。

## Dockerfile
FROM ubuntu:22.04

RUN apt-get update && apt-get install -y \
 vim \
 curl \
 wget \
 net-tools \
 && rm -rf /var/lib/apt/lists/*

機能拡張

アプリケーションがベースの Docker イメージに含まれていない特定のツールやユーティリティを必要とする場合、それらをインストールしてコンテナの機能を拡張することができます。たとえば、データベースクライアント、メッセージキュークライアント、またはモニタリングエージェントをインストールする必要があるかもしれません。

## Dockerfile
FROM python:3.9-slim

RUN apt-get update && apt-get install -y \
 postgresql-client \
 rabbitmq-tools \
 && rm -rf /var/lib/apt/lists/*

## Install Python dependencies
COPY requirements.txt.
RUN pip install --no-cache-dir -r requirements.txt

マルチステージビルド

Docker イメージをビルドする際に、マルチステージビルドプロセスを使用して、ビルド段階で追加のユーティリティをインストールし、最終的なイメージから除外することができます。これにより、イメージの全体サイズを削減することができます。

## Dockerfile
FROM ubuntu:22.04 AS builder
RUN apt-get update && apt-get install -y \
  build-essential \
  cmake \
  && rm -rf /var/lib/apt/lists/*

## Build your application
COPY. /app
WORKDIR /app
RUN cmake. && make

## Final stage
FROM ubuntu:22.04
COPY --from=builder /app/bin /app/bin
CMD ["/app/bin/my-app"]

これらの実用的なユースケースと例を理解することで、Docker コンテナに追加のユーティリティをインストールする機能を効果的に活用して、アプリケーションの機能、トラブルシューティング、および全体的な開発体験を向上させることができます。

まとめ

このチュートリアルを終えると、Docker コンテナに追加のユーティリティをインストールする方法をしっかりと理解し、Docker ベースのアプリケーションの機能を強化することができるようになります。専用のツール、デバッグユーティリティ、またはカスタムスクリプトを追加する必要がある場合でも、このガイドを通じて Docker の柔軟性とパワーを最大限に活用するための知識を身につけることができます。