๐ก ๋ณธ ๋ฌธ์๋ 'Slicon M1 Mac์์ Lima๋ก Docker Desktop ๋์ฒด ํ๊ธฐ' ํฌ์คํ ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ด๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Lima ์๊ฐ
๊ฐ๋จํ Lima ์ ๋ํด ์๊ฐํ์๋ฉด Linux VM ๋ฅผ Mac ํ๊ฒฝ์ ๋ง๋ค์ด์ฃผ๋ ์คํ์์ค์ด๋ฉฐ, ์๋์ฐ์ WSL (Windows Subsystem for Linux) ๊ณผ ์ ์ฌํ ๋ฉด์ด ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ธฐ๋ณธ์ ์ผ๋ก lima๋ containerd๋ฅผ ์คํํ์ฌ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์ปจํ ์ด๋ ์์ฑ, ์์, ์ค์ง, ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์ ์ฅ, ๋ง์ดํธ ๊ตฌ์ฑ, ๋คํธ์ํน ๋ฑ์ ์ญํ ์ ํฉ๋๋ค.
2. Lima ์ฌ์ฉํ๊ธฐ
2.1. Lima ์ค์น
% โ brew install lima docker docker-compose
2.2. Lima ์์: VM ์์ฑ ๋ฐ ์ญ์
limactl ๋ช ๋ น์ผ๋ก lima VM์ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์๋์ ๋ช ๋ น์ผ๋ก ๊ธฐ๋ณธ VM(Ubuntu ์ด๋ฏธ์ง, nerdctl์ ๋ค์ด)์ ๋ง๋ค ์ ์์ต๋๋ค.
% limactl start
? Creating an instance "default" [Use arrows to move, type to filter]
> Proceed with the current configuration
Open an editor to review or modify the current configuration
Choose another example (docker, podman, archlinux, fedora, ...)
Exit
์ดํ ์์ฑํ "default" VM instance๋ฅผ ๋ค์์ ๋ช ๋ น์ผ๋ก ์ญ์ ํ ์ ์์ต๋๋ค.
% limactl stop default # default ์ธ์คํด์ค ์ค์ง
% limactl remove default # default ์ธ์คํด์ค ์ญ์
2.3. Lima ์ค์ : docker ์ฌ์ฉ
1) ๊ธฐ๋ณธ docker ์ค์ ํ์ผ
์๊น ์ค์นํ VM ์ธ์คํด์ค๋ ์๋ฌด ๊ฒ๋ ์ค์นํ์ง ์์ ์ํ์ด๋ฏ๋ก Lima repository์์ ์์ ๋ก ์ ๊ณตํ๋ docker yaml ์ค์ ์ํ์ ๋ฐ์์ ์ธ์คํด์ค๋ฅผ ์์ฑํด๋ด ์๋ค.
% curl -o docker.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
% limactl start docker.yaml
? Creating an instance "default" Proceed with the current configuration
INFO[0001] Attempting to download the image arch=aarch64 digest="sha256:b47f8be40b5f91c37874817c3324a72cea1982a5fdad031d9b648c9623c3b4e2" location="https://cloud-images.ubuntu.com/releases/22.04/release-20230518/ubuntu-22.04-server-cloudimg-arm64.img"
INFO[0001] Using cache "/Users/choiseongjun/Library/Caches/lima/download/by-url-sha256/2dd0439437354b40b9e07d4b3e1a56650b0bf163a0634ac092d17fcbc76329ea/data"
INFO[0002] [hostagent] Starting QEMU (hint: to watch the boot progress, see "/Users/choiseongjun/.lima/default/serial.log")
INFO[0002] SSH Local Port: 60022
...
VM ์ธ์คํด์ค๊ฐ ์์ฑ๋ ํ 'lima'๋ก ํด๋น ์ธ์คํด์ค์ ์ ์ํ์ฌ docker๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
choiseongjun@choeseongjun-ui-MacBookPro Downloads% lima
choiseongjun@lima-default:/Users/choiseongjun/Downloads$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2) ๊ธฐ๋ณธ docker-rootful ์ค์ ํ์ผ: ๊ธฐ๋ณธ sudo ๊ถํ
% curl -o docker-rootful.yaml https://raw.githubusercontent.com/DrawingProcess/docker-compose/master/lima_docker/docker-rootful.yaml
% limactl start docker-rootful.yaml
2.4. ~/.ssh/config ์ค์ ํ๊ธฐ
limactl show-ssh ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ง์ ํ vmd ์ ssh config ์ค์ ์ ์๋์ ๊ฐ์ด ๊ฐ์ ธ์ฌ ์ ์๋ค.
% limactl show-ssh --format=config default
ํด๋น ๋ด์ฉ์ ~/.ssh/config ์ ์ค์ ํด์ฃผ๋ฉด ๊ฐํธํ๊ฒ ssh ์ ์์ด ๊ฐ๋ฅํด์ง๋ค.
% limactl show-ssh --format=config default >> ~/.ssh/config
2.5. Mac ์์ VM ๋์ปค ์ด์ฉํ๊ธฐ
Mac ์์ VM ๋์ปค ์ด์ฉํ๊ธฐ ์ํด์๋ ssh๋ก ํด๋น ์ธ์คํด์ค์ ์ ์ํ๊ฑฐ๋, DOCKER_HOST๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
% ssh lima-default # ~/.ssh/config ์์ ์ค์ ํ hostname
๋๋
% export DOCKER_HOST=ssh://lima-default:60006
3. Trouble Shooting
1) docker-compose up ์ค๋ฅ
๋ค์๊ณผ ๊ฐ์ docker-compose ์์ registry ์ ์ ๊ทผ์ด ์๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ docker-compose.yaml ์ ๊ธฐ์ ๋ ์ด๋ฏธ์ง๋ฅผ docker pull ๋ฐ์ ๋ค์์ ๋ค์ ์๋ํ๋ฉด ๋ฉ๋๋ค.
2) docker-compose ์ฌ์ฉ์ mount ์ค์ ๋์์ read-only ์ค๋ฅ
limactl๋ก ์ด๊ธฐ ์ค์ ํ ๋ ์ฌ์ฉํ ํ์ผ์ ~/.lima/<file_name>/lima.yaml์ ์์นํฉ๋๋ค. ์ฌ๊ธฐ์ ์ด๊ธฐ ์ค์ ์ ํ๋๋ ํ ๋ฆฌ(~)๊ฐ 'writable: false'๋ก ์ค์ ๋์ด ์๋๋ฐ, ์ด๋ฅผ 'writable: true'๋ก ์์ ํด์ค๋๋ค.
% nano ~/.lima/docker/lima.yaml
...
# ~/.lima/default/lima.yaml ์์ ๋ง์ดํธ ๋ถ๋ถ์ ํ์ธํด๋ณด๊ณ ์๋์ ๊ฐ์ด ๋ฐ๊พผ๋ค
mounts:
- location: "~"
writable: true
- location: "/tmp/lima"
writable: true
3) mount ์ค๋ฅ, lima v.0.8.0
-v ๋ช ๋ น์ ์ธ๋ ๋ง์ดํธ ํ๊ณ ์ ํ๋ ์์ค์ ์์น๊ฐ ~/.lima//lima.yaml ํ์ผ์์ ์ค์ ํ mounts ์์น์ ๋ด๋ถ ํด๋์ฌ์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ด ์ค์ ์ '~/' ๋๋ '/tmp/lima' ๋ด๋ถ์ฌ์ผ ํฉ๋๋ค. ๊ธฐ๋ณธ docker.yaml์ ์ฌ์ฉํ ๊ฒฝ์ฐ, /tmp/lima/vol ๊ณผ ๊ฐ์ ํ์ ๋๋ ํ ๋ฆฌ๋ ์๋ฉ๋๋ค.
% docker run -it --name test -v /tmp/lima:/code/mnt -d test-app:2021122202
์ฐธ๊ณ
- [Blog] Slicon M1 Mac์์ Lima๋ก Docker Desktop ๋์ฒด ํ๊ธฐ: https://breezymind.com/slicon-m1-mac-lima-docker-desktop-alternative/
- [Reddis] Replacing Docker Desktop with Lima on Mac OS: https://www.reddit.com/r/docker/comments/sihgoy/replacing_docker_desktop_with_lima_on_mac_os/
- [Blog] Replacing Docker Desktop with Lima on Mac OS: https://naomiaro.hashnode.dev/replacing-docker-desktop-with-lima-on-mac-os
- [Github] lima docker.yaml: https://github.com/lima-vm/lima/blob/master/examples/docker.yaml