Docker は、アプリケーションを分離されたポータブルなコンテナーで実行できるようにするプラットフォームです。 Linux カーネルのいくつかの機能を使用して、軽量の仮想化を実装し、ソフトウェアの分離を実現します。このため、Docker は軽量なコンテナーであるため、ソフトウェア デプロイメントの分野で広く使用されています。
Docker でコンテナを実行する場合、コンテナのポートをホストにマップする必要がない場合があります。この記事では、Dockerでコンテナを実行する際にポートがマッピングされない場合の状況と注意点を紹介します。
シナリオによっては、ポートがマッピングされていない状況が非常に役立つ場合があります。最も一般的な状況は、Docker を使用してバックグラウンド サービスを実行することです。たとえば、次のコマンドを使用して Nginx サーバーを起動できます:
docker run -d nginx
このコマンドは、バックグラウンドで Nginx コンテナを起動し、コンテナ内で Nginx プロセスを開始します。ただし、現時点では、Nginx コンテナーはコンテナーのポート 80 をホストにマップしません。これは、ホスト マシンのポート 80 にアクセスしてこの Nginx インスタンスにアクセスできないことを意味します。
もう 1 つの一般的なシナリオは、Docker を使用していくつかのツール プログラムを実行することです。次のコマンドを使用して、bash スクリプトを実行できる Ubuntu コンテナを起動できます。
docker run -it ubuntu bash
このコマンドは、Ubuntu コンテナを対話モードで起動し、コンテナ内で bash プロセスに入ります。現時点では、コンテナのポートをホストにマッピングする必要はありません。
シナリオによってはポートをマッピングしない方が便利ですが、次の問題に注意する必要があります。
コンテナにマップされたポートがない場合、他のネットワークのホストや他のマシンを介してコンテナにアクセスすることはできません。これは、ホストの外部からコンテナ内のアプリケーションにアクセスする必要がある場合、コンテナのポートをホストにマップする必要があることを意味します。
コンテナのポートはホストにマッピングされていませんが、コンテナ内で実行されているアプリケーションは引き続きポートでリッスンする必要があります。これは、コンテナ内のアプリケーションがネットワーク リクエストを処理する必要があるためです。
コンテナのポートをホストにマップしなくても、コンテナにはネットワーク アクセス機能が引き続きあります。これは、コンテナ内のアプリケーションがデータベースや Web サービスなどの他のネットワーク上のサービスにアクセスできることを意味します。
Docker でコンテナを実行する場合、必ずしもコンテナのポートをホストにマップする必要はありません。ポートをマッピングしないことは、バックグラウンド サービスや一部のユーティリティ プログラムにとって非常に役立つ場合があります。ただし、コンテナ内のアプリケーションに外部からアクセスする必要がある場合は、コンテナのポートをホストにマップする必要があることに注意してください。同時に、コンテナ内で実行されているアプリケーションは、ネットワーク リクエストを正常に処理できることを確認するためにポートをリッスンする必要があります。
以上がdocker run がマッピングされない理由と注意事項の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。