Windows11 WSL2でDockerの環境を構築する
Windows11でDockerが利用できる環境構築を行います。
Dockerの環境構築を通して、Docker、wsl2、ubuntuについて学びます。
Dcokerって何
死ぬほど解説サイトがありますが、Dockerとはコンテナ技術のことです。
Dockerfileというファイルにコンテナの情報(サーバー構成など)を記載して、
Dockerイメージとやらを作って。サーバーの中でコンテナというサーバーのようなものを動かすことができます。
これがなぜ便利なのか理解するには、Webサーバーなどを実際に立ててみると理解できます。
構築環境
OS 名: Microsoft Windows 11 Home
OS バージョン: 10.0.22000 N/A ビルド 22000
WSL2をインストールする
昔は色々設定しないとwsl2のインストールができなかったのが、今ではコマンド1回でインストールされるので便利になってました。
- Powershellを開いて、コマンドを実行する
# wsl --install
-
再起動
-
再起動後にubuntuが立ち上がるので、ユーザー名とパスワードを設定して完了
-
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をインストールする
- リポジトリをセットアップする
パッケージを更新とインストールを行う。
$ sudo apt-get update
$ sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- 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
- 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
- Docker エンジンをインストールする
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Dockerの動作確認を行う
- dockerのサービスを起動させる
$ sudo service docker start
* Starting Docker: docker
- テストコマンドを実行します。
正常に動作したときの表示です。無事に、動いてくれました。
$ 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もあったほうが便利なので、インストールします。
$ sudo apt install docker-compose
$ docker-compose --version
Docker ComposeをGithub経由でインストール
バージョン指定でインストールするときは、少し面倒です。
$ 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について、なぜ必要なのか、分かりやすく解説した記事を見つけましたので掲載します。
wsl2にインストールしたDockerを常時起動する
wsl2のubuntuを立ち上げるたびにsudo service docker start
を打つのは面倒なので、常時起動させます。
- 以下のコマンドを打つとnanoが立ち上がります。vscodeのターミナルからだとなぜか終了できなくて、ubuntuアプリから作業しました。
$ sudo visudo
- 管理者権限なしで、
service docker start
が実行できるようになります。
%docker ALL=(ALL) NOPASSWD: /usr/sbin/service docker start
- 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が起動したときに読み込まれる設定ファイルです。
Discussion