Dockerfile でポートを公開する

Docker 中級

Mike Metzger

Data Engineer

サービスの公開

  • EXPOSE コマンド
  • 実行時にコンテナが使用するポートを定義します
  • <number><number>/tcp<number>/udp で指定可能
    • 例: EXPOSE 80EXPOSE 80/tcp
  • 複数指定可
  • ドキュメント目的で使用
Docker 中級

-p / -P フラグの使用

  • コンテナ外から利用可能にするには、docker run-p または -P が必要です
  • -P は公開ポートに自動でエフェメラルポートを割り当てます。どのポートかは docker ps -a で確認します。
  • -p<ホストポート>:<コンテナポート> で特定ポートを指定できます。
Docker 中級

EXPOSE の例

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Docker エンジンに
# 8000 番ポートを利用することを通知
EXPOSE 8000
  • イメージからコンテナを作成
    docker run pyserver
    
  • コンテナの状態を表示
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Docker 中級

ポートを到達可能にする

  • ホストの一時ポートをコンテナに自動マッピング
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Docker 中級

公開ポートの確認

  • docker inspect は多くの情報を提供します
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Docker 中級

練習しましょう!

Docker 中級

Preparing Video For Download...