私は、決してDocker推しではありません。
でも、Dockerをインストールする必要性が出てきました。
そんな事情のため、Dockerに対して愛はありません。
愛がないため、公式マニュアルに沿って淡々とインストールを行います。
そこに俺流なんて存在しません。
そのため、第三者が参考にするにはもってこいの内容になっています。
(※客観性が担保されている日本語の手順書ということです)
本記事の内容
- Dockerとは?
- Dockerのシステム要件
- Dockerのインストール
- Dockerの動作確認
- 正直、Dockerは仕方がないから使う
それでは、上記に沿って解説していきます。
Dockerとは?
Dockerとは、仮想化された環境を構築するための技術のことです。
仮想化と言うと、複数の概念が存在しています。
- ホスト型仮想化
- ハイパーバイザー型仮想化
- コンテナ型仮想化
Dockerは、コンテナ型仮想化で仮想環境を構築します。
また、Dockerはオープンソースとして開発されています。
以上、ざっくりとしたDockerの一般的な説明でした。
次は、Dockerのインストールするためのシステム要件を確認します。
Dockerのシステム要件
現時点(2021年3月31日)におけるDockerの最新バージョンは、20.10.5となります。
この最新バージョンは、2021年3月2日にリリースされています。
Dockerがインストール可能なUbuntuのバージョンは、以下。
- Ubuntu Groovy 20.10
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
- Ubuntu Xenial 16.04 (LTS)
今回は、以下バージョンのUbuntuにDockerをインストールします。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
また、Ubuntuの場合はすべて64bitである必要があります。
対応しているアーキテクチャは、以下。
- x86_64
- amd64
- armhf
- arm64
確認しておきます。
$ arch x86_64
大丈夫ですね。
あと、storage driversを確認しておきます。
Dockerがサポートしているstorage driversには、以下の3つがあります。
- overlay2
- aufs
- btrfs
デフォルトでは、storage driverにoverlay2を利用しています。
storage driverを変更することも可能です。
以上、Dockerのシステム要件の説明でした。
次は、Dockerのインストールしていきます。
Dockerのインストール
Dockerリポジトリを利用して、インストールを行います。
aptがHTTPS経由でリポジトリを使用できるように必要なモノをインストールします。
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release
Dockerの公式GPGキーを追加します。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
「stable(安定版)」をリポジトリに設定します。
$ echo \ "deb [arch=amd64 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
準備が整いました。
では、インストールしていきましょう。
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
以上、Dockerのインストールが完了しました。
最後に、Dockerの動作確認を行います。
Dockerの動作確認
まず、バージョンの確認を行いましょう。
$ sudo docker version Client: Docker Engine - Community Version: 20.10.5 API version: 1.41 Go version: go1.13.15 Git commit: 55c4c88 Built: Tue Mar 2 20:18:20 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.5 API version: 1.41 (minimum version 1.12) Go version: go1.13.15 Git commit: 363e9a8 Built: Tue Mar 2 20:16:15 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.4 GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e runc: Version: 1.0.0-rc93 GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec docker-init: Version: 0.19.0 GitCommit: de40ad0
次に、storage driverを確認します。
$ sudo docker info | grep "Storage Driver" Storage Driver: overlay2
overlay2がデフォルトで利用されていることを確認。
折角なので、Dockerでアプリケーションをインストール(正確には起動)してみましょう。
プログラミングと同じように、「hello world」を利用します。
$ sudo docker run hello-world
上記を実行。
次のメッセージを確認できれば、Dockerが正常に動いているようです。
Hello from Docker! This message shows that your installation appears to be working correctly.
以上、Dockerの動作確認が終了です。
最後に、Dockerの必要性について個人的な意見を記載しておきます。
正直、Dockerは仕方がないから使う
個人的には、ホスト型仮想化だけで十分だと考えています。
本来はホスト型仮想化で十分
ホスト型仮想化を実現するVirtualBoxについては、以下の記事で解説しています。
ただ、VirtualBoxやVMwareと言った技術はそれなりに設定が面倒です。
そこで、それらの面倒な設定をカバーしてくれるVagrantが役に立ちます。
上記の技術を用いて、ホスト型仮想化で環境を構築しています。
Vagrantを使えば、コピペでホスト型仮想環境が構築できます。
だから、コンテナ型仮想環境でチマチマする必要がないのです。
OSからドーンと仮想化できるわけですからね。
では、なぜDockerをインストールする必要があるのでしょうか?
Dockerをインストールする理由
それは、Dockerでシステム環境が配布されているケースがあるからです。
どのようなことかと言うと、例えば以下のケースです。
httpbinのGithubページ
https://github.com/postmanlabs/httpbin
httpbinは、その構築手順が記されていません。
中身自体がPythonなので、ソースを追っていけば何とかなるのでしょう。
でも、Dockerイメージが配布されています。
Dockerなら、コマンド2つでhttpbinのシステムを構築できます。
「じゃあ、Dockerを使いましょう」ということです。
本当にこの程度でしか、Dockerにはメリットを感じていません。
すでに述べたように、VagrantによるOSの仮想化が便利過ぎるのです。
そのため、コンテナ型仮想化にそこまで必要性を感じません。
まとめ
Dockerに関する記事なのに、逆にDockerをディスる感じになっています。
でも、Dockerをインストールすることにより、選択肢は確実に広がります。
少なくとも、httpbinは手間をかけずに準備できそうです。
今後、他にも似たようなケースはあるでしょう。
その場合には、Dockerを使うことになるはずです。
あとは、スペックの低いVPSなどでも活かせるかもしれません。
スペックの低いマシンには、そもそもホスト型仮想化は厳しいですからね。
ただ、そもそもVPSにはあまりモノをインストールはしません。
必要最低限のモノしかインストールしないということです。
そのため、Dockerで管理する必要性もあまりないのですけどね・・・