0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

非管理者ユーザでDocker Desktop WSL2 バックエンドを使用する為にセットアップをしてみた

Last updated at Posted at 2024-10-04

はじめに

社内業務として 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

タスクマネージャーにて、「仮想マシン:はい」と表示されていることを確認してください。

image.png

注意

MS公式手順の wsl --installではエラーが出力されてしまいました。

image-1.png

そのため、従来のWSL有効化手順を参考にして、設定を行います。

導入手順

WSLの有効化

管理者ユーザで作業すると失敗するケースが有ります。(経験談)
作業するユーザを記載しておりますので、注意してください🙇‍♂️

  1. 非管理者ユーザ(=WSLとDockerを利用するユーザ)でログインする

  2. PowerShellを管理者権限で起動

  3. Linux 用 Windows サブシステムを有効にする
    下記コマンドを実行する。
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    実行後、エラーがないことを確認する。

  4. 仮想マシンの機能を有効にする
    下記コマンドを実行する。
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    実行後、エラーがないことを確認する。

  5. Windowsを再起動する

  6. 非管理者ユーザ(=WSLとDockerを利用するユーザ)でログインする

  7. Linux カーネル更新プログラム パッケージをダウンロードする
    下記リンク先のファイルをダウンロードする。
    x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ

    1. ダウンロードしたファイルを実行する。
      管理者特権のアクセス許可を求めるメッセージが表示されたら、パスワードを入力し「はい」を選択する。

    2. 正常に終了したら、「Finish」を選択する。

  8. PowerShellを一般ユーザ(=WSLとDockerを利用するユーザ)で起動
    管理者権限で行うと、一般ユーザ環境のWSLに設定が反映されません。

  9. WSL 2 を既定のバージョンとして設定する
    PowerShell にて次のコマンドを実行する。
    wsl --set-default-version 2

WSLにLinuxディストリビューションをインストール

ここでは「Ubuntu 22.04 LTS」をインストールしますが、任意のディストリビューションを選択可能です。

  1. PowerShellを一般ユーザ(=WSLとDockerを利用するユーザ)で起動
    管理者権限で行うと、一般ユーザ環境のWSLにインストールされません。

  2. Linux ディストリビューションをインストールする
    コマンドwsl --install -d Ubuntu-22.04を実行する。

Ubuntuの初期設定を行う

インストールが完了すると、自動でWSLが起動する。

  1. 初回起動時のみ、Installing, this may take a few minutes... と表示されるので、暫く待つ。
  2. Enter new UNIX username: と表示されたら、新規ユーザ名を入力しEnterを押下する。
  3. New password: に続けて、パスワードを設定する。(確認の為に2回入力を求められる。)
  4. ソフトウェア更新を行う(インターネットへの疎通テストも兼ねる)
    • sudo apt updateコマンドを実行する。
      パスワードの入力を求められるので、設定したパスワードを入力する。
    • 続けて、sudo apt upgrade -yを実行する。
      初回は特に時間がかかるので、しばらく待つ。

WSL上にDockerをインストールする

Dokcer Desktopと連携するために、WSL上のLinuxにもDockerパッケージをインストールします。
※本来この手順は不要な想定ですが、動作確認を行った際にDockerパッケージがインストールされていない旨のエラーメッセージが表示された為、明示的にインストールしています。
(有識者の方、解決策が有れば教えてください。😭)

  1. インストールされているDocker競合パッケージを削除

    # (1コマンドであることに注意)
        for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done
    
  2. 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
    
  3. 最新版のDockerをインストール

    # (1コマンドであることに注意)
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Dockerが動作するかを確認

    sudo docker run hello-world
    

    このコマンドはテストイメージをダウンロードし、コンテナ内で実行します。コンテナが実行されると、確認メッセージを表示して終了します。

WSL上のDockerを非rootユーザで起動可能とする

WSL上にインストールされたDockerはroot権限が必要となるため、一般ユーザの所属グループを変更します。

  1. docker グループを確認する。

    $ cat /etc/group | grep docker
    docker:x:999:
    
  2. ユーザの追加

    $ sudo gpasswd -a USERNAME docker
    
  3. exitコマンドでUbuntuを終了する。

  4. PowerShell上で wsl --shutdown コマンドでWSLを終了する。

  5. WSL を起動し、sudo なしでdocker コマンドの動作確認する。

    docker run hello-world
    

Docker Desktop の導入

下記サイトを参照して、インストールを進める。
Docker Desktop WSL 2 backend on Windows

  1. インストーラーをダウンロードする。
    Docker Desktop for Windows
  2. インストーラーを管理者権限で実行する。
    デフォルト設定のまま進む。(「Use WSL2 instead of Hyper-V」のチェックを確認する。)
  3. 終了すると再起動を求められるため、各種アプリケーションを終了し、「Close and log out 」を選択する。

非管理者ユーザを「docker-users」グループに追加

  1. 管理者ユーザでログインする

  2. Dockerの初期設定画面は、一度閉じる

  3. コンピュータの管理を開く
    Win+XもしくはWindowsメニューを右クリックする。

  4. 「ローカルユーザーとグループ→グループ→docker-users」をダブルクリック→「追加」をクリック

  5. 一般ユーザ(=WSLとDockerを利用するユーザ)のユーザ名を入力し、「名前の確認」をクリック
    「ドメイン名¥ユーザ名」と変換されたら、「OK」をクリック
    image-16.png

  6. 「適用」→「OK」の順にクリック

  7. 再起動し、非管理者ユーザでログイン

Docker Desktopの設定

  1. インストールが完了したら、Windows の 「スタート」 メニューから Docker Desktop を起動する。
  2. 「Accept」をクリック
  3. Use recommended settingsを選択し、「Finish」をクリック
  4. 「Continue without signing in」をクリック→「Skip survey」をクリック
  5. Docker Desktop画面の右上にある歯車マークをクリックし、設定画面を開く
  6. 「General」内の「Use the WSL 2 based engine」が有効化されていることを確認する。
    image-19.png
  7. 「Resources」→「WSL Integration」内のEnable integration with my default WSL distroが有効化されていることを確認する。
    そして、インストール済みの WSL 2 ディストリビューションから選択・有効化する。 (今回はUbuntu-22.04
  8. Appky&restartをクリック
  9. 設定を反映させるために、Dokcerを終了する。
    画面左下より、Docker Engineを停止できる。
    image-21.png

VS Code + DevContainer拡張機能を導入する(動作検証用)

  1. VisualStudio Codeをインストール

    • リンク先よりインストーラーを入手し、指示に従いインストールをする。
      Download Visual Studio Code
    • PATHの反映にはOS再起動が必要なため、再起動を推奨
  2. VS Code拡張機能のインストール

    1. 日本語化パッケージ(任意)
      Japanese Language Pack for Visual Studio Code
    2. WSL 連携拡張機能
      WSL
    3. Docker 拡張機能
      Docker
    4. DevContainer 拡張機能
      Dev Containers

動作確認

Python 開発環境設定ドキュメントに含まれている、Django 用の Hello World チュートリアルのソース コードを使用します

  1. WSL ターミナルを開き、任意のフォルダで次のように入力します。

    mkdir -m 777 ~/testDevContainer/
    cd ~/testDevContainer/
    git clone https://github.com/mattwojo/helloworld-django.git
    
  2. プロジェクトフォルダを開く
    cd helloworld-django

  3. VS Code でプロジェクトを開く
    code .

  4. フォルダを信頼するか聞かれるため、「Yes」を選択する。

  5. VS Code インスタンスの左下隅にある「青色のリモート インジケーター」を確認して、WSL Linux ディストリビューションに接続していることを確認する。
    image-24.png

  6. リモート インジケーター(WSL:Ubuntu-22.04の表示部分)をクリックし、「コンテナーで再度開く(Reopen in Container)」を選択する。
    ※本手順は負荷が高く、処理に時間を要する(5分~10分)ため、他のアプリケーションを終了することを推奨。

  7. VS Code の新しいインスタンスが開き、新しいイメージの構築が開始される。
    ※初回ビルドには時間を要する。
    ビルドが完了すると、コンテナーが開始される
    左下のリモートインジケーターの表示が「DevContainer:Python 3」と表示され、各種ファイルが表示されると処理は完了となる。
    image-27.png

  8. Ctrl + @でターミナルを開き、ターミナル右上にある「+」マーク横の「Launch Profile...」からbashを選択する。

  9. unameと入力してオペレーティング システムを確認し、python3 --versionと入力して Python のバージョンを確認する。

    vscode ➜ /workspaces/helloworld-django (master) $ uname
    Linux
    vscode ➜ /workspaces/helloworld-django (master) $ python3 --version
    Python 3.11.4
    
  10. manage.pyをエディタで開き、F5キーでデバッグを開始する。

  11. http://127.0.0.1:8000/をブラウザで開き、Hello World! Django is running!と表示されれば、設定は完了となる。

さいごに

私用PCでDockerを導入した際は、管理者権限でごり押しができたのですが、非管理者ユーザという要件が加わった途端に難航しました・・・

ニッチな記事だと思いますが、どなたかのお役に立てれば幸いです!
(重ね重ね、有識者の方のご意見・ご感想おまちしています🙇‍♂️)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?