Zenn
🏞️

Windows11 に Docker CE を導入する

2023/12/25に公開

Windows11Docker CE を導入したので備忘録を残します。

Docker とは

Docker とはコンテナ技術を用いて仮想環境を開発・実行するための管理ツールです。
コンテナ技術とは、ホスト OS 上でアプリケーションの実行環境を構築する技術です。
下記の記事がわかりやすいです。

https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud/container/
https://knowledge.sakura.ad.jp/13265/
https://zenn.dev/nameless_sn/articles/the_fundamental_of_container
https://qiita.com/satken2/items/10b22bed7a331e425cfe
https://qiita.com/satken2/items/8515900a5a7b9bb0d0c9

というわけで、DockerWindows に導入していきたいのですが、Docker Desktop for Windows は商用利用するために有料のサブスクリプションが必要になります。
なので今回は WSL という、Windows 環境内で Linux カーネルを実行する仕組みを利用して無償版の Docker CE(Community Edition) を導入します。

https://docs.docker.jp/desktop/install/windows-install.html

利用環境

  • Windows11 pro

手順

  • WSL を有効にする
  • MicrosoftStore から Ubuntu を入手する
  • Ubuntu に docker を導入する

WSL をインストールする

WSL(Windows Subsystem for Linux) とは、WindowsOSLinux 向けのバイナリを動かすための仕組みです。
WSL には、 WSL1WSL2 があります。

WSL1Linux カーネルを使用せず、Linux システムコールを Windows API に変換するため利用することができないソフトウェアが存在する場合もあるそうです。
一方で、WSL2 は仮想マシン上に本物の Linux カーネルを動作させるため互換性の向上があった反面、メモリの消費量が増加したり、起動に時間がかかるなどのデメリットもあるようです。

https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux

WSL のインストール

まずは WSLWindows11 に導入します。

コマンドプロンプト(PowerShell でも大丈夫です)で、以下のコマンドを実行する。

wsl --install

再起動を求められるので、一度 PC を再起動してください。

WSL2 を有効にする

続いて WSL2 を有効にします。
コマンドプロンプト(PowerShell でも大丈夫です)で、以下のコマンドを実行する。

wsl --set-default-version 2

バージョン確認

コマンドプロンプト(PowerShell でも大丈夫です)で、以下のコマンドを実行する。
VERSION の欄が 2 になっていればOKです。

wsl -l -v 
#または
wsl --list --verbose

Ubuntu を導入する

続いて UbuntuPC にインストールします。

MicrosoftStore から Ubuntu をインストールする

MicrosoftStore を開き、Ubuntu と検索し、Ubuntu 22.04.3 をインストールします。

Ubuntu にて一般ユーザーを作成する

コマンドラインのタブから Ubuntu を選択して開きます。

ここでユーザー名とパスワードを設定するように促されますので、画面の指示にしたがってユーザーを作成してください。

Ubuntu 22.04 を WSL のデフォルトに設定する

インストールした Ubuntu 22.04 をデフォルトに設定します。
コマンドプロンプト(or Windows PowerShell) での以下を実行します。

wsl --set-default Ubuntu-22.04

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

いよいよ、UbuntuDocker を導入していきます。
基本的には、公式のガイドこちらのガイドに沿って導入していきます。

Docker のインストール

# 古いパッケージの削除
sudo apt-get remove docker docker-engine docker.io containerd runc
# パッケージの更新
sudo apt-get update
# 関連パッケージのインストール
sudo apt-get install ca-certificates curl gnupg lsb-release
# Docker の GPG キー(暗号化ツールのキー)をインストール
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Docker のリポジトリ情報を apt に追加しパッケージとして利用することができるようにする
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 確認と更新
sudo apt-get update
# Docker CE のインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Linux ホストマシンの設定

root ユーザーとして利用できるように設定する

# docker というグループユーザーを追加する
# ※自動的に追加されている場合があります
sudo groupadd docker

# 現在ログインしているユーザーを docker グループに追加する
sudo usermod -aG docker $USER

ここまで完了したら変更を反映させるために、一度コマンドラインを閉じて再度起動してください。

WSL 起動時に Docker が起動するようにする

コマンドプロンプト(PowerShell でも大丈夫です)で、以下のコマンドを実行する。
WSL バージョンが 0.67.6 以上であれば OK です。

wsl.exe --version

コマンドラインで、Ubuntu を開き、以下のコマンドを実行します。

cat /etc/wsl.conf
[boot] 
systemd=true

上記のように表示されれば問題ありませんが、ない場合は追記する必要があります。

# エディタを開く
vi /etc/wsl.conf
# i キーを押下して INSERT モードを起動
# 上記 [boot] 行と systemd=true 行を追記する
# esc キーを押下して INSERT モードを終了する
# :wq と入力してファイルを保存して終了する

参考

Docker

https://www.docker.com/ja-jp/

Docker について

https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud/container/
https://knowledge.sakura.ad.jp/13265/
https://zenn.dev/nameless_sn/articles/the_fundamental_of_container
https://qiita.com/satken2/items/10b22bed7a331e425cfe
https://qiita.com/satken2/items/8515900a5a7b9bb0d0c9

WSL について

https://ja.wikipedia.org/wiki/Windows_Subsystem_for_Linux

Docker 導入方法について

https://docs.docker.com/engine/install/ubuntu/
https://dev.to/felipecrs/simply-run-docker-on-wsl2-3o8
https://blog.jp.square-enix.com/iteng-blog/posts/00024-wsl2-docker-ce/

さいごに

今回、Docker を導入した目的は「Dockerfile で環境を管理することで、各開発環境におけるバージョンの統一・管理を楽にしたい」です。
今さら触ってみましたがめちゃ便利でした。
ゆくゆくは本番環境へのデプロイや AWS Lambda へのデプロイなども試していきたいです。

GitHubで編集を提案

Discussion

ログインするとコメントできます