Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 1 / 昨日: 4
総計: 2226

wsl2:ubuntu:docker

WSL2/Ubuntu に Docker をインストールする

Docker 20.10.1

y2sunlight 2020-12-15

Docker - 関連記事

WSL2 - 関連記事

リンク

本章では、Windows マシン上に WSL2/Ubuntu を使って Docker をインストールする方法を、Docker公式サイトの以下の手順に従って説明します。


前提条件

本章の前提条件としては、次の2つです。

  1. WSL2 に Ubuntuがインストールされている事(必須)。
    バージョンは Ubuntu 20.04.1 LTS を想定していますが、それ以外のバージョンでも可能だと思います。まだインストールがお済でない場合は、以下を参照して下さい。
  2. Windowsターミナルがインストールされている事(推奨)。
    必ずしも必要ではありませんが、本章では、Windowsターミナルで操作する事を前提に説明します。インストールについては本編の「Windows ターミナル」を参照して下さい。
本章は手動インストールした Ubuntu で検証しています。


Dockerリポジトリの設定

Windowsターミナルで Ubuntu を開いて下さい。

Dockerにはいろいろなインストール方法がありますが、インストールを簡単にするためには、Dockerのリポジトリを設定し、そこからインストールするのが推奨されるアプローチです(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) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

リポジトリの設定

次のコマンドを使用して、stable なリポジトリを設定できます。nightly または test なリポジトリを追加するには、stable の後にnightly または test (またはその両方)を追加します。 nightly または test についてはこちらを参照して下さい。

$ 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=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

<VERSION_STRING>には、例えば、上の2番目のバージョンをインストールする場合は、5:18.09.1~3-0~ubuntu-xenial が入ります。


初期設定

まず、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://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 サービス をインストールする:サービスの自動起動」を参照して下さい。


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

詳しくは、以下を参照して下さい。


アップグレード

Docker エンジンをアップグレードするには、最初に sudo apt update を実行し、次に「特定バージョンのインストール」の手順に従って、インストールする新しいバージョンを選択します。


アンインストール

アンインストールについては、Dockerサイトの以下のセクションを参照して下さい。

以下に邦訳を示します。

Docker エンジンのアンインストール

  1. Docker エンジン、CLI、および Containerd パッケージをアンインストールします:
    $ sudo apt-get purge docker-ce docker-ce-cli containerd.io
  2. ホスト上のイメージ、コンテナー、ボリューム、またはカスタマイズされた構成ファイルは自動的に削除されません。すべてのイメージ、コンテナー、およびボリュームを削除するには:
    $ sudo rm -rf /var/lib/docker

編集した構成ファイルは手動で削除する必要があります。


コメント

コメントを入力. Wiki文法が有効です:
 
wsl2/ubuntu/docker.txt · 最終更新: 2020/12/30 20:17 by y2sunlight