中々学習コストが高くて気が進まなかったのですが、やっと重い腰を上げてDockerを学ぶ事にして、早速Ubuntuにインストールしました。
Dockerとは
Dockerとは仮想化技術の1つで、Hyper-VやVMWare等の完全仮想化技術とは異なりホストOSとカーネルを共有するコンテナ仮想化技術です。
完全仮想化に比べ手軽に仮想環境を構築可能で、開発・テスト・実行環境の分離に役立ちます。
また、OSを丸ごとインストールするわけではないため効率的に資源を利用でき、失敗した時の破棄が容易です。
上記の機能に加えて、Dockerfile
に環境に関する設定を記述する事でInfrastructure as Code(IaC)のメリットも受けられます。
DockerはLinux上で動作するのですが、それ以外のOS向けであるDocker for WindowsやDocker for Macも存在していて、主要なOSであればどれでも利用が可能です。
動作にLinuxカーネルを要するため、WindowsやMacでは内部的に仮想環境を作ってその上で動作しています。
環境
以下の環境で作業を行います。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS"
作業内容
Docker公式のインストールガイドを参考に作業しました。
リポジトリを追加する
まずは前提となるパッケージをインストールします。
$ sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
リポジトリキーを追加します。追加した後、指紋が9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
と一致しているか確認します。
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <docker@docker.com>
sub rsa4096 2017-02-22 [S]
ここまで終わったらリポジトリを追加できるので、以下のコマンドで追加します。
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
これで、apt-get
でのDockerをインストールする事が出来るようになりました。
Docker CEのインストール
無料版のDocker Community Editionとcontainerd
をインストールします。
$ sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io
インストール出来ました。
$ docker --version
Docker version 19.03.8, build afacb8b7f0
Docker-Composeのインストール
Docker-Composeは複数のDockerコンテナを取り扱うのに便利なツールです。
curl
でGitHubから拾ってきて自分で配置して、実行可能にします。この時の最新バージョンは1.25.5
でした。リリース情報はdocker/compose Releases | GitHubから確認できます。
$ export VERSION="1.25.5"
$ sudo curl -L "https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
インストール出来ました。
$ docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6
Dockerを試す
DockerでのHello, World!としてdocker run --rm hello-world
をしてみます。
$ sudo docker run --rm hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
上手くインストール出来たようです。
一般ユーザーでも実行できるようにする
インストール直後の状態では、sudo
を使わないとdocker
コマンドは使用する事が出来ません。
一般ユーザーでdocker
コマンドを使うためには、ユーザーをdocker
グループに追加する必要があります。
$ sudo usermod -aG docker $USER
$ sudo reboot
再起動して変更を反映したら、sudo
無しで実行出来るようになったはずです。
$ docker run --rm hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
これで、docker
グループに所属しているユーザーは自由にdocker
コマンドが使えるようになりました。
まとめ
DockerとDocker-Composeをインストールしたので、様々な環境を依存を気にせず試せるようになりました。
Dockerに関しては覚える事が多いですが、かなり便利なので使えるようになりたいです。
また、一般ユーザーでもDockerを利用する方法として、Rootless Dockerという物もあります。これはまた後で触ろうと思います。