LoginSignup
2

More than 1 year has passed since last update.

multipass + docker on Mac

Last updated at Posted at 2022-01-08

Mac でのDocker環境構築

いよいよ DockerDesktopの猶予期限がくるので、移行しました。
下記どちらでコマンドをうっているのか分かりづらいので セクションタイトルに Macで実行する場合は "on Mac"、 仮想環境のUbuntuで実行する場合は "on Ubuntu"と入れる

multipass (ubuntu の仮想起動環境)インストール on Mac

https://multipass.run/
1. 上記から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)

image.png

上記で実行するとvscode ポートタブに移動すると port forward設定が自動で追加しれてくれています!(便利!!かゆいところにてがとどいているさすがMicrosoft)
image.png

MacのBrowserで localhost:20001 にアクセスするとちゃんと開いて確認できました。

image.png

これで無事 DockerDesktopを卒業できました。
今後また container CI/CDで利用することになったら再度Dockerファミリにお世話になろうと思います。
しばらくは AzureのContainerRepositoryを利用する予定なのでmultipassで十分かなと思いました。

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
2