こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚と申します。
この記事では、題名の通りubuntu22.04にdocker環境を構築してみたいと思います。
また、これだけだと何番煎じだという話になってしまいますので、dockerのネットワークについてかるーーーーーーーく調べてみたので(私の)備忘録としてQiitaに残しておこうと思います。
dockerのインストール
aptのupdateとupgradeを実行していきます。
ちなみに、updateとupgradeの違いは以下のようです。検証環境であれば両方やっておけばいいんじゃないでしょうか?
オプション | 意味 |
---|---|
update | アップデート可能なパッケージ一覧を更新するだけ。 |
upgrade | アップデートを実際に行う。 |
root@docker:~# apt-get update
root@docker:~# apt-get upgrade
dockerのリポジトリを追加していきます。
そのために、まずリポジトリ追加に必要なコマンドをインストールします。
また、併せてdockerの公式GPGキーをサーバにダウンロードします。
※GPG
Gnu Privacy Guardの略のようです。
公開鍵を使って署名検証したりするときに使用する様子。
署名検証をすることで、これからインストールするもの(今回でいうとdockerのリポジトリ?)が悪意の第三者から改ざんされていないよねってことを確認するためのものだと思われます。
root@docker:~# apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
root@docker:~# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
dockerの公式リポジトリを追加していきます。
root@docker:~# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
apt-get updateを再度実行していきます。
root@docker:~# apt-get update
docker及びその周辺をインストールしていきます。
root@docker:~# apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
docker --versionを実際に叩いてみて、出力がされればインストールに問題はないと思われます。
root@docker:~# docker --version
Docker version 23.0.3, build 3e7cbfd
dockerインストール後にipコマンドを叩いてみます。
するとdocker0というものが出力されると思います。
これは内部でLinux Bridgeを使っているようです。
root@docker:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 36:8b:75:5e:46:a8 brd ff:ff:ff:ff:ff:ff
altname enp0s18
inet 192.168.2.187/24 brd 192.168.2.255 scope global ens18
valid_lft forever preferred_lft forever
inet6 fe80::348b:75ff:fe5e:46a8/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:41:73:2e:ab brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
docker0をイメージ図に起こすと以下のようなイメージでしょうか・・・?
現状はdocker0という仮想ブリッジができているだけなので「だから何?」といった感情しか出てきませんが、たぶんこっから面白くなるはず・・・!
docker0について、以下の記事では次のように書かれています。
通常Linux OSには、OVSはなく、「Linuxブリッジ」が搭載されています。Dockerは、デフォルトでホストOSのLinuxの標準機能であるLinuxブリッジを利用します。
https://www.itmedia.co.jp/enterprise/articles/1702/01/news011_2.html
※Linux Bridge
Linux bridgeはLinuxカーネルに組み込まれたスイッチであり、物理スイッチと同様に入出力されるトラフィックを運ぶポートやインタフェースが必要となる。Linux bridgeは物理ポートと仮想ポートのどちらもサポートしていて、ブリッジに追加することができる。
https://hichtakk.hateblo.jp/entry/2016/04/04/062229#:~:text=Linux%20bridge%E3%81%AFLinux%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB,%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82
直近で私が触ったものだと上でチラッと出ていますが、OVSが近いものかと思います。
※OVS
Open VSwitch(Open Virtual Switch、通称「OVS」)は、ソフトウェア定義型ネットワーク(SDN)を実現する仮想スイッチです。複数の物理サーバやハイパーバイザ型の仮想マシン、コンテナ間のトラフィックを細かく制御でき、大規模な仮想化基盤およびクラウド基盤にも対応できるよう設計されています。
https://www.itmedia.co.jp/enterprise/articles/1702/01/news011.html
※OVS公式サイト
ここで、Linux Bridgeを操作するためのコマンドであるbrctlコマンドをインストールし、docker0がLinux Bridgeであることを確認してみます。
以下のコマンドを叩くことでインストールすることが可能です。
root@docker:~# apt install bridge-utils
実際にbrctlコマンドを叩きます。
ここでもdocker0という名前のbridgeが出力されることから、やはりこれはLinux Bridgeであることが言えるでしょう。
root@docker:~# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024241732eab no
念のためOVSも確認しておきます。
以下のコマンドを叩いて、ovs-vsctlコマンドをインストールします。
root@docker:~# apt install openvswitch-switch
ovs-vsctl showコマンドを叩いてもバージョンしか出力されないことから、docker0はOVSではないことがわかります。
root@docker:~# ovs-vsctl show
6338e08e-2a68-4322-8ab6-cf9fe8cde66d
ovs_version: "2.17.3"