LoginSignup
7
6

More than 1 year has passed since last update.

Docker on WSL2 without Docker Desktopを構築し、VSCode Remote-Containersで接続する

Last updated at Posted at 2022-01-08

はじめに

Docker Desktopが既に有償化され、猶予期間も2022年1月末までとなっています。
without Docker Desktopな環境を構築してみて、改めてDocker Desktopの素晴らしさを実感しましたので、WindowsでDockerを使う人は基本的にDocker Desktopを使用する事をお勧めします。
有償化対象だけどどうしても支払いが難しい(Docker Desktopが使えない)という方のみ、以下をお読み下さい。

この記事を読んで出来ること

  • Windwos上で、Docker Desktopに頼らずにDockerを使用できる
  • コマンドプロンプト上でdockerコマンドを使用できる
  • Windows上のVSCodeからDockerコンテナに接続できる

この記事を読んでも出来ないこと

  • Dockerサービスの自動起動はしない

頑張れば自動起動もできるらしいですが、私はWindowsを起動する度に手動でDockerサービスを起動させてます。

0.前提条件

  • WSL2でUbuntu 20.04がデフォルトのディストリビューションとして使用できること

コマンドプロンプトでwsl -l -vと打ってもらって、以下のように出力されればOKです。

C:\Users\user> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

STATEはStoppedでも良いですし、Ubuntu-20.04以外のディストリビューションが入っていても構いませんが、VERSIONが2のUbuntuに*が付いているようにして下さい。
この条件を満たしていない方は、以下Microsoft公式ドキュメントを参考に条件を整えて下さい。
https://docs.microsoft.com/ja-jp/windows/wsl/install

  • VSCodeと拡張機能:Remote-WSL, Remote-containersがインストールされていること

Dockerを実行するだけなら無くてもいいのですが、本稿の価値は半減します。

  • プロキシ環境下にいる場合、Ubuntu 20.04のプロキシ設定がされていること

bashの環境変数(~/.bashrc)とaptの設定(/etc/apt/apt.conf.d/xxxx)あたりが必要です。
以下の記事などを参考に、必要な設定をして下さい。
https://qiita.com/sachioksg/items/289e40d69382b1d09811

1.Dockerのインストール

WSL内での作業です。
基本的には公式の手順(リポジトリを使う場合)に沿って行います。
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/engine/install/linux-postinstall/

リポジトリのセットアップ

$ sudo apt-get update
$ sudo apt-get install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ 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パッケージのインストール

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

dockerサービスの起動(※ここだけ公式手順にない)

※dockerサービスの起動は環境構築時だけでなく、Windowsを起動する毎に行う必要があります。

$ sudo service docker start

root以外のユーザがdockerコマンドを使えるようにする

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

上記実行後にWSLからログアウト、ログインし直します。

プロキシ環境下の方はプロキシ設定

/etc/default/dockerで設定できるようです。
設定後にdockerサービスの再起動が必要です。

2.Docker Composeのインストール

不要な方はこの章を読み飛ばして下さい。
WSL内での作業です。
Docker Composeも公式の手順でインストールします。
https://docs.docker.com/compose/install/

v2も出ていますが、2022年1月現在、v1.29.2がstableだそうですので、それをインストールします。

$ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o ~/docker-compose
$ sudo cp ~/docker-compose /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-compose

3.Windows上でdockerコマンドを使えるようにする

Windows上で以下のdocker.cmdというバッチファイルを作成し、パスを通します(Windowsの環境変数Pathに追加)。

docker.cmd
@echo off
wsl -- docker %*

同様に、以下のdocker-compose.cmdというバッチファイルを作成し、パスを通します。

docker-compose.cmd
@echo off
wsl -- docker-compose %*

これで環境構築は完了です。
コマンドプロンプトでdocker run hello-worldを実行し、DockerからHelloしてもらえたら成功です。

C:\Users\user> docker run hello-world

4.VSCodeのRemote-containersを使ってみる

Docker on WSL2で実行中のコンテナに、Windows上のVSCodeから接続します。
なんでもいいのでコンテナを走らせておいて下さい。

Remote-WSLなVSCodeを開く

WSL内で"code"コマンドをオプション無しで実行するか、コマンドプロンプトで"wsl code"を実行するか、(通常の)VSCodeのCommand Paletteから"Remote-WSL: New WSL Window"を実行します。
新たなVSCodeウィンドウが開いて、左下に"><"ではなく">< WSL: Ubuntu-20.04"と表示されていればOKです。

Remote-containersなVSCodeを開く

上記Remote-WSLなVSCodeのCommand Paletteから"Remote-containers: Attach to Running Container..."を選択し、所望のコンテナを選択します。
さらに別のVSCodeウィンドウが開いて、左下に">< Container xxxx"と表示されていれば成功です。

補足

プロキシ設定について

WSLの設定とDockerサービスの設定は前述の通りですが、Dockerコンテナの設定は別途必要になります。(イメージのビルド時含む)
環境変数の設定はWSLの~/.docker/config.jsonで行えるようです。
https://qiita.com/dkoide/items/ca1f4549dc426eaf3735
aptの設定(/etc/apt/apt.conf.d/xxxx)も環境変数を参照する感じでやると良いと思います。

7
6
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
7
6