Docker コンテナでカスタムアプリケーションを実行し、カスタムポートを公開する方法

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

はじめに

Docker は、コンテナ化された環境でアプリケーションを構築、デプロイ、実行するための強力なプラットフォームです。このチュートリアルでは、Docker コンテナ内でカスタムアプリケーションを実行し、外部アクセス用にカスタムポートを公開する方法を学習します。このガイドの終わりまでに、Docker を活用して、より柔軟性と制御性を持ってアプリケーションをデプロイする方法をしっかりと理解しているでしょう。

Docker とコンテナの概要

Docker は、コンテナを使用してアプリケーションの開発、デプロイ、管理を可能にする、人気のオープンソースプラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。

Docker とは何か?

Docker は、コンテナを使用してアプリケーションの作成、デプロイ、実行を容易にするツールです。コンテナを使用すると、開発者は、ライブラリやその他の依存関係など、アプリケーションに必要なすべての部分をパッケージ化し、単一のソフトウェアパッケージとして配布できます。

Docker を使用する利点

  1. 一貫性: コンテナを使用すると、アプリケーションは、デプロイされる環境に関係なく、同じように動作します。
  2. スケーラビリティ: コンテナは、アプリケーションのニーズに合わせて簡単にスケールアップまたはスケールダウンできます。
  3. 移植性: Docker がインストールされているシステムであれば、どのシステムでもコンテナを実行できるため、アプリケーションを異なる環境間で簡単に移動できます。
  4. 効率性: コンテナは軽量で、仮想マシンよりも少ないリソースを使用するため、実行効率が高いです。

Docker アーキテクチャ

Docker はクライアント・サーバーアーキテクチャを採用しており、Docker クライアントは、Docker コンテナの構築、実行、配布を担当する Docker デーモンと通信します。

graph LR
    subgraph Docker アーキテクチャ
        client((Docker クライアント))
        daemon((Docker デーモン))
        registry((Docker レジストリ))
        client --> daemon
        daemon --> registry
    end

Docker コンテナ

Docker コンテナは、Docker の基本的な構成要素です。コンテナは、コードとそのすべての依存関係をパッケージ化し、アプリケーションを迅速かつ確実に、あるコンピューティング環境から別のコンピューティング環境に実行できるようにする、標準的なソフトウェアユニットです。

graph LR
    subgraph Docker コンテナ
        app((アプリケーション))
        runtime((ランタイム))
        libs((ライブラリ))
        bin((バイナリ))
    end

Docker イメージ

Docker イメージは、コンテナの基盤となります。イメージは、アプリケーションの実行に必要なすべて(コード、ランタイム、ライブラリ、環境変数、設定ファイルなど)を含んだ、軽量で独立した実行可能なソフトウェアパッケージです。

Docker でカスタムアプリを実行する

カスタム Docker イメージの構築

Docker コンテナでカスタムアプリケーションを実行するには、まず、アプリケーション用の Docker イメージを作成する必要があります。これは、Dockerfile を使用して行います。Dockerfile は、イメージを構築するためにコマンドラインで呼び出すことができるすべての命令を含むテキストドキュメントです。

シンプルな Flask Web アプリケーションの例を示します。

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

この Dockerfile は以下の処理を行います。

  1. python:3.9-slim ベースイメージから開始します。
  2. 作業ディレクトリを /app に設定します。
  3. requirements.txt ファイルをコピーし、必要な Python パッケージをインストールします。
  4. アプリケーションコードをコンテナにコピーします。
  5. アプリケーションを実行するためのコマンド (python app.py) を指定します。

Docker イメージの構築と実行

Dockerfile が準備できたら、docker build コマンドを使用して Docker イメージを構築できます。

docker build -t my-flask-app .

これにより、タグ my-flask-app を持つ新しい Docker イメージが作成されます。

Docker コンテナでアプリケーションを実行するには、docker run コマンドを使用します。

docker run -p 5000:5000 my-flask-app

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

アプリケーションの確認

これで、Web ブラウザで http://localhost:5000 にアクセスして、実行中のアプリケーションにアクセスできます。Flask アプリケーションの出力が表示されるはずです。

カスタムポートの公開

デフォルトでは、Docker コンテナを実行すると、ホストシステムとそのネットワークから隔離されます。コンテナ内で特定のポートでアプリケーションが実行されている場合、コンテナ外部からアプリケーションにアクセスできるように、そのポートをホストシステムに公開する必要があります。

ポートの公開

Docker コンテナからポートを公開するには、docker run コマンドを実行する際に -p または --publish フラグを使用できます。構文は次のとおりです。

docker run -p <ホストポート>:<コンテナポート> <イメージ名>

たとえば、コンテナ内でアプリケーションがポート 8000 で実行されている場合、ホストシステムのポート 80 に公開するには、次のようにします。

docker run -p 80:8000 my-app

これにより、ホストシステムのポート 80 がコンテナ内のポート 8000 にマッピングされます。

公開されたポートの確認

ポートが正しく公開されていることを確認するには、docker run コマンドの出力を確認できます。出力には、マッピングされたポートが表示されます。

$ docker run -p 80:8000 my-app
 * Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)

あるいは、実行中のコンテナのマッピングされたポートをリストするために docker port コマンドを使用できます。

$ docker port <コンテナID>
8000/tcp -> 0.0.0.0:80

これにより、コンテナ内のポート 8000 がホストシステムのポート 80 にマッピングされていることがわかります。

これで、Web ブラウザで http://localhost(またはホストシステムの IP アドレス)にアクセスして、アプリケーションにアクセスできます。

まとめ

このチュートリアルでは、Docker コンテナ内でカスタムアプリケーションを実行し、外部からのアクセスのためにカスタムポートを公開する方法を学びました。アプリケーションをコンテナ化することで、一貫性と信頼性の高いデプロイメントを確保し、アプリケーションのスケーリングと管理をより効率的に行うことができます。Docker のコンテナ化技術は、開発者がアプリケーションを構築、配布、実行するための強力なプラットフォームを提供し、より効率的でスムーズな方法で作業を進めることができます。