WSL2でDockerを用いる
はじめに_
Windows Subsystem for Linux 2(WSL2)が使えるように設定済みで、かつ、何かしらのLinuxがWSL2上にインストール済みとする。
この例ではUbuntu 20.04がWSL2上にインストールされている。
参考_
- WSL2でWeb開発環境の構築メモ (zsh, node, dockerなど)
- さくらのナレッジ:Docker入門
Docker Desktop for Windowsのインストール_
Docker公式にアクセスし、 公式サイト上部の「Get Started」をクリックする(画面サイズによってはメニュー内に格納されている)。
ダウンロードページからDocker Desktop for Windowsをダウンロードし、インストールする。インストールを開始して、しばらくすると以下のようなオプションの選択画面になるので、「OK」を押して進める。

以下のような画面でインストールが進む。

インストールが終了すると以下の画面になる。

デスクトップ上にあるDocker DesktopのアイコンからDocker Desktopを起動する。初回起動時は以下のようにチュートリアル(tutorial)を行うかどうか尋ねてくる。「Skip tutorial」をクリックする。

そして、Docker Desktop WSL 2 backendの「Install」の項に従い、設定を行う。Dockerの設定画面を開く。以下の画面の歯車アイコンをクリックする。

設定のトップ画面は「General」の設定になっている。「Use the WSL2 based engine」がオンになっていることを確認する。私はこの設定画面の「Start Docker Desktop when you log in」のチェックをオフにしている。設定を変更したときは「Apply&Restart」をクリックし、設定の変更を反映させる。

「Resources」→「WSL Integration」を開く。「Enable integration with my default WSL distro」をチェックする。そして、WSL2上にインストールしているLinuxのディストリビューションをONにする(今回の例ではUbuntu 20.04)。「Apply&Restart」をクリックし、設定の変更を反映させる。

Windows Powershellで状況を確認する。私の環境だと以下のようになる。
wsl -l -v NAME STATE VERSION * Ubuntu-18.04 Running 2 docker-desktop Running 2 Ubuntu-20.04 Running 2 docker-desktop-data Running 2
これでDocker Desktopのインストールおよび設定は終了。
Docker利用の練習_
Docker Desktopのインストール時にUbuntuが起動していた場合は、上述のDocker Desktopとの連携設定終了後に一度Ubuntuを再起動すること。
Dockerが動いているとする。さくらのナレッジ:Docker入門(第一回)~Dockerとは何か、何が良いのか~に従い、dockerを動かしてみる。
Ubuntuのターミナル上でdockerと連携していることを確認する。
% which docker /usr/bin/docker (docker-desktop-dataにマウントされているのを確認する) % df -h Filesystem Size Used Avail Use% Mounted on /dev/sdd 251G 5.3G 233G 3% / tmpfs 6.3G 274M 6.0G 5% /mnt/wsl /dev/sdc 251G 6.5G 232G 3% /mnt/wsl/docker-desktop-data/isocache none 6.3G 12K 6.3G 1% /mnt/wsl/docker-desktop/shared-sockets/host-services /dev/sdb 251G 124M 239G 1% /mnt/wsl/docker-desktop/docker-desktop-proxy /dev/loop0 376M 376M 0 100% /mnt/wsl/docker-desktop/cli-tools tools 160G 104G 56G 66% /init none 6.3G 0 6.3G 0% /dev none 6.3G 20K 6.3G 1% /run none 6.3G 0 6.3G 0% /run/lock none 6.3G 0 6.3G 0% /run/shm none 6.3G 0 6.3G 0% /run/user tmpfs 6.3G 0 6.3G 0% /sys/fs/cgroup C:\ 160G 104G 56G 66% /mnt/c D:\ 9.5G 8.4G 1.2G 88% /mnt/d E:\ 2.8T 427G 2.4T 16% /mnt/e F:\ 2.0T 1.3T 751G 64% /mnt/f J:\ 762G 311G 452G 41% /mnt/j
nginxのイメージを取得し、コンテナを起動してみる。Ubuntuのターミナル上で以下を実行する。
% docker run --name some-nginx -d -p 8080:80 nginx
Windows上のWebブラウザで http://localhost:8080/ にアクセスするとnginxのトップ画面が起動する。
現在動いているコンテナは以下のコマンドで確認できる。
% docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b89d2e19b18d nginx "/docker-entrypoint.…" 23 seconds ago Up 19 seconds 0.0.0.0:8080->80/tcp some-nginx
コンテナsome-nginxの停止は以下のコマンドで停止する。
% docker stop some-nginx
停止していることを確認する。
% docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b89d2e19b18d nginx "/docker-entrypoint.…" About a minute ago Exited (0) 23 seconds ago some-nginx
MySQLおよびWordpressを動かしてみる。
% docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7 % docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link some-mysql:mysql -d -p 8080:80 wordpress
Windows上のWebブラウザで http://localhost:8080/ にアクセスするとWordpressのトップ画面が起動する。
稼働状況を確認する。
% docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9b98d7ad04c9 wordpress "docker-entrypoint.s…" 34 seconds ago Up 27 seconds 0.0.0.0:8080->80/tcp some-wordpress 5b877fc60e5d mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp some-mysql b89d2e19b18d nginx "/docker-entrypoint.…" 7 minutes ago Exited (0) 5 minutes ago some-nginx
コンテナを停止させる。コンテナ名は上の「docker ps -a」で調べる。
% docker stop some-wordpress % docker stop some-mysql
nginx, mysql, wordpressのコンテナを削除する。コンテナ名は「docker ps -a」で調べる。
% docker rm some-nginx % docker rm some-wordpress % docker rm some-mysql
削除されていることを確認する。
% docker ps -a
手元のdockerイメージを確認する。
% docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 f07dfa83b528 36 hours ago 448MB nginx latest ae2feff98a0c 7 days ago 133MB wordpress latest bc5f6567b763 11 days ago 550MB
不要になったイメージを削除する。イメージIDは「docker images」で確認する。
% docker rmi ae2feff98a0c % docker rmi bc5f6567b763 % docker rmi f07dfa83b528
消えているかどうかを確認する。
% docker images
dockerコンテナのポートフォワードをやり直す_
docker run実行時しかポートフォワードの設定を行えないとのこと。このため、ポートフォワードをやり直したいコンテナの名前をcont1としたとき、以下の手順で進める。
- cont1を停止する
- cont1からイメージを作成する
- cont1を削除する
- 作成したイメージからコンテナを生成する(この際にポートフォワードをやり直す)
まず、cont1を停止する。
% docker stop cont1 % docker ps -a (停止を確認する)
cont1からイメージを作成する。
% docker commit cont1 cont1_i
cont1を削除する。
% docker rm cont1
生成したイメージからコンテナを作成する。
% docker run --name cont1_renew -d -p 8080:80 cont1_i % docker ps -a