====== WSL2/Ubuntu に Docker をインストールする ======
Docker 20.10.1
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-12-15//
[[docker:top|Docker]] - 関連記事
* [[wsl2:ubuntu:docker|WSL2/Ubuntu に Docker をインストールする]]
* [[docker:20:basic|Dcoker コンテナの基本的な利用方法(Run)]]
* [[docker:20:build|Docker コンテナイメージの作成(Build)]]
[[wsl2:top|WSL2]] - 関連記事
* [[wsl2:install|WSL2 インストール]]
* [[wsl2:command|WSL2 コマンドリファレンス]]
* [[wsl2:interop|WSL2 LinuxとのWindowsの相互運用性]]
* [[wsl2:clone|WSL2 ディストリビューションの複製]]
* [[wsl2:terminal|Windows ターミナル]]
リンク
* [[https://docs.docker.com/|Docker Docs]] --- Dockerドキュメント (本家)
* [[https://docs.docker.jp/|Docker ドキュメント日本語化プロジェクト]] --- Dockerドキュメント(日本語)
* [[https://qiita.com/mikezhan/items/1ed008c3779df5d76de7|Dockerの再入門]] --- DockerとLinux(cgroup、namespace)との関係について説明されています。
本章では、Windows マシン上に WSL2/Ubuntu を使って Docker をインストールする方法を、Docker公式サイトの以下の手順に従って説明します。
* [[https://docs.docker.com/engine/install/ubuntu/|Install Docker Engine on Ubuntu]] --- Ubuntu での Docker エンジンのインストール
-----
===== 前提条件 =====
本章の前提条件としては、次の2つです。
- WSL2 に Ubuntuがインストールされている事(必須)。\\ バージョンは ''Ubuntu 20.04.1 LTS'' を想定していますが、それ以外のバージョンでも可能だと思います。まだインストールがお済でない場合は、以下を参照して下さい。
* [[wsl2:install#ubuntuのインストール|Ubuntu の自動インストール]] --- Microsoft Store から Ubuntu を自動インストールする場合
* [[wsl2:ubuntu|Ubuntu の手動インストール]] --- Ubuntu を Windows の任意の場所に設置したい場合 \\ \\
- Windowsターミナルがインストールされている事(推奨)。 \\ 必ずしも必要ではありませんが、本章では、Windowsターミナルで操作する事を前提に説明します。インストールについては本編の「[[wsl2:terminal|Windows ターミナル]]」を参照して下さい。
> 本章は[[wsl2:ubuntu|手動インストール]]した Ubuntu で検証しています。
\\
===== Dockerリポジトリの設定 =====
Windowsターミナルで Ubuntu を開いて下さい。
Dockerにはいろいろなインストール方法がありますが、インストールを簡単にするためには、Dockerのリポジトリを設定し、そこからインストールするのが推奨されるアプローチです([[https://docs.docker.com/engine/install/ubuntu/#installation-methods|Docker公式ドキュメント]]より)。
=== 必要なパッケージのインストール ===
aptパッケージインデックスを更新します:
$ sudo apt update
必要なパッケージをインストールし、''apt'' が HTTPS経由でリポジトリを使用できるようにします:
$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
=== GPGキーの追加 ===
docker公式のGPGキー取得し、aptのキーに設定します:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
以下の指紋の最後の8文字を検索して、指紋付きのキーが存在することを確認して下さい。
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
実行例
$ 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)
sub rsa4096 2017-02-22 [S]
=== リポジトリの設定 ===
次のコマンドを使用して、''stable'' なリポジトリを設定できます。''nightly'' または ''test'' なリポジトリを追加するには、''stable'' の後に''nightly'' または ''test'' (またはその両方)を追加します。 ''nightly'' または ''test'' については[[https://docs.docker.com/engine/install/|こちら]]を参照して下さい。
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
\\
===== Dockerのインストール =====
以下の2つの場合を説明します。必要に応じて進めて下さい。
* [[#最新バージョンのインストール]]
* [[#特定バージョンのインストール]]
まず、''apt'' パッケージインデックスを更新します:
$ sudo apt update
\\
==== 最新バージョンのインストール ====
Docker エンジンとコンテナの最新バージョンをインストールします:
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
* ''docker-ce'' --- Docker Community Edition(Docker CE)の本体(Dockerサービス)
* ''docker-ce-cli'' --- Docker サービスのクライアント(CLIツール)
* ''containerd.io'' --- Linuxコンテナ(OS API)とのインターフェース。DockerとLinuxを分離する役割があると思われます。
* ''docker-compose'' --- Docker コンポーザ。マルチコンテナのDockerアプリケーションを定義して実行するためのツールです。
Docker Community Edition は、開発用のローカル環境などの商用サポートが不要なバージョンで、無償で利用できます。
> ''注意''
> 複数のDockerリポジトリを有効にしている場合、''apt install'' または ''apt update'' コマンドで バージョンを指定せずにインストールまたは更新すると、常に可能な限り最高のバージョンがインストールされます。これは、安定性のニーズに適さない場合があります。
実行例
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
cgroupfs-mount docker-ce-rootless-extras pigz python3-cached-property python3-docker python3-dockerpty
python3-docopt python3-texttable python3-websocket slirp4netns
Preparing to unpack .../12-docker-compose_1.25.0-1_all.deb ...
Unpacking docker-compose (1.25.0-1) ...
Selecting previously unselected package slirp4netns.
Preparing to unpack .../13-slirp4netns_0.4.3-1_amd64.deb ...
Unpacking slirp4netns (0.4.3-1) ...
Setting up python3-cached-property (1.5.1-4) ...
Setting up python3-texttable (1.6.2-2) ...
Setting up python3-docopt (0.6.2-2.2ubuntu1) ...
Setting up slirp4netns (0.4.3-1) ...
Setting up containerd.io (1.4.3-1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.Setting up docker-ce-cli (5:20.10.1~3-0~ubuntu-focal) ...
Setting up pigz (2.4-1) ...
Setting up cgroupfs-mount (1.4) ...
invoke-rc.d: could not determine current runlevel
Setting up python3-websocket (0.53.0-2ubuntu1) ...
update-alternatives: using /usr/bin/python3-wsdump to provide /usr/bin/wsdump (wsdump) in auto mode
Setting up python3-dockerpty (0.4.1-2) ...
Setting up python3-docker (4.1.0-1) ...
Setting up docker-ce (5:20.10.1~3-0~ubuntu-focal) ...
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
invoke-rc.d: could not determine current runlevel
Setting up docker-ce-rootless-extras (5:20.10.1~3-0~ubuntu-focal) ...
Setting up docker-compose (1.25.0-1) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.3) ...
> ''調査中'' --- 上の例では2ヶ所で次のエラーが起きています
> invoke-rc.d: could not determine current runlevel
\\
==== 特定バージョンのインストール ====
リポジトリで利用可能なバージョンを一覧表示します。
実行例:
$ apt-cache madison docker-ce
docker-ce | 5:18.09.1~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 5:18.09.0~3-0~ubuntu-xenial | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.1~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
docker-ce | 18.06.0~ce~3-0~ubuntu | https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
特定のバージョンは以下のようにしてインストールします:
$ sudo apt-get install docker-ce= docker-ce-cli= containerd.io
''''には、例えば、上の2番目のバージョンをインストールする場合は、''5:18.09.1~3-0~ubuntu-xenial'' が入ります。
\\
===== 初期設定 =====
まず、[[https://docs.docker.jp/engine/reference/commandline/index.html|dockerコマンド]]のインストール先とdockerエンジンのバージョンを確認してみましょう。
$ which docker
/usr/bin/docker
$ sudo docker version
Client: Docker Engine - Community
Version: 20.10.1
API version: 1.41
Go version: go1.13.15
Git commit: 831ebea
Built: Tue Dec 15 04:34:58 2020
OS/Arch: linux/amd64
Context: default
Experimental: true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
> ''sudo docker version'' の最後のメッセージ「''Cannot connect to the Docker daemon ...'' 」はDocker サービスがまだ起動していないからです。 問題ありません。
=== Dockerグループへの参加 ===
この段階で、Dockerグループは作成されますが、ユーザーは追加されていません。Dockerコマンドを実行するには、sudoを使用する必要があります。非特権ユーザーがDockerコマンドを実行できるようにするには、Dockerグループへの参加が必要です。
dockerグループの確認:
$ cat /etc/group|grep docker
docker:x:999:
dockerグループに参加:
$ sudo gpasswd -a $USER docker
これで、sudo なしで dockerコマンドを実行できるようになります。設定を有効にする為にログアウトします:
$ logout
=== その他 ===
Dockerインストール後の設定については以下も参照して下さい。
* https://docs.docker.com/engine/install/linux-postinstall/
> ''保留中''
> 情報源: https://qiita.com/amenoyoya/items/ca9210593395dbfc8531
> # WSL2 には cgroup 用ディレクトリがデフォルトで作られていないため作成しておく
> ## これをしておかないと Docker でプロセスのグループ化が必要になったときにエラーが起きる
> $ sudo mkdir -p /sys/fs/cgroup/systemd
> $ sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd
\\
===== 動作テスト =====
まず、Docker サービスを起動します:
$ sudo service docker start
WSL2では、通常のLinuxのようなブートシーケンスの中でのデーモンの起動は行われません。従って、Dockerを起動するには、常に上の手順が必要になります。詳しくは、本編「WSL2/Ubuntu に memcached サービス をインストールする:[[wsl2:ubuntu:memcached#サービスの自動起動]]」を参照して下さい。
\\
==== hello-world ====
''hello-world'' を実行して、Docker エンジンが正しくインストールされていることを確認します:
$ docker run hello-world
実行例
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:1a523af650137b8accdaed439c17d684df61ee4d74feac151b5b337bd29e7eec
Status: Downloaded newer image for hello-world:latest
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 run'' コマンドは、Dockerイメージからコンテナを起動するコマンドです。上例では、''hello-world'' イメージからコンテナを起動しています。この時、上例のように、イメージがローカル環境に無ければ、Docker Hubを検索してダウンロードします。そして、イメージが取得できたらそのイメージを使用してコンテナを起動します。
実際の ''hello-world'' コンテナの実行は、「 ''Hello from Docker!'' 」からになります。
\\
==== docker コマンド ====
docker コマンドを使えば、Dockerコンテナに対する、様々な操作ができます。例えば、''docker ps'' コマンドで、ローカル環境のDockerコンテナの一覧を確認できます:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80732dbb08a0 hello-world "/hello" 27 minutes ago Exited (0) 27 minutes ago vigilant_kepler
詳しくは、以下を参照して下さい。
* [[https://docs.docker.jp/engine/reference/commandline/index.html|Docker コマンド]] --- Docker日本語ドキュメント
\\
===== アップグレード =====
Docker エンジンをアップグレードするには、最初に ''sudo apt update'' を実行し、次に「[[#特定バージョンのインストール]]」の手順に従って、インストールする新しいバージョンを選択します。
\\
===== アンインストール =====
アンインストールについては、Dockerサイトの以下のセクションを参照して下さい。
* https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine
以下に邦訳を示します。
=== Docker エンジンのアンインストール ===
- Docker エンジン、CLI、および Containerd パッケージをアンインストールします:$ sudo apt-get purge docker-ce docker-ce-cli containerd.io
- ホスト上のイメージ、コンテナー、ボリューム、またはカスタマイズされた構成ファイルは自動的に削除されません。すべてのイメージ、コンテナー、およびボリュームを削除するには:$ sudo rm -rf /var/lib/docker
編集した構成ファイルは手動で削除する必要があります。
\\