Mac でのDocker環境構築
いよいよ DockerDesktopの猶予期限がくるので、移行しました。
下記どちらでコマンドをうっているのか分かりづらいので セクションタイトルに Macで実行する場合は "on Mac"、 仮想環境のUbuntuで実行する場合は "on Ubuntu"と入れる
multipass (ubuntu の仮想起動環境)インストール on Mac
- 上記からmac用binaryをDownload
2. installer を起動
multipass でubuntu:latest(20.04) 起動 on Mac
あとからmemory, disk sizeを変更するのがとても大変なので最初から必要な分指定する。目的としてkubernetesのローカルデバッグをkindを使用して動かすので以下のようにmemory 10G, disk 20G, cpu core 4 程度は最低必要。
% multipass launch --name ryujidev -m 10G -d 20G -c 4
Launched: ryujidev
% multipass ls
Name State IPv4 Image
ryujidev Running 192.168.64.3 Ubuntu 20.04 LTS
% multipass info ryujidev
Name: ryujidev
State: Running
IPv4: 192.168.64.3
172.17.0.1
172.18.0.1
Release: Ubuntu 20.04.3 LTS
Image hash: 8fbc4e8c6e33 (Ubuntu 20.04 LTS)
Load: 0.98 0.89 1.09
Disk usage: 12.3G out of 19.2G
Memory usage: 2.3G out of 9.7G
Mounts: --
あとから cpu, memoryを変更する方法
最初に指定していたほうがよいのですが、kubernetesでpodを起動しようとして、
podのstatusがpendingのままで進まないということがよくあります。
kubectrl describe pods をするとCPUやメモリが足りていないというのがわかります。
$kubectl describe pods -n istio-system
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 27m (x1 over 28m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
Warning FailedScheduling 15m (x1 over 16m) default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
Warning FailedScheduling 14h (x365 over 20h) default-scheduler 0/1 nodes are available: 1 Insufficient cpu.
こんなときはしょうがないので以下の手順でmultipassが割り当てる cpu, memoryを変更できます
https://github.com/canonical/multipass/issues/1158#issuecomment-548073024
# stop multipassd
sudo launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist
# edit /var/root/Library/Application Support/multipassd/multipassd-vm-instances.json
# you'll need sudo for that
# start multipassd again
sudo launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist
以下が編集したあとのmultipassd-vm-instances.jsonの例です
{
"ryujidev": {
"deleted": false,
"disk_space": "21474836480",
"extra_interfaces": [
],
"mac_addr": "52:54:00:e1:9d:18",
"mem_size": "10737418240",
"metadata": {
},
"mounts": [
],
"num_cores": 4,
"ssh_username": "ubuntu",
"state": 4
}
}
参考:あとからDiskSizeを変更する方法
下記に説明があるので、やってみたのですが 2回ともmultipassでstartし直そうとすると
disk imageが壊れてしまったようでした。 深くおっていないですがdisk sizeは変えなくて良いように最初に多めに割り当てておくのが無難です。
ubuntu に local directory をmount, login on Mac
mountするかどうかは任意
(base) ~ % multipass mount ~/git ryujidev:/home/ubuntu/git
(base) ~ % multipass shell ryujidev
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-92-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Sat Jan 8 09:05:44 JST 2022
System load: 0.13
Usage of /: 28.0% of 4.67GB
Memory usage: 2%
Swap usage: 0%
Processes: 119
Users logged in: 0
IPv4 address for enp0s2: 192.168.64.3
IPv6 address for enp0s2: fd76:3e59:29b1:1bdf:4449:33ff:fe91:8c20
1 update can be applied immediately.
To see these additional updates run: apt list --upgradable
Last login: Sat Jan 8 09:04:25 2022 from 192.168.64.1
ubuntu@ryujidev:~$ ls
git snap
docker Install on Ubuntu
https://docs.docker.com/engine/install/ubuntu/
上記を直接参照したほうがよいですが何度も再実行するときのメモ用に下記にコマンドを抜き出しておきます。
sudo apt-get remove docker docker-engine docker.io ubuntu@ryujidev:~/git$ 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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
sudo なしでdocker実行するためのGroup追加 on Ubuntu
sudo gpasswd -a $USER docker
# logout & login, then enabled.
Go package and make install on Ubuntu
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
sudo apt install make
remote debbug on Mac
まず下記のように multipass 内で生成されたssh 公開鍵をコピーしておく
sudo install -m 600 -o $USER -g $(id -g) /var/root/Library/Application\ Support/multipassd/ssh-keys/id_rsa ~/.ssh/multipass.id_rsa
~/.ssh/config に下記の設定を追記しておく(HostNameはmultipassで起動したubuntuのLocalIPに合わせる)
Host ryujidev
User ubuntu
HostName 192.168.64.3
IdentityFile ~/.ssh/multipass.id_rsa
これでmultipass shell だけでなく、 ssh ryujidev でubuntuにアクセスできるようになりました。
あとは下記を参考に vscodeのremote debug で ubuntuに接続し、src code本体は、仮想環境ubuntuにgitで取得して、UIは mac 上の vscodeで編集できます。
https://code.visualstudio.com/docs/remote/ssh#_connect-to-a-remote-host
container のポートフォワード(WebServerのデバッグ等)
https://code.visualstudio.com/docs/remote/ssh#_forwarding-a-port-creating-ssh-tunnel
docker, k8s の動作確認
以下のように上記vscode remote debugで 仮想 ubuntuにつなぎ、vscodeのターミナルで、kind, k8s をたちあげてistioctl で kialiを開いてみます。(istioctlについての参考:https://qiita.com/kozayupapa/items/dfbabe1bd6eb40f4ddf9)
上記で実行するとvscode ポートタブに移動すると port forward設定が自動で追加しれてくれています!(便利!!かゆいところにてがとどいているさすがMicrosoft)
MacのBrowserで localhost:20001 にアクセスするとちゃんと開いて確認できました。
これで無事 DockerDesktopを卒業できました。
今後また container CI/CDで利用することになったら再度Dockerファミリにお世話になろうと思います。
しばらくは AzureのContainerRepositoryを利用する予定なのでmultipassで十分かなと思いました。