WSL2上にFESSの環境を構築しようと思い立った。そこで本記事ではまずUbuntu20.04(WSL2)に対してDockerの環境を構築する備忘録を記す。
環境構築する上でいくつかの記事を参照した。参照し、環境構築を進める上でWSL特有のエラーに直面した。本記事ではそれらの対処法についても触れている。いろいろとエラーメッセージを見た上で対処したのだが、それらエラーメッセージに関しては混乱を避けるために本記事では触れていない。詳細なメモは個人のGitHubに残した。
(Docker Desktopが有償化されたので、ある程度需要があるかな? 2022/02/11)
WSL上にFESSを構築する記事はこちら
https://qiita.com/YUKI-SOKENDAI/items/bfcbf5f264cc28588d5b
目次
開発環境
- Windows10 home
- Ubuntu 20.04 on WSL2
インストール
インストール手順
- インストール前の準備
- genieのインストール
- Dockerのインストール
- Dockerの起動と動作確認
インストール前の準備
https経由でapt-getするための事前準備。
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
Dockerをapt-getでインストールするためにインストールリストを追加している?。
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt-get update
sudo apt-cache policy docker-ce
genieのインストール
Dockerをインストールする前にgenieをインストールする。
これはDockerをWSL2上で起動する際に重要となる。Dockerを起動する際はsystemctl(sytemd)がPID1にセットされている必要があるようだ。しかし、デフォルトではPID1にセットされておらず、起動時にエラーとなる。そこでgenieを先にインストールしとく。
genieをmakeする際に.NET関連のコマンド・パッケージが必要となる。そのため、環境構築は以下のような流れで進めていく。
- 依存しているパッケージ(.NETなど)のインストール
- genieのインストール & make install
依存しているパッケージ(.NETなど)のインストール
apt-getをしても.NETのインストールが出来ない(恐らく、インストールのリストに.NETがない)。
apt-getのインストールリストに.NET関連を追加する。
## install daemonize
sudo apt-get install -y daemonize
## install .NET package
sudo apt-get install -y gpg
wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/ubuntu/20.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
.NETのリストが追加されたのでapt-getでinstallする。
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-runtime-6.0
sudo apt-get install -y dotnet-sdk-6.0
sudo apt-get install -y dotnet-sdk-5.0
genieのインストール
genieをgithubからcloneする。
sudo apt-get install -y make
git clone https://github.com/arkane-systems/genie.git
clone後にgenieディレクトリへ移動し、makeする。
makeのオプションコマンドはMAKEFILEに書かれているので、中身を見ると良い。
install-localというオプションがあるので、makeで実行。
インストールにミスったら"make clear"してから、再度"make install-local"すれば良い。
cd genie
sudo make install-local
sudo apt-get install -y systemd-container
genieのmake installが完了したら、以下のコマンドを実行。
ターミナル立ち上げる度に実行する必要があるため.bashrcに追加しとくと良い。
genie -s
systemdがPID1になっているか確認する。
ps aux
PID1にsystemdというのがセットされていればOK。デフォルトでは/initがセットされている。
Dockerインストール
sudo apt-get install -y docker-ce
Dockerの起動と動作確認
sudo systemctl status docker
セットアップ用シェルスクリプト
以上の行程を一連のシェルスクリプトにまとめました。
## 01 : docker installation for WSL ubuntu 20.04 LTS
## written by Y.Abe (2022/02/07)
# update first
echo -e "\n\n*** Update system before installing docker"
sudo apt update
echo -e "\n\n*** Docker installing prepareation"
# preparation for apt-get to install via https
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# add GPG key of docker repository(public)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# add docker repository to APT source
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
# update package data base (from added repository via Docker repository??)
sudo apt-get update
# check installed from Docker repository
apt-cache policy docker-ce
# Finally: docker install
echo -e "\n\n*** Start Docker installation"
sudo apt-get install -y docker-ce
echo -e "*** End Docker installation process"
# check booting docker
echo -e "\n\n*** Check booting docker"
sudo systemctl status docker
#-> maybe faild booting docker
# setup for well booting docker on WSL
## install daemonize
sudo apt-get install -y daemonize
## install .NET package
sudo apt-get install -y gpg
wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/ubuntu/20.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-runtime-6.0
sudo apt-get install -y dotnet-sdk-6.0
sudo apt-get install -y dotnet-sdk-5.0
# install genie
sudo apt-get install -y make
git clone https://github.com/arkane-systems/genie.git
cd genie
sudo make install-local
sudo apt-get install -y systemd-container # Ubuntu18.04 no need this command
esho "*** Finish setup genie\n\n"
# asign systemd to PID1
echo -e "***\n\nBefore switch PID1"
ps aux
genie -s
echo "genie -s" >> ~/.bashrc
echo -e "***\n\nAfter switch PID1"
ps aux
# check booting docker again
echo -e "\n\ncheck docker booting again"
sudo systemctl status docker
#-> maybe succeeded booting docker
おわりに
本記事ではWSL2上のUbuntu 20.04にDockerのインストール、環境構築を行う備忘録を残した。Dockerはバージョン20.10.12を使用した。
本記事にて示した方法に不備、間違いがあればじゃんじゃんコメントください。
参考記事
- Ubuntu20.04 に Docker を導入する
- Ubuntu 20.04へのDockerのインストールおよび使用方法
- 【WSL2】systemctlが動かない問題をきちんと解決する
- Ubuntu に .NET SDK または .NET ランタイムをインストールする
- APT のトラブルシューティング(.NETのパッケージがaptで見つからない)