Dockerのインストール後、デフォルトで3つのネットワークがあります。
docker network ls
NETWORK ID NAME DRIVER SCOPE
f3be8b1ef7ce bridge bridge local
fbff927877c1 host host local
023bb5940080 none null local
私はこれをシンプルにしようとしています。したがって、デフォルトでコンテナを起動すると、ブリッジ(docker0)ネットワーク内に作成されます。
$ docker run -d jenkins
1498e581cdba jenkins "/bin/tini -- /usr..." 3 minutes ago Up 3 minutes 8080/tcp, 50000/tcp friendly_bell
jenkinsのdockerfileで、ポート8080
と50000
が公開されます。これらのポートは、ブリッジネットワーク上のコンテナ用に開かれています。したがって、そのブリッジネットワーク内のすべてのものは、ポート8080
とのコンテナにアクセスできます50000
。ブリッジネットワーク内のすべては、のプライベート範囲内にあり"Subnet": "172.17.0.0/16",
ます-p 8080:8080
。外部からそれらにアクセスする場合は、ポートをでマップする必要があります。これにより、コンテナのポートが実サーバー(ホストネットワーク)のポートにマップされます。したがって、上のサーバーにアクセスすると、8080
ポート上のブリッジネットワークにルーティングされます8080
。
これで、ホストネットワークもできました。これは、コンテナネットワークをコンテナ化しません。したがって、ホストネットワークでコンテナを起動すると、次のようになります(最初のコンテナです)。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1efd834949b2 jenkins "/bin/tini -- /usr..." 6 minutes ago Up 6 minutes eloquent_panini
1498e581cdba jenkins "/bin/tini -- /usr..." 10 minutes ago Up 10 minutes 8080/tcp, 50000/tcp friendly_bell
違いはポートにあります。これで、コンテナはホストネットワーク内にあります。したがって8080
、ホストのポートを開くと、すぐにコンテナにアクセスします。
$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT
8080
ファイアウォールでポートを開き、ポートでサーバーに8080
アクセスしているときに、ジェンキンスにアクセスしています。このブログも理解を深めるのに役立つと思います。
--net=host
Dockerfile内にオプションを追加することは可能ですか?