🤖

Docker Desktop なしで Docker Image の開発環境を PC(Windows)に作りたかった

2022/01/21に公開

Docker Desktop が有償になってしまったので、WSL2(Ubuntu20.04) + Docker で凌ぐことに。
おまけで、最低限の Python 環境構築する手順まで記載しています。

前提

OS : Windows 10 Pro or Enterprise 21H1
Editor : VSCode

事前準備

VSCode, PowerShell, Windows Terminal のインストール

  1. コマンドプロンプトを開いて下記を実行する

    winget install Microsoft.VisualStudioCode
    winget install Microsoft.WindowsTerminal
    winget install Microsoft.PowerShell
    

    ※途中、「すべてのソース契約条件に同意しますか?」と表示されるので「Y」を入力します。

WSL2 と Ubuntu 20.04 LTS インストール

WSL と Ubuntu のインストール

  1. 管理者権限で Windows Terminal を起動する(Windows Terminal を右クリック -> その他 -> 管理者として実行)

  2. Power Shell を開いて下記を実行する

    wsl --install -d Ubuntu-20.04
    
  3. 途中、ユーザー名とパスワードを聞かれるので、任意のものを設定する

  4. Windows OS を再起動する

WSL の更新

  1. 下記コマンドを実行して現在の WSL カーネルのバージョンを確認する

    wsl --status
    
  2. 下記コマンドを実行して WSL の更新、再起動を行う

    wsl --update
    wsl --shutdown
    
  3. 下記コマンドを実行して現在の WSL カーネルのバージョンを確認する

    wsl --status
    カーネル バージョン: 5.10.60.1
    

Ubuntu のアップデートと再起動

  1. Windows Terminal で WSL(Ubuntu-20.04)を開き下記コマンドを実行する

    sudo apt upgrade
    wsl.exe --shutdown
    

WSL と Ubuntu の設定

WSL で使用するメモリ量の制限

  1. C:\Users\<UserName>に .wslconfig という名前のファイルを作成する

  2. .wslconfig ファイルの中身を下記のようにして保存する

    [wsl2]
    memory=2GB
    

    ※設定値は、PC に搭載しているメモリ量と相談して決めてください。筆者は、16GB メモリ搭載の PC で 2GB に設定しています。また、WSL のメモリが足りないようであれば定義増やすようにしてください。

  3. WSL を再起動する

    wsl.exe --shutdown
    

Ubuntu の日本語設定

  1. 下記のコマンドを Ubuntu のシェルで実行する

    sudo apt install language-pack-ja
    sudo update-locale LANG=ja_JP.UTF-8
    
  2. Ubuntu シェルの再起動する

Ubuntu のシェル起動時、ホームディレクトリをカレントディレクトリとして開始するようにする

  1. Windwos Terminal の設定を開く

  2. 左メニューのプロファイルから Ubuntu-20.04 を選ぶ

  3. 開始ディレクトリを下記のように設定する

    /home/<UserName>
    

(参考)Ubuntu のホームディレクトリをエクスプローラーで開く方法

  1. 下記コマンドを Ubuntu のシェルで実行

    cd ~
    explorer.exe .
    

Docker のインストール

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository を参考に実施する。

必要なパッケージのインストール

  1. 下記コマンドを Ubuntu のシェル(以下同じ)で実行する

    sudo apt-get update
    sudo apt-get install \
      ca-certificates \
      curl \
      gnupg \
      lsb-release
    

Docker の GPG Key を追加

  1. 下記コマンドを実行する

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

Docker のパッケージリポジトリを登録

  1. 下記コマンドを実行して stable リポジトリを登録する(ほかのリポジトリを登録する場合は、公式のガイドを参照)

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    

Docker Engine のインストール

  1. 下記コマンドを実行する
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    

Docker の設定

Docker の自動起動の設定

  1. 下記コマンドを実行して、自分が使っている OS ユーザーを docker グループに追加する

    sudo usermod -aG docker $USER
    
  2. 下記コマンドを実行して、visudo で vim を使うように変更する

    sudo update-alternatives --config editor
    
    (選択画面が表示されるのでvim.basicを選択)
    
  3. 下記コマンドを実行して docker 起動時にパスワードを聞かれないようにする

    sudo visudo
    
    (最終行に下記を追加)
    %docker ALL=(ALL)  NOPASSWD: /usr/sbin/service docker start
    
  4. 下記コマンド実行して、Docker が自動起動するようにする

    vi ~/.bashrc
    
    (最終行に下記を追加)
    # Start dockerd
    if [ $(service docker status | awk '{print $4}') = "not" ]; then
      sudo service docker start > /dev/null
    fi
    
  5. 新しい Ubuntu のシェルを起動する

  6. 下記コマンド実行して Docker デーモンが起動していることを確認する

    service docker status
    
    (下記のようなメッセージが表示される)
     * Docker is running
    

Docker の動作確認

  1. 下記コマンドを実行して、Docker が動作することを確認する

    docker run hello-world
    
    (下記のようなメッセージが表示される)
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
    ...
    

VSCode を起動して WSL 環境に接続する

VSCode を起動する

  1. 下記コマンドを Ubuntu のシェルから実行して、VSCode を起動する(Windows 上で VSCode が起動する)

    code .
    
  2. (自動で Remote VSCode Extentions が導入されて WSL 環境に接続される)

  3. VSCode でターミナル開いて Ubuntu のシェルが起動することを確認する

Python の環境構築

pyenv のインストール

https://github.com/pyenv/pyenv を参考にインストールと設定を行う。

  1. Ubuntu シェルで下記コマンド実行して、必要なパッケージを導入する

    sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
    
  2. 下記コマンドを実行して pyenv をインストールする

    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    cd ~/.pyenv && src/configure && make -C src
    
  3. 下記のコマンドを実行して .profile と.bashrc を設定する

    sed -Ei -e '/^([^#]|$)/ {a \
    export PYENV_ROOT="$HOME/.pyenv"
    a \
    export PATH="$PYENV_ROOT/bin:$PATH"
    a \
    ' -e ':a' -e '$!{n;ba};}' ~/.profile
    echo 'eval "$(pyenv init --path)"' >>~/.profile
    
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    
  4. 新しい Ubuntu シェルを起動する(VSCode で実施している場合は、VSCode を再起動させる)

pyenv の動作確認

  1. 下記のコマンドを実行する

    pyenv --version
    
    (下記のようにバージョンが表示されることを確認する)
    pyenv 2.2.3-4-g971397dd
    

python ランタイムの導入

プロジェクト用ディレクトリの作成

  1. 下記コマンドのように実行して、任意の場所にプロジェクト用ディレクトリを作成して移動する

    mkdir -p work/<ProjectName>
    cd work/<ProjectName>
    

Python をインストールする

  1. 下記コマンドを実行して、インストール可能な Python のバージョンを確認する

    pyenv install --list
    
  2. 下記コマンドを実行して、任意のバージョンの Python をインストール、プロジェクト用ディレクトリ内で利用できるようにする

    pyenv install 3.9.4
    pyenv local 3.9.4
    pyenv rehash
    

    ※ Ubuntu 内で共通で使えるようにする場合は、 pyenv global 3.9.4 の様に実行する

  3. 下記コマンドを実行し、Python のバージョンが表示されることを確認する

    python --version
    
    (下記のようにバージョンが表示されることを確認する)
    Python 3.9.4
    

参考

https://qiita.com/ohtsuka1317/items/617a865b8a9d4fb67989

Discussion