見出し画像

windowsでdocker を使えるようにした

windows でdocker が使えるようになる記事です。

実際に設定をした記録になります。WSL(WSL2)を利用しました。

結果、便利でしたので実際に設定してみることをオススメします。

※本記事は、自分が試した部分のみを記録します。それ以外の方法や調べたことなどは、下記の別記事に記載します。

他の試してみたサイトとは、おそらくやり方が違います。ただ、このやり方は容量に優しいやり方です。

はじめに

WSL とは、Windows Subsystem for Linux の略です。

システムエンジニアは、最終的にインフラもやる運命です。

ですが、調べる時間・試してみる時間が惜しいです。同じ悩みを持つ人の助けになったら幸いです。

ゴール

・ docker-compose を、 Windowsで使う
・ Docker上にDBを起動する( MySQL, PostgreSQL, MariaDB )
・ ローカルアプリケーションを、それぞれのDBに繋げる

記録の目的

・再設定ができるような手順がまとめられていること
・容量とメモリをどのぐらい使うのかが分かること

実施環境

・Windows10 Home
 ・バージョン: 1909
・64ビットオペレーティングシステム x64ベース プロセッサ


拝見したnote記事

※ 他サイトも見ていますが、記載しません。せっかくのnoteなので!



1. 設定の有効化

1-1. 『Windows の機能』 を開く
 1-1-1. Win + X ⇒ Win + N(『設定』を開く)
 1-1-2. 「設定の検索」に、「windows の機能」を入力して、Windows の機能の有効化または無効化 を選択

1-2. 設定を有効化する
 「Linux 用 Windows サブシステム」 がチェック
※ 既に有効化されてた…。


2. WSL2 をインストール

2-1. PowerShell を管理者権限で起動
 2-1-1. スタートメニュー の中の Windows PowerShell のフォルダを開く
 2-1-2. Windows PowerShell を右クリック、管理者として実行する

2-2. WSL1 を有効化

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

 実行結果

展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1379
イメージのバージョン: 10.0.18363.1440
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

2-3. WSL2 を有効化

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

 実行結果

展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1379
イメージのバージョン: 10.0.18363.1440
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

2-4. WSL 2Linuxカーネルをダウンロード(14.5MB でした)

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

2-5. 再起動実行 

2-6. ダウンロードした wsl_update_x64.msi を実行(インストール)

2-7. もう一度 PowerShell を管理者権限で起動

2-8. WSL2 をデフォルトの環境に設定

wsl.exe --set-default-version 2

 実行結果

WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください


3. ディストリビューションをインストール

※ この方法は王道ではありません。

3-1. Ubuntu の20.04 をダウンロード(454MB)
 https://cloud-images.ubuntu.com/focal/current/
 から、focal-server-cloudimg-amd64-wsl.rootfs.tar.gz をダウンロード

3-2. インストール

wsl.exe --import ubuntu-2004 D:\WSL2\Ubuntu .\focal-server-cloudimg-amd64-wsl.rootfs.tar.gz

 (あれ、何もでない。「D:\WSL2\Ubuntu」に、「ext4.vhdx」がある。)

 wsl.exe -l -v

実行結果

NAME STATE VERSION
* ubuntu-2004 Stopped 2

おー、入ってる。停止中か。


4. Ubuntu を実行する

wsl.exe -d ubuntu-2004

実行結果

Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.72-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
 System information as of Fri Apr 2 17:45:14 JST 2021
 System load: 0.08 Processes: 8
Usage of /: 0.4% of 250.98GB Users logged in: 0
Memory usage: 1% IPv4 address for eth0: 172.17.70.130
Swap usage: 0%
1 update can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable
This message is shown once a day. To disable it please create the
/root/.hushlogin file.

なるほど。実行したフォルダにマウントされている状態になっている。
そして、rootユーザーでログインしている状態らしい(tarだからかな・・)。
一度、exit でubuntuから抜ける。

 wsl.exe -l -v

実行結果

NAME STATE VERSION
* ubuntu-2004 Stopped 2

お、停止していますね。
もう一度 wsl -d をして、別のコマンドプロンプトから -l -v を実行すると、

NAME STATE VERSION
* ubuntu-2004 Running 2

実行した時だけ、起動している状態だ。素晴らしい・・。
※ Vmmem が実行されている状態。メモリは300MBくらい。


5. Ubuntu に docker などを準備する

Linux に docker を入れるのと同じ。

apt-get remove docker docker-engine docker.io
apt update
apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
apt update
apt-cache policy docker-ce
apt install -y docker-ce
usermod -aG docker ${USER}
COMPOSE_VERSION=1.28.6
curl -L "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

WSL2 へのネットワークを知りたかったので、 下記も実行。

apt install net-tools


6. docker-compose.yml を作る

services:
   my:
       image: mysql
       environment:
           - MYSQL_ROOT_PASSWORD=password
           - MYSQL_DATABASE=plugin-test
           - MYSQL_USER=testuser
           - MYSQL_PASSWORD=password
       networks:
           - local_network
       ports: 
           - 3307:3306
   maria: 
       image: mariadb
       environment:
           - MYSQL_ROOT_PASSWORD=password
           - MYSQL_DATABASE=plugin-test
           - MYSQL_USER=testuser
           - MYSQL_PASSWORD=password
       networks:
           - local_network
       ports: 
           - 3305:3306
   postgre:
       image: postgres
       environment:
           - POSTGRES_DB=plugin-test
           - POSTGRES_USER=testuser
           - POSTGRES_PASSWORD=password
       networks:
           - local_network
       ports: 
           - 5432:5432

networks:
   local_network:
       driver: bridge

※ version は省いてます。
※ 1回で3つのDBを立ち上げちゃいます。
※ mysql と mariadb は同じポートなので、割り振りました。
 「mysql」は 3307。「mariadb」は 3305。「postgresql」は 5432。


7. docker-compose を実行して、接続アドレスを知る

sudo service docker start

docker-compose up -d

ifconfig

ifconfig で出力された、「eth0」のIPアドレス(inet)をメモメモ・・。

そのIPアドレスと、 docker-compose.yml で設定した、ポート、ユーザーやパスワード を使って接続。

・・できました!!


メモリや容量の変化

Ubuntuのインストール前
 ・Cドライブ: 空き容量42.1GB
 ・Dドライブ: 空き容量880GB
wslのインポート実行後
 ・Cドライブ: 空き容量42.1GB
 ・Dドライブ: 空き容量879GB
wslの実行後
 ・Cドライブ: 空き容量42.1GB
 ・Dドライブ: 空き容量879GB

でした。wsl 自体に、そんなに容量使わないですね。
インポートするものの容量がほとんどみたいですね。

ext4.vhdx の容量も確認してました。

dockerを入れる前
 ・1.19GB
dockerを入れるために、apt-get updateした後
 ・1.34GB
dockerを入れた後
 ・1.85GB
docker-compose実行した後
 ・3.13GB

やっぱり、ubuntu でインストールをすると、このファイルの中に色々と入っているみたいですね。


気を付けたいこと

「利用が終わった後に、wsl を止めるのを忘れない・・!」

前は、exit をしたら止まっていたのに、最後に「wsl -l -v」をすると、

NAME STATE VERSION
* ubuntu-2004 Running 2

動いてる・・。docker を start させたからかな…。

wsl --shutdown ubuntu-2004

で止めておきました(ちゃんと、「wsl -l -v」で Stopped確認)。


感想などは、下記の記事にまとめます。


変なところに時間を使ったため、予想以上に1週間かかりました・・。
※ 1日、1時間ぐらいの作業 +αなので、大体2人日ぐらい orz
ですが、最初から手順が分かっていれば、2時間もかからずに終わりそうです。準備も簡単!
自分でアプリケーションを作り、DB接続が必要になったら積極的に使っていきたいですね!!

この記事を読んだ方の少しでもお力になれれば幸いです。
それでは。


宣伝

プログラミング・コーディング学習をしたいけど、あまり時間をかけたくない。何から始めれば良いのか分からないという方のために、私が持っている知識を嚙み砕いて下記のマガジンにまとめています。
よければ、学習にお役立てください。


私が作ったものを下記のマガジンにまとめています。
よければ、お立ち寄りください。


いただいたサポートは、今後の創作活動に役立てさせていただきます。