#きっかけ
Qiitaの「Docker の基本学習 ~ Docker のネットワーク」という記事で、dockerコンテナには仮想ネットワークカードとIPアドレスが付与され、お互いに通信できるということを知った。
早速試したい。でもこの前Linuxマシン片付けたばっかりだし、またLinux環境を準備するの面倒だなぁ、と思って思いついたのがGitpod上での動作確認である。
#やること概要
GitPod上でDockerをインストールし、その上に、お互いがpingで生存確認しあうだけのコンテナを立ち上げ、その結果をホストから確認する。
#手順
###(1) GitPodを立ち上げる。
いろいろと準備が面倒な方は以下をクリックしてみて欲しい。それだけで何にもインストールされていない素のUbuntu環境が立ち上がる。恐らく、最も高速なUbuntu環境立ち上げ手順であろう。
https://gitpod.io/#https://github.com/TakaoMori/TheSimplestGitpod
###(2) Docker versionを確認する。
Gitpodのシェル上で、以下のコマンドをタイプする。すると、GitpodのUbuntu環境には最初からDocker Engineがインストールされていることがわかる。
docker version
###(3) docker0のアドレスを確認する
実はこの「素のままのGitpod」には、ifconfigすらインストールされていない。そこで、sudo apt install net-toolsでインストールする。
その後、ifconfigによってdocker0のIPアドレスが172.20.0.1であることを確認できる。
###(4) 1台目のDockerコンテナを立ち上げる。
docker run -d ubuntu:14.04 /bin/sh -c "while true; do ping -b -c 1 -W 4 172.17.0.3; sleep 1; done"
シェルスクリプトを読める方は想像がつくと思うが、要は1秒ごとにpingを打つのをひたすら続けるコンテナである。
無事コンテナ起動後、docker psコマンドで立ち上がったコンテナ名がわかるので、そこでdocker logs <コンテナ名>とタイプして、pingのログを見てみる。すると、相手方の172.17.0.3君は立ち上がっていないので、pingはことごとく失敗しているはずである。
###(5) 2台目のDockerコンテナを立ち上げる。
docker run -d ubuntu:14.04 /bin/sh -c "while true; do ping -b -c 1 -W 4 172.17.0.2; sleep 1; done"
この状態で新たに立ち上がったコンテナのログを見ると、pingはことごとく成功しているはずである。
また、この状態であれば、最初に立ち上げたコンテナからのpingも成功するはずである。最初の図に示した状態が完成しているからである。
###(6) Gitpodのお掃除
これ以外と大事。終わったら、https://gitpod.io/workspaces にアクセスし、Workspaceを削除しておく。