簡単なDockerネットワークを作ってみた


みなさんこんにちは(`・ω・´)
Dockerを勉強し始めた頃に練習としてDockerネットワークを作ったので、その時の手順をまとめました。

Dockerとは?

ちょこっとDockerについて紹介します。
基礎的な話は大丈夫だぜって人は読み飛ばしてください。
Dockerとは、Linuxのコンテナという技術を利用した仮想環境を作成、配布するプラットフォームのことです。
皆さんが使っているホストのOSのカーネルやメモリを利用して、Docker EngineというDocker社が提供しているプラットフォームがホストOS上に仮想環境(コンテナ)を作り上げています。

仮想マシンと何が違うの?

仮想環境と聞くと、VMWareVirtualBoxなどのような仮想マシンと比較されがちです。
しかし、これらの仮想マシンとDockerが提供するコンテナは大きく違いがあります。

【仮想マシン】
・ホストOSのメモリなどをコンテナごとに割り当て量を決めて仮想環境を立ち上げる
・OSは、仮想環境ごとにゲストOSを立ち上げる
・仮想環境同士が干渉し合うことはない
・いわゆる完全個室状態

【Docker】
・メモリなどは、コンテナ全てで共用する
・ホストOSのカーネルを利用するので、コンテナごとのOSは必要ない
・仮想環境同士の壁は低いのでお隣さん同士でおしゃべり可能
・いわゆる合宿の集団部屋状態
285系サンライズ号のノビノビ座席みたいなものですね!

Dockerの何がいいのか?

・仮想マシンごとにCPUやメモリを割り当てる処理(オーバーヘッド)が少ないため処理が高速
・ホストOSのカーネルを利用しているのでいちいちゲストOSを立ち上げる必要がないためコンテナの起動が高速

など、軽くて、速いがウリのようです。

Dockerネットワークを作ってみる

イメージとしては、dockerネットワークを作ってその中にコンテナを1つ追加するだけというシンプルなものです。

  • dockerネットワークを調べる
$ docker network list
  • dockerネットワークの作成
$ docker network create test-network

$ docker network inspect test-network

ここまでは順調ですね。
さて、次はいよいよコンテナをネットワークに追加します。

$ docker run -it --name test-container1 --net=test-network --ip=172.17.0.1 ubuntu bash

このコマンドを入力したところで…

デン!!!!!!!!!
おめでとうございます!!!!!!!!!!-=≡Σ(((⊃゚∀゚)つ

調べてみると、DockerデーモンのIPアドレスは指定できないらしく、ネットワークを構築した際にIPを指定しないといけないみたいです。

僕は最初、test-networkを作った時に、IPを指定せずに作成したので、作り直さなければなりません(☝︎ ՞ਊ ՞)☝︎

  • test-networkを破壊
$ docker network rm test-network
  • IPを指定してtest-networkを再作成
$ docker network create --subnet=172.19.0.0/16 test-network

ちなみに、--subnetを指定しなかった場合は、標準ブリッジの172.17.0.0から172.18.0.0と繰り上げをしながら自動的に割り当てられるそうです。
さきほど指定した172.17.0.0は既に埋まっていたので弾かれたんでしょう(´⊙ω⊙`)
なので今回は172.19.0.0で指定しました。

標準ブリッジがどのIPを使用しているか確かめたい場合は以下のコマンドを打つと調べることが出来ます

$ docker inspect bridge
  • 今度こそコンテナを立ち上げ
$ docker run -it --name test_container1 --net=test-network --ip=172.19.0.30 ubuntu bash

恐る恐るエンターを押すと…

コンテナに入れました!!!!!!!!!!!!!!!!!!!!!!!!!!

本当に立ち上がっているか、別タブを開いてtest-networkを調べて見ましょう。
以下のコマンドを打ってみましょう。

$ docker network inspect test-network

すると、ターミナルに作成したtest-container1がいます!

[
    {
        "Name": "test-network",
        "Id": "990c34a385739beb740a6d60a5e4339baece8468c5c0ab35331ad574bc4048a7",
        "Created": "2018-12-25T05:32:20.2431542Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1997f018831f90bb13d8158ac67b20dd2adb0959f1028ee9f2cbadb4cb76d9e8": {
                "Name": "test-container1",
                "EndpointID": "1a18b516ce5030b02948e6d6b21b708c234a44069ebd2e253aa3b0f4f6834235",
                "MacAddress": "02:42:ac:13:00:1e",
                "IPv4Address": "172.19.0.30/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

ここまで確認できれば、Dockerネットワークを作成することが出来ています。
お疲れ様でした( ^ω^)_旦

参考にした記事

Dockerネットワーク設定
https://qiita.com/okhrn/items/d8580e66546d166f489a