😀

Windows11 WSL2でDockerの環境を構築する

2022/10/02に公開

Windows11でDockerが利用できる環境構築を行います。
Dockerの環境構築を通して、Docker、wsl2、ubuntuについて学びます。

Dcokerって何

死ぬほど解説サイトがありますが、Dockerとはコンテナ技術のことです。
Dockerfileというファイルにコンテナの情報(サーバー構成など)を記載して、
Dockerイメージとやらを作って。サーバーの中でコンテナというサーバーのようなものを動かすことができます。

https://knowledge.sakura.ad.jp/13265/

これがなぜ便利なのか理解するには、Webサーバーなどを実際に立ててみると理解できます。

https://knowledge.sakura.ad.jp/2978/

構築環境

OS 名:                  Microsoft Windows 11 Home
OS バージョン:          10.0.22000 N/A ビルド 22000

WSL2をインストールする

昔は色々設定しないとwsl2のインストールができなかったのが、今ではコマンド1回でインストールされるので便利になってました。

https://learn.microsoft.com/ja-jp/windows/wsl/install

  1. Powershellを開いて、コマンドを実行する
# wsl --install
  1. 再起動

  2. 再起動後にubuntuが立ち上がるので、ユーザー名とパスワードを設定して完了

  3. Powershellで動作確認する
    RunningとなっていればOK

# wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

バージョン

$ cat /etc/issue
Ubuntu 20.04 LTS

WSLコマンドで使ったもの

wsl --helpと打てばコマンド一覧の説明が日本語ででてくるので不要かもしれませんが使ったものを載せます。

ディストリビューションを停止するとき

# wsl -l -v
(ディストリビューション名を確認する)
# wsl -t Ubuntu

削除する方法

# wsl -l -v
 (ディストリビューション名を確認する)
# wsl --unregister Ubuntu

Dcoker Engineをインストールする

https://docs.docker.com/engine/install/ubuntu/

  1. リポジトリをセットアップする

パッケージを更新とインストールを行う。

$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. GPGキーの追加
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. GPGキーのセットアップ
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Docker エンジンをインストールする
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Dockerの動作確認を行う

  1. dockerのサービスを起動させる
$ sudo service docker start
* Starting Docker: docker
  1. テストコマンドを実行します。
    正常に動作したときの表示です。無事に、動いてくれました。
 $ sudo docker run hello-world
Hello from Docker!
 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をsudoなしで動かす

sudoをつけるのは面倒なので、dockerグループにログインしているユーザーを追加します。

sudo usermod -aG docker $USER
reboot

Docker Composeをインストールする

Docker Engineだけでなく、Docker Composeもあったほうが便利なので、インストールします。
https://docs.docker.com/compose/install/linux/

$ sudo apt install docker-compose
$ docker-compose --version

Docker ComposeをGithub経由でインストール

バージョン指定でインストールするときは、少し面倒です。

https://sabakunotabito.hatenablog.com/entry/2021/10/03/024348#docker-compose-V2-インストール

$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/libexec/docker/cli-plugins/docker-compose
# バイナリに対して実行可能なパーミッションを適用します
$ sudo chmod +x /usr/libexec/docker/cli-plugins/docker-compose
# docker composeコマンドが使えないので、シンボリックを作成します
$ sudo ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose

なぜDocker Composeが必要なのか

Docker Composeがなぜ必要なのか理解ができなかったので、Docker Composeについて調べました。

Docker Composeは、docker-compose.ymlというファイルにコンテナの挙動を記述して、docker composeコマンドを実行することで、dockerコマンドをよしなに実行してコンテナを複数操作することができます。
Docker Engineだけだと複数コンテナを立てたときに不便ということで理解をしました。
このあたりはまだ、実際に動かしてないので理解が進まないので、動かしてみることにします。

Docker Composeについて、なぜ必要なのか、分かりやすく解説した記事を見つけましたので掲載します。

https://tech-lab.sios.jp/archives/20051

wsl2にインストールしたDockerを常時起動する

wsl2のubuntuを立ち上げるたびにsudo service docker startを打つのは面倒なので、常時起動させます。

https://zukucode.com/2021/11/wsl2-docker-startup.html

  1. 以下のコマンドを打つとnanoが立ち上がります。vscodeのターミナルからだとなぜか終了できなくて、ubuntuアプリから作業しました。
$ sudo visudo
  1. 管理者権限なしで、service docker startが実行できるようになります。
%docker ALL=(ALL)  NOPASSWD: /usr/sbin/service docker start
  1. ubuntuが起動したときにdockerのサービスが動いてなければ、service docker startを実行します。
vi ~/.bashrc

if [ $(service docker status | awk '{print $4}') = "not" ]; then
  sudo service docker start > /dev/null
fi

bashrcとは、ubuntuが起動したときに読み込まれる設定ファイルです。

https://wa3.i-3-i.info/word13649.html

Discussion