「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Docker]] --[[Dockerコンポーズ]] *目次 [#hf667270] #contents *概要 [#h8e9532d] -内部通信の話(外部公開は、を使用)。 -[[links>#b82a9aee]]を使っているサンプルが多いが、昨今、非推奨らしい。 *詳細 [#g3bd71cc] **NIC等 [#f0cf3f82] ***ホスト毎 [#a9224dd3] ホストのNICや、ルータ、 -物理NIC(eth0) --ホストのNIC --%%ホストがVMだったら仮想NICでは?%% -Netfilter(iptables) --ファイアウォールやルータ --[[NAPT>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%A9%9F%E5%99%A8%E4%B8%80%E8%A6%A7#a4d3188c]](ホストの8080 → コンテナの80) -仮想ブリッジ(docker0) --Dockerがデフォルトで作成する仮想スイッチ --NetfilterとコンテナのNICとを繋いでいる。 ***コンテナ毎 [#p90b20ec] コンテナのNIC -仮想NIC(veth xxx) --Veth pair (Virtual ethernet tunnel pair) --Linux には、OpenVZ由来の Virtual Ethernet Tunnel (veth) というものがある。~ 名前が示す通り、仮想的な Ethernet Interface の組を作成して、繋いでくれる。 -仮想NIC(eth0) --コンテナのNIC --veth xxxとペア。 **[[Dockerコンポーズ]] [#efaf16a3] ***links [#b82a9aee] -[サービス名](または[エイリアス名])でコンテナにアクセスできる。 -version2では[[Dockerコンポーズ]]・ファイルに書かれた全てのサービス間に~ 自動的にリンクを張る仕様になったため、linksとわざわざ書く必要がなくなった。 ***depends_on [#jf024355] -depends_onはコンテナの作成順序と依存関係を決める。 -version2で自動リンクされるので、depends_onだけでOKに。 ***networks [#k76b1473] -昨今、[[links>#b82a9aee]]は、非推奨らしい。 -ブリッジ・ネットワークを作成し、そこにコンテナを参加させる。 -これにより、別々の[[Dockerコンポーズ]]・ファイルのコンテナに接続可能になる。 >※ 具体的には[[コチラ>https://opentouryo.osscons.jp/index.php?%E9%83%A8%E4%BC%9A%E3%83%A1%E3%83%A2#x542f6a3]] **ホストへの接続 [#af36791e] ***rootに設定する。 [#h9af5c98] 必要に応じて、[[Dockerコンポーズ]]・ファイルに以下を追加する。 environment: GRANT_SUDO: "yes" user: root ※ 後のデバッグツールの[[インストール>#ud016fc9]]の権限がないので。 ※ 後のデバッグ・ツールを[[インストール>#ud016fc9]]する場合の権限がないので。 ***コンテナに入る。 [#a0fe1e4b] -起動(例) $ docker-compose up -コンテナ一覧 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ... -コンテナのターミナルに入る。 $ docker exec -it [ContainerID] /bin/bash ***ホストOSのIPアドレスを取得する。 [#bb6baf03] # cat /etc/hosts | awk 'END{print $1}' | sed -r -e 's/[0-9]+$/1/g' ※ Windowsの場合、素のWSL2とDocker Desktop for WSL2で、挙動が違う。 --[[素のWSL2 ≒ Linux>#af36791e]] --[[Docker Desktop for WSL2 ≒ Windows>https://techinfoofmicrosofttech.osscons.jp/index.php?WSL%20%E2%86%92%20WSL2#yf2b317a]] ※ 旧 Docker for Windowsでどうだったか?は不明。~ その昔は、「[[10.0.75.1 (DockerNAT)>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20for%20Windows%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A]]」だった気がするが、その後、また、色々と変わった。 ***pingやncやcurlでアクセスしてみる。 [#ud016fc9] -コマンドをインストールする。 --ping --curl -ホストOSのネットワークに、 --pingする。 --ncやcurlでアクセスしてみる。 ***参考 [#o58048a5] -[[Dockerコマンド > コンテナのターミナルに入る>Dockerコマンド#b5577f19]] -dockerコンテナの中でホストマシンのIPアドレスを取り出す - Qiita~ https://qiita.com/johejo/items/83cb83a885b8ac996ec9 -Dockerコンテナでpingコマンドを使いたい【トラブルシュート対応】 | SyachikuLOG~ https://syachiku.net/docker-install-ping/ -Issue #416 · jupyter-incubator/sparkmagic~ Using "GRANT_SUDO=yes" doesn't work for the docker-compose~ https://github.com/jupyter-incubator/sparkmagic/issues/416 *参考 [#p300cca0] -【連載】世界一わかりみが深いコンテナ & Docker入門~ 〜 その5:Dockerのネットワークってどうなってるの? 〜 | SIOS Tech. Lab~ https://tech-lab.sios.jp/archives/20179 **Qiita [#h6b2935b] -docker-compose depends_onとlinksの違い~ https://qiita.com/sivertigo/items/9baa73d922a68788402b -dockerのlinkオプションがレガシーなので、~ コンテナ間で名前解決できるようにネットワークを用意する~ https://qiita.com/tamanobi/items/8b8dd64ae1f959f9ff9f -docker-compose で別の docker-compose.yml で~ 作ったコンテナとリンクする (ネットワークを繋げる)~ https://qiita.com/reneice/items/20e981062b093264cd0a **[[マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php]] [#u9b6bcde] ***[[Docker for Windowsのネットワーク設定>https://techinfoofmicrosofttech.osscons.jp/index.php?Docker%20for%20Windows%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E8%A8%AD%E5%AE%9A]] [#u06f8ff3]