DockerDesktop が有償になったので、WSL2 の Ubuntu に Docker をインストールして動かすようにしてみました、
環境
- Windows 10
- Ubuntu 20.04
WSL2 および Ubuntu はインストール済みの前提です。
以下のページに書いてあるので、まだの場合は参考にしてください。
プロキシ設定
環境に応じてプロキシの設定を行っておきます。
.bashrc
をエディタで開き、最後に以下を追記します。
export http_proxy=http://example.com:8080
export https_proxy=http://example.com:8080
export no_proxy=任意のIPアドレス
apt のプロキシ設定
/etc/apt/apt.conf
を作成して以下のように記述します。
Acquire::http::proxy "http://example.com:8080/";
Acquire::https::proxy "https://example.com:8080/";
再起動します。
$ exit
Docker のインストール
公式ドキュメントに沿ってインストールします。
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install apt-transport-https 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
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose
ユーザーを docker グループに追加
$ sudo gpasswd -a $(whoami) docker
これで docker コマンド実行時に sudo が不要になります。
docker のプロキシ設定
/etc/default/docker
をエディタで開いて以下を追加します。
export http_proxy=http://example.com:8080
export https_proxy=http://example.com:8080
また、~/.docker/config.json
に以下を記述します。
{
"proxies": {
"default": {
"httpProxy": "http://example.com:8080",
"httpsProxy": "http://example.com:8080"
}
}
}
再起動します。
$ exit
docker デーモンの起動
$ sudo service docker start
動作確認
$ docker info
$ docker run hello-world
すると、私の場合以下のエラーが表示されました。
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
docker デーモンが起動しているか確認します。
$ sudo service docker status
* Docker is not running
原因がわからず悩んでいたところ、以下の記事を見つけました。
私の場合、既に DockerDesktop はアンインストールしていました。
もともとは DockerDesktop と WSL2 を使って動かしていたのですが、今回 DockerDesktop なしで動くようにしようとしているところで、
DockerDesktop だけでなく WSL2 も一度アンインストールして最初からやり直すと上手く行きました。
docker デーモンの自動起動
このままでは WSL を起動する度に docker デーモンを手動で起動する必要がありますが、以下のページに自動起動させる方法があります。
- https://zenn.dev/taiga533/articles/11f1b21ef4a5ff
- https://qiita.com/ko-zi/items/949d358163bbbad5a91e
- https://zukucode.com/2021/11/wsl2-docker-startup.html
まずは sudo service docker start
をパスワードなしで実行できるように設定します。
$ sudo visudo
以下を追記します。
ユーザー名 ALL=(ALL:ALL) NOPASSWD: /usr/sbin/service docker start
あとは .bashrc に以下を追記します。
$ nano .bashrc
if [ $(service docker status | awk '{print $4}') = "not" ]; then
sudo service docker start > /dev/null
fi
Windows と WSL2 のポートフォワーディングの設定
WSL2 上の Docker コンテナに外部からアクセスしたい場合、Windows と WSL2 のポートフォワーディングの設定が必要です。
詳細は以下の記事を参照してください。