はじめに
社内業務として Docker の検証を行う際に、セットアップで思いのほか苦労しました。
個人開発では、私用PCを管理者権限で使用できますが、業務用PCでは、非管理者ユーザでの使用を余儀なくされることも多いはず。そんな方の手助けになればと思い、記事を執筆しています。
素人がトライ&エラーの末にたどり着いた内容の為、有識者の方のご意見・ご感想もお待ちしております!
この記事の内容
- 非管理者ユーザで Docker Desktop WSL2 バックエンドを使用する為に、セットアップをする(Windows 環境)
- Dockerの動作確認もかねて、DevContainer を使ってみる
この記事の対象者
- 非管理者ユーザでDocker Desktop WSL2 バックエンドを使ってみたい方(Hyper-Vバックエンドは言及しません。)
- 非管理者ユーザでWSL2だけでも使ってみたい方(WSL2の導入から記載します。)
検証環境
- OS:Windows 10 Pro 22H2
- CPU:AMD Ryzen 5 5560U
タスクマネージャーにて、「仮想マシン:はい」と表示されていることを確認してください。
注意
MS公式手順の wsl --install
ではエラーが出力されてしまいました。
そのため、従来のWSL有効化手順を参考にして、設定を行います。
導入手順
WSLの有効化
管理者ユーザで作業すると失敗するケースが有ります。(経験談)
作業するユーザを記載しておりますので、注意してください🙇♂️
-
非管理者ユーザ(=WSLとDockerを利用するユーザ)でログインする
-
PowerShellを管理者権限で起動
-
Linux 用 Windows サブシステムを有効にする
下記コマンドを実行する。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
実行後、エラーがないことを確認する。 -
仮想マシンの機能を有効にする
下記コマンドを実行する。
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
実行後、エラーがないことを確認する。 -
Windowsを再起動する
-
非管理者ユーザ(=WSLとDockerを利用するユーザ)でログインする
-
Linux カーネル更新プログラム パッケージをダウンロードする
下記リンク先のファイルをダウンロードする。
x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ-
ダウンロードしたファイルを実行する。
管理者特権のアクセス許可を求めるメッセージが表示されたら、パスワードを入力し「はい」を選択する。 -
正常に終了したら、「Finish」を選択する。
-
-
PowerShellを一般ユーザ(=WSLとDockerを利用するユーザ)で起動
管理者権限で行うと、一般ユーザ環境のWSLに設定が反映されません。 -
WSL 2 を既定のバージョンとして設定する
PowerShell にて次のコマンドを実行する。
wsl --set-default-version 2
WSLにLinuxディストリビューションをインストール
ここでは「Ubuntu 22.04 LTS」をインストールしますが、任意のディストリビューションを選択可能です。
-
PowerShellを一般ユーザ(=WSLとDockerを利用するユーザ)で起動
管理者権限で行うと、一般ユーザ環境のWSLにインストールされません。 -
Linux ディストリビューションをインストールする
コマンドwsl --install -d Ubuntu-22.04
を実行する。
Ubuntuの初期設定を行う
インストールが完了すると、自動でWSLが起動する。
- 初回起動時のみ、
Installing, this may take a few minutes...
と表示されるので、暫く待つ。 -
Enter new UNIX username:
と表示されたら、新規ユーザ名を入力しEnterを押下する。 -
New password:
に続けて、パスワードを設定する。(確認の為に2回入力を求められる。) - ソフトウェア更新を行う(インターネットへの疎通テストも兼ねる)
-
sudo apt update
コマンドを実行する。
パスワードの入力を求められるので、設定したパスワードを入力する。 - 続けて、
sudo apt upgrade -y
を実行する。
初回は特に時間がかかるので、しばらく待つ。
-
WSL上にDockerをインストールする
Dokcer Desktopと連携するために、WSL上のLinuxにもDockerパッケージをインストールします。
※本来この手順は不要な想定ですが、動作確認を行った際にDockerパッケージがインストールされていない旨のエラーメッセージが表示された為、明示的にインストールしています。
(有識者の方、解決策が有れば教えてください。😭)
-
インストールされているDocker競合パッケージを削除
# (1コマンドであることに注意) for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
-
Dockerの apt リポジトリを追加
# Add Docker's official GPG key: $ sudo apt update $ sudo apt install ca-certificates curl $ sudo install -m 0755 -d /etc/apt/keyrings
# (1コマンドであることに注意) sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources: # (1コマンドであることに注意) echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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 update
-
最新版のDockerをインストール
# (1コマンドであることに注意) sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
Dockerが動作するかを確認
sudo docker run hello-world
このコマンドはテストイメージをダウンロードし、コンテナ内で実行します。コンテナが実行されると、確認メッセージを表示して終了します。
WSL上のDockerを非rootユーザで起動可能とする
WSL上にインストールされたDockerはroot権限が必要となるため、一般ユーザの所属グループを変更します。
-
docker
グループを確認する。$ cat /etc/group | grep docker docker:x:999:
-
ユーザの追加
$ sudo gpasswd -a USERNAME docker
-
exit
コマンドでUbuntuを終了する。 -
PowerShell上で
wsl --shutdown
コマンドでWSLを終了する。 -
WSL を起動し、
sudo
なしでdocker
コマンドの動作確認する。docker run hello-world
Docker Desktop の導入
下記サイトを参照して、インストールを進める。
Docker Desktop WSL 2 backend on Windows
- インストーラーをダウンロードする。
Docker Desktop for Windows - インストーラーを管理者権限で実行する。
デフォルト設定のまま進む。(「Use WSL2 instead of Hyper-V」のチェックを確認する。) - 終了すると再起動を求められるため、各種アプリケーションを終了し、「Close and log out 」を選択する。
非管理者ユーザを「docker-users」グループに追加
-
管理者ユーザでログインする
-
Dockerの初期設定画面は、一度閉じる
-
コンピュータの管理を開く
Win+X
もしくはWindowsメニューを右クリックする。 -
「ローカルユーザーとグループ→グループ→docker-users」をダブルクリック→「追加」をクリック
-
一般ユーザ(=WSLとDockerを利用するユーザ)のユーザ名を入力し、「名前の確認」をクリック
「ドメイン名¥ユーザ名」と変換されたら、「OK」をクリック
-
「適用」→「OK」の順にクリック
-
再起動し、非管理者ユーザでログイン
Docker Desktopの設定
- インストールが完了したら、Windows の 「スタート」 メニューから Docker Desktop を起動する。
- 「Accept」をクリック
- Use recommended settingsを選択し、「Finish」をクリック
- 「Continue without signing in」をクリック→「Skip survey」をクリック
- Docker Desktop画面の右上にある歯車マークをクリックし、設定画面を開く
- 「General」内の「Use the WSL 2 based engine」が有効化されていることを確認する。
- 「Resources」→「WSL Integration」内の
Enable integration with my default WSL distro
が有効化されていることを確認する。
そして、インストール済みの WSL 2 ディストリビューションから選択・有効化する。 (今回はUbuntu-22.04
) -
Appky&restart
をクリック - 設定を反映させるために、Dokcerを終了する。
画面左下より、Docker Engineを停止できる。
VS Code + DevContainer拡張機能を導入する(動作検証用)
-
VisualStudio Codeをインストール
- リンク先よりインストーラーを入手し、指示に従いインストールをする。
Download Visual Studio Code - PATHの反映にはOS再起動が必要なため、再起動を推奨
- リンク先よりインストーラーを入手し、指示に従いインストールをする。
-
VS Code拡張機能のインストール
- 日本語化パッケージ(任意)
Japanese Language Pack for Visual Studio Code - WSL 連携拡張機能
WSL - Docker 拡張機能
Docker - DevContainer 拡張機能
Dev Containers
- 日本語化パッケージ(任意)
動作確認
Python 開発環境設定ドキュメントに含まれている、Django 用の Hello World チュートリアルのソース コードを使用します
-
WSL ターミナルを開き、任意のフォルダで次のように入力します。
mkdir -m 777 ~/testDevContainer/ cd ~/testDevContainer/ git clone https://github.com/mattwojo/helloworld-django.git
-
プロジェクトフォルダを開く
cd helloworld-django
-
VS Code でプロジェクトを開く
code .
-
フォルダを信頼するか聞かれるため、「Yes」を選択する。
-
VS Code インスタンスの左下隅にある「青色のリモート インジケーター」を確認して、WSL Linux ディストリビューションに接続していることを確認する。
-
リモート インジケーター(WSL:Ubuntu-22.04の表示部分)をクリックし、「コンテナーで再度開く(Reopen in Container)」を選択する。
※本手順は負荷が高く、処理に時間を要する(5分~10分)ため、他のアプリケーションを終了することを推奨。 -
VS Code の新しいインスタンスが開き、新しいイメージの構築が開始される。
※初回ビルドには時間を要する。
ビルドが完了すると、コンテナーが開始される
左下のリモートインジケーターの表示が「DevContainer:Python 3」と表示され、各種ファイルが表示されると処理は完了となる。
-
Ctrl + @
でターミナルを開き、ターミナル右上にある「+」マーク横の「Launch Profile...」からbash
を選択する。 -
uname
と入力してオペレーティング システムを確認し、python3 --version
と入力して Python のバージョンを確認する。vscode ➜ /workspaces/helloworld-django (master) $ uname Linux vscode ➜ /workspaces/helloworld-django (master) $ python3 --version Python 3.11.4
-
manage.py
をエディタで開き、F5キーでデバッグを開始する。 -
http://127.0.0.1:8000/をブラウザで開き、
Hello World! Django is running!
と表示されれば、設定は完了となる。
さいごに
私用PCでDockerを導入した際は、管理者権限でごり押しができたのですが、非管理者ユーザという要件が加わった途端に難航しました・・・
ニッチな記事だと思いますが、どなたかのお役に立てれば幸いです!
(重ね重ね、有識者の方のご意見・ご感想おまちしています🙇♂️)