はじめに
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
に追加)。
@echo off
wsl -- docker %*
同様に、以下の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)も環境変数を参照する感じでやると良いと思います。