Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dockerネットワーク入門

 Dockerネットワーク入門

もくもくしよう木曜日のショートセッションで話しました。
https://mokumokuyou.connpass.com/event/229569/

sardine_bird

November 05, 2021
Tweet

More Decks by sardine_bird

Other Decks in Technology

Transcript

  1. デモの実行環境 OS: Ubuntu 20.04 LTS $ docker -v Docker version

    20.10.10, build b485636 $ docker-compose -v docker-compose version 1.29.2, build 5becea4c
  2. アーキテクチャの比較(復習) 物理マシン HW OS Process コンテナ(Docker) HW OS(Linux kernel) Docker

    Engine 仮想マシン HW OS Hypervisor vHw vHw OS Process OS Process Container Container Docker ネットワーク
  3. デフォルトネットワーク(コマンドで確認) $ docker run --rm --net none -it busybox ip

    a $ docker run --rm --net host -it busybox ip a $ docker run --rm --net bridge -it busybox ip a $ docker run --rm -it busybox ip a #--netはデフォルトでbridge $ docker run -itd --name bridge_busybox busybox $ docker network inspect bridge #接続を確認 $ ping <container ip>
  4. 接続確認用docker image作成 $ vim Dockerfile $ docker build -t ping_ubuntu

    . # Dockerfile FROM ubuntu:latest RUN apt update && apt upgrade -y && apt install -y iproute2 iputils-ping dnsutils
  5. ipアドレスでコンテナ間通信(コマンドで確認) $ docker run -it --rm ping_ubuntu bash # ping

    -c 4 <bridge_busybox_ip> # ping -c 4 bridge_busybox #コンテナ名では通信できない # exit $ docker run -it --rm --link bridge_busybox:bridge_busybox ping_ubuntu bash # ping -c 4 bridge_busybox #できた # exit
  6. Docker ネットワークドライバ - bridge - デフォルト - 通信が必要なコンテナで使用 - host

    - コンテナとホストPCのネットワーク分離が不要な場合 - overlay - 複数のDockerデーモンを相互接続する - macvlan - MACアドレスをコンテナに割り当て、ネットワーク上に物理デバイスとして表示可能 - none - ネットワーク無効 - カスタムドライバのベースとして使用されることが多い - カスタム - 自作/Docker Hub上のプラグインを使用してカスタムドライバを作成可能 - https://docs.docker.com/network/ - http://docs.docker.jp/engine/extend/plugins_network.html
  7. コンテナ名でコンテナ間通信(コマンドで確認) 準備 $ docker network create samplenet $ docker network ls

    $ ip a | grep br- $ docker network inspect samplenet $ docker run -itd --name container1 --net samplenet busybox $ docker run -itd --name container2 --net samplenet busybox $ docker run --rm -it --net samplenet ping_ubuntu bash
  8. コンテナ名でコンテナ間通信(コマンドで確認) 実践 # ping -c 4 container1 # ping -c 4

    container2 # ping -c 4 <bridge_busybox_ip> #bridge_busyboxにはつながらない # ping -c 4 bridge_busybox # dig container1 # exit
  9. docker-composeでWordpressを起動 docker-compose: - 複数コンテナをまとめて起動 - 起動時のオプションはdocker-compose.yamlに記述 - `docker-compose up`だけで起動可能 -

    起動時に面倒なオプションを書く必要なし 実行方法の詳細は参考をご覧ください 参考 Quickstart: Compose and WordPress: https://docs.docker.com/samples/wordpress/
  10. http://localhost:8000 にアクセス $ ip a #br-xxxxxxx $ docker network ls

    #my_wordpress_default $ docker network inspect my_wordpress_default $ ping -c 4 <my_wordpress_wordpress_1> $ ping -c 4 <my_wordpress_db_1> $ docker-compose exec wordpress bash # ping -c 4 db docker-composeでWordpressを起動(コマンドなどで確認)