x86でkubernetes維持はできるようになったけど、arm64でもやってみたい。
docker使える環境をM4macの中で作り、ビルドできるようにできたらarm64のkubernetesに持っていける。
今回はdocker環境でのビルドが目的なので、手っ取り早くrancher desktop使ってみる。
自分はlinuxのコマンドライン利用がdockerの入り口やったけど、普通はwindowsでwsl動かしといてその中でlinux稼働させて覚えてくんやろな。
前にdocker desktopが有償になって苦労してはったと思うけど、rancherに引っ越してる人も多いんかもな。
作成イメージ
⭐️印の箇所を作る。全体図デカなったな。
<----------- M4 mac -------dev-> <--------------------- Windows11 pro VMware ----------------stg--> <-------- Google cloud ---prd-->
+-macmini sequoia--------------+ +-local ubuntu24 linux -------+ +-local ubuntu24 linux--------+ +-GCE ubuntu24 linux----------+
| +-utm----------------------+ | | +-microk8s-------+ +-vmdk-+ | | +-docker---------+ +-vmdk-+ | | +-docker---------+ +--pv--+ |
| | +-sequoia-------------+ | | | | +-Pod-------+ | | data | | | | +-container-+ | | data | | | | +-container-+ | | data | |
| | | vscode/cyberduck | | | | | | Django | | | d1 | | | | | Django | | | d1 | | | | | Django | | | d1 | |
| | | office/brew/rdp | | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +-----------+ | +------+ |
| | +---------------------+ | | | | +-Pod-------+ | | | | | | +-container-+ | | | | | | +-container-+ | | | |
| | +-ubuntu24 x86 (準備中)+ | | | | | mariadb | | | d2 | | | | | mariadb | | | d2 | | | | | mariadb | | | d2 | |
| | | ctr microk8s | | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +-----------+ | +------+ |
| | |+-container-+ | | | | | +-Pod-------+ | | | | | | +-container-+ | | | | | | +-container-+ | | | |
| | ||kubernetes | | | | <- | | | xrdp-ubu24| | | d3 | | <- | | | xrdp-ubu24| | | d3 | | <- | | | xrdp-ubu24| | | d3 | |
| | |+-----------+ | | | <- | | +-----------+ | +------+ | <- | | +-----------+ | +------+ | <- | | +-----------+ | +------+ |
| | |+-container-+ +/data+| | | <- | | | | <- | | | | <- | | +-container-+ | |
| | ||Django | | d1 || | | | | | | | | | | | | | gitlab | | |
| | |+-----------+ +-----+| | | | | | | | | | | | | +-----------+ | |
| | |+-container-+ | || | | | | +-Pod-------+ | +------+ | | | +-container-+ | +------+ | | | +-container-+ | +------+ |
| | ||mariadb | | d2 || | | | | | https | | | d4 | | | | | https | | | d4 | | | | | https | | | d4 | |
| | |+-----------+ +-----+| | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +-----------+ | +------+ |
| | |+-container-+ | || | | | +----------------+ | | +----------------+ | | +----------------+ |
| | ||xrdp-ubu24 | | d3 || | | +-----------------------------+ +-----------------------------+ +-----------------------------+
| | |+-----------+ +-----+| | | |||
| | |+-container-+ +-----+| | | +--smb share -----------------+ |||
| | ||https | | d4 || | | | windows smb share | |||
| | |+-----------+ +-----+| | | +-----------------------------+ |||
| | +---------------------+ | | |||
| +--------------------------+ | |||
| | |||
| +-rancher desktop ⭐️------+ | |||
| | docker on lima | | |||
| | +-container-+ +------+ | | |||
| | | Django | | d1 | | | |||
| | +-----------+ +------+ | | |||
| | +-container-+ | | | | <-----------------------------------------------+||
| | | mariadb | | d2 | | | <------------------------------------------------+|
| | +-----------+ +------+ | | <-------------------------------------------------+
| | +-container-+ | | | |
| | | xrdp-ubu24| | d3 | | |
| | +-----------+ +------+ | |
| | +-container-+ +------+ | |
| | | https | | d4 | | |
| | +-----------+ +------+ | |
| +--------------------------+ |
| |
| +-music----------+ |
| | 8400(37GB) | |
| +----------------+ |
+------------------------------+
rancher desktopセットアップ
入れ方はこのへんで確認。
作者さんありがとう。
brewで一発インストールできるんやな。
app store使わんでええのは助かるし、バージョンアップもときどき手動でやってるから最新のを維持できそうや。
nari@nariMac-mini ~ % brew install --cask rancher
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################# 100.0%
==> Downloading https://github.com/rancher-sandbox/rancher-desktop/releases/download/v1.16.0/Rancher
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/30
############################################################################################# 100.0%
==> Installing Cask rancher
==> Moving App 'Rancher Desktop.app' to '/Applications/Rancher Desktop.app'
🍺 rancher was successfully installed!
nari@nariMac-mini ~ %
githubにもあって最新のタグ見たら1.17.0-hackweekってのがあった。
brewでインストールできたのは1.16やったけど、そのうち上がってくやろから放置。
rancherの設定
GUIで設定した箇所。
自動更新はbrew使うからいらんかもな。チェックは入れとくか。
そういえばここからkubernetes使う手もあるんやけど、dockerと一緒に使えへんかったはずなのと、今はdocker利用が目的やからこのまま行く。
kubernetesのオプションは指定せん。
ハードウェアはそれなりに。ビルドするだけやし少なめでええ。
qemuは処理遅い印象が強いから、appleのvirtualization使いたいやん。
appleのvirtualization使うときはvirtofs使ってたはず。
ちなみにrancherの中の仮想マシンが起動するのは30秒ほど待つ。ウィンドウの下のほうで頑張ってる様子が見える。
なんでかわからんけど、たまーにこの起動が失敗することあるんやけど、macos再起動したら回避できる。
dockerの確認
コマンドライン使えるんかな。
やってみたら、dockerのバージョンがubuntu24ホストのより少し古めやった。
nari@nariMac-mini ~ % which docker
/Users/nari/.rd/bin/docker ⭐️隠しフォルダでなくてもええような気がするけど、こんなところに入っとんのやな
nari@nariMac-mini ~ %
nari@nariMac-mini ~ % docker version
Client:
Version: 27.2.1-rd ⭐️ubuntu版は27.4.1で、こっちはちょい古いんかな
API version: 1.45 (downgraded from 1.47) ⭐️ここがubuntu版と同じやったら同等って思ってええんかな
Go version: go1.22.7
Git commit: cc0ee3e
Built: Tue Sep 10 15:41:09 2024 ⭐️ubuntu版はDec 17ってあるんやけどな
OS/Arch: darwin/arm64
Context: rancher-desktop
Server: ⭐️ちゃんと仮想マシン側を認識してるってことやんな
Engine:
Version: 26.1.5
API version: 1.45 (minimum version 1.24)
Go version: go1.22.5
Git commit: 411e817ddf710ff8e08fa193da80cb78af708191
Built: Fri Jul 26 17:51:06 2024
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: v1.7.17
GitCommit: 3a4de459a68952ffb703bbe7f2290861a75b6b67
runc:
Version: 1.1.14
GitCommit: 2c9f5602f0ba3d9da1c2596322dfc4e156844890
docker-init:
Version: 0.19.0
GitCommit:
nari@nariMac-mini ~ % docker compose version
Docker Compose version v2.29.5 ⭐️ubuntu版は2.32.1で、ちょい古い
nari@nariMac-mini ~ %
念のため、hello-worldやってみよか。
nari@nariMac-mini ~ % docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
478afc919002: Pull complete
Digest: sha256:5b3cc85e16e3058003c13b7821318369dad01dac3dbb877aac3c28182255c724
Status: Downloaded newer image for hello-world:latest
Hello from Docker! ⭐️できとるやん!!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(arm64v8)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
nari@nariMac-mini ~ %
はい初期確認終わり。イメージの一覧にもhello-world増えてた。
dockerのフォルダ作る
自分の作業フォルダにdocker
っていうのを作ってubuntu24で維持してるデータを持ってくる。
compose.ymlには相対パス書くから、実際の置き場はどこでもええのよね。
docker
├── compose-current.yml ⭐️普段使うcompose.ymlの指示内容、compose.ymlへコピーして使う
├── compose.yml ⭐️本体
├── dockerStartM4.sh ⭐️compose.ymlへのコピーと、django環境の色合い変更してからコンテナ起動する
├── dockerStopM4.sh ⭐️コンテナ停止する
└── nariDockerDat
├── sv_django-ssl_certs ⭐️TSLリバプロが使う永続化領域、djangoをhttpsで提供する
├── cl_ubun24 ⭐️xrdpコンテナが使う永続化領域
│ ├── _old
│ ├── download
│ │ ├── 03_医療費封筒記入.xls
│ │ ├── Screenshot_2025-01-12_05-55-33.png
│ │ ├── container-xrdp
│ │ │ ├── build
│ │ │ ├── build-all.sh
│ │ │ ├── build-rm.sh
│ │ │ ├── build.md
│ │ │ └── ubuntu-xfce
│ │ │ ├── Dockerfile
│ │ │ └── Dockerfile-gvis.txt ⭐️arm64の指定でビルドするように書き換えた
│ │ ├── container-xrdp.tar.gz
│ │ ├── gvis-memo2023.tar.gz
│ │ ├── hogehoge.txt
│ │ ├── memo.txt
├── sv_django-uwsgi-nginx ⭐️djangoの永続化領域
│ ├── 20220614-oldDockerfile
│ ├── 20231206-oldDockerfile
│ ├── Dockerfile.txt ⭐️ベースになるpythonの指定、フォント指定インストール、requirementsからpip3モジュール入れさせてuwsgi使ったnginxの利用指定
│ ├── README.md
│ ├── README.md.org
│ ├── app
│ │ ├── gvisDjango3 ⭐️ステータス表示
│ │ ├── gvisWebApp ⭐️アプリケーション本体
│ │ ├── manage.py
│ │ ├── media
│ │ ├── requirements.txt
│ │ ├── templates
│ │ └── website
│ ├── kubeCopy.sh
│ ├── nginx-app.conf
│ ├── requirements.txt
│ ├── supervisor-app.conf
│ ├── uwsgi.ini
│ └── uwsgi_params
├── sv_django-uwsgi-nginx.tar.gz
├── sv_mariadb11 ⭐️mariadbの永続化領域
│ ├── env_sv_mariadb11.txt
│ └── sv_mariadb11_Dockerfile.txt
└── sv_mariadb11conf
├── gvis.cnf ⭐️mariadbのパラメータ指定を永続化領域通じて渡してる
└── nari
├── fullback
│ ├── 0_diskUsage.txt
│ ├── 1_fullBackup.sh
│ ├── 1_fullBackup.sh.res.txt
│ ├── 2_fullRecover.sh ⭐️本番用データ戻し用スクリプト
│ ├── 2_fullRecover.sh.res.txt
│ ├── 3_nariDB_DjangoBackup.sh
│ ├── 3_nariDB_DjangoBackup.sh.res.txt
│ ├── 4_nariDB_DjangoRecover.sh ⭐️テスト用データ戻し用スクリプト
│ ├── 4_nariDB_DjangoRecover.sh.res.txt
│ ├── FullBackup_nariDB_1st.sql ⭐️本番用データ
│ └── FullBackup_nariDB_Django.sql ⭐️テスト用データ
├── mysqltuner.tar.gz
└── res.txt
nari@nariMac-mini docker %
mariadbのビルドとコンテナ起動やってみる
すぐできる。
nari@nariMac-mini docker % docker compose build sv_mariadb1104
[+] Building 19.2s (7/7) FINISHED docker:rancher-desktop
=> [sv_mariadb1104 internal] load build definition from sv_mariadb11_Dockerfile.txt 0.0s
=> => transferring dockerfile: 205B 0.0s
=> [sv_mariadb1104 internal] load metadata for docker.io/library/mariadb:11.4-noble 15.3s
=> [sv_mariadb1104 auth] library/mariadb:pull token for registry-1.docker.io 0.0s
=> [sv_mariadb1104 internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [sv_mariadb1104 1/1] FROM docker.io/library/mariadb:11.4-noble@sha256:a3c3ecdba222d33017b 3.9s
=> => resolve docker.io/library/mariadb:11.4-noble@sha256:a3c3ecdba222d33017b1128ae2a5930a3d 0.0s
=> => sha256:a3c3ecdba222d33017b1128ae2a5930a3d6b8b21cd6d5e534886e75a523612e 5.13kB / 5.13kB 0.0s
=> => sha256:c06e8915e1a0b315a67878dd083c8a142410c0cdb9c3777c1de703d0346257d 2.48kB / 2.48kB 0.0s
=> => sha256:24c84580ff96a3409d356d4f96126f7cb3bd92f1a919c33e49b5949810cb941 5.13MB / 5.13MB 0.9s
=> => sha256:bf030113af3c738be9c5f2cc140da3b301d65448c164bfa2e600c5e1a1c4237 8.69kB / 8.69kB 0.0s
=> => sha256:8bb55f0677778c3027fcc4253dc452bc9c22de989a696391e739fb1cdbbdb 28.89MB / 28.89MB 0.7s
=> => sha256:8410d55eb77c23c37f6fdd5db9bda499708e77470f675d188095eaa222cbca7 1.34kB / 1.34kB 0.4s
=> => sha256:bd1171ed6095eca2323de7c240f17ee7276b6de114716a8e06db8d48472abd3d 116B / 116B 0.6s
=> => sha256:aa9608086e97196b771d31cc4520b16e700e39eaa2a49b31adef26d8c53de792 333B / 333B 0.8s
=> => sha256:0ac99f801551e28c6f97ad4829d231acac96f277dcf37666a146491e7e55f 86.07MB / 86.07MB 2.0s
=> => extracting sha256:8bb55f0677778c3027fcc4253dc452bc9c22de989a696391e739fb1cdbbdb4c2 1.0s
=> => sha256:62b27cf94d7e81b5a70a4f2b4ae2c225dec8a9ecda454c09530192370d138d6 4.04kB / 4.04kB 1.0s
=> => sha256:c82e90c5ef2c98a3baa3fdd6b1f2d510c9655abe5951d94dc3d573647bbba5a 8.40kB / 8.40kB 1.1s
=> => extracting sha256:8410d55eb77c23c37f6fdd5db9bda499708e77470f675d188095eaa222cbca70 0.0s
=> => extracting sha256:24c84580ff96a3409d356d4f96126f7cb3bd92f1a919c33e49b5949810cb941f 0.2s
=> => extracting sha256:bd1171ed6095eca2323de7c240f17ee7276b6de114716a8e06db8d48472abd3d 0.0s
=> => extracting sha256:aa9608086e97196b771d31cc4520b16e700e39eaa2a49b31adef26d8c53de792 0.0s
=> => extracting sha256:0ac99f801551e28c6f97ad4829d231acac96f277dcf37666a146491e7e55f831 1.9s
=> => extracting sha256:62b27cf94d7e81b5a70a4f2b4ae2c225dec8a9ecda454c09530192370d138d6e 0.0s
=> => extracting sha256:c82e90c5ef2c98a3baa3fdd6b1f2d510c9655abe5951d94dc3d573647bbba5ac 0.0s
=> [sv_mariadb1104] exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:19f90911c48d2e5a1130908d6401464689ffcf893935831778b0fd11b3f381f4 0.0s
=> => naming to docker.io/library/docker-sv_mariadb1104 0.0s
=> [sv_mariadb1104] resolving provenance for metadata file 0.0s
nari@nariMac-mini docker %
ついでにコンテナ起動もいける。
nari@nariMac-mini docker % /Users/nari/.rd/bin/docker compose up sv_mariadb1104
[+] Running 1/0
✔ Container docker-sv_mariadb1104-1 Created 0.0s
Attaching to sv_mariadb1104-1
sv_mariadb1104-1 | 2024-12-30 03:50:38+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.4+maria~ubu2404 started.
sv_mariadb1104-1 | 2024-12-30 03:50:38+09:00 [Warn] [Entrypoint]: /sys/fs/cgroup///memory.pressure not writable, functionality unavailable to MariaDB
sv_mariadb1104-1 | 2024-12-30 03:50:38+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
sv_mariadb1104-1 | 2024-12-30 03:50:38+09:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.4.4+maria~ubu2404 started.
sv_mariadb1104-1 | 2024-12-30 03:50:38+09:00 [Note] [Entrypoint]: MariaDB upgrade not required
sv_mariadb1104-1 | 2024-12-30 3:50:38 0 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
windows側からa5sql使ってmariadbのコンテナに接続してみたらつながる。
当たり前やけど、データはすっからかんやからテーブルはゼロやね。
データ流し込みする
リストアのスクリプトあるので、流し込みしている箇所を手動で使う。
nari@nariMac-mini nari % pwd
/Users/nari/Documents/personal/docker/nariDockerDat/sv_mariadb11conf/nari
nari@nariMac-mini nari % ls -lh
total 5172392
-rwx------ 1 nari staff 1.3G 12 28 10:28 FullBackup_nariDB_1st.sql ⭐️本番用データ
-rwx------ 1 nari staff 1.2G 12 28 10:28 FullBackup_nariDB_Django.sql ⭐️テスト用データ
drwx------ 12 nari staff 384B 12 30 04:06 fullback ⭐️リストアのスクリプト入ってる
-rwx------ 1 nari staff 210K 8 15 2023 mysqltuner.tar.gz
-rwx------ 1 nari staff 7.7K 10 26 2019 res.txt
nari@nariMac-mini nari %
手動でリストアやってみよか。
リストアの核心部分は、こんな感じ。
/usr/bin/mariadb -u root -p${DBPASS} < /etc/mysql/conf.d/nari/FullBackup_nariDB_1st.sql
動かすと1分ぐらいかかる。
nari@nariMac-mini docker % docker compose exec sv_mariadb1104 bash
root@svmariadb1104:/# /bin/sh /etc/mysql/conf.d/nari/fullback/2_fullRecover.sh
root@svmariadb1104:/# /bin/sh /etc/mysql/conf.d/nari/fullback/4_nariDB_DjangoRecover.sh
root@svmariadb1104:/# cat /etc/mysql/conf.d/nari/fullback/2_fullRecover.sh.res.txt
----fullRecover Start ------ 2024-12-30_04:19:57_
----fullRecover Finished----- 2024-12-30_04:20:12_
root@svmariadb1104:/# cat /etc/mysql/conf.d/nari/fullback/4_nariDB_DjangoRecover.sh.res.txt
----fullRecover Start ------ 2024-12-30_04:20:24_
----fullRecover Finished----- 2024-12-30_04:20:39_
root@svmariadb1104:/#
流し込んだ結果をwindows側から確認すると、ちゃんと入ってる。
djangoのコンテナビルドしとく
ビルドすると1分ぐらいはかかる。
nari@nariMac-mini docker % docker compose build sv_django
[+] Building 65.4s (22/22) FINISHED docker:rancher-desktop
=> [sv_django internal] load build definition from Dockerfile.txt 0.0s
=> => transferring dockerfile: 2.66kB 0.0s
=> [sv_django internal] load metadata for docker.io/library/python:3.13.0-slim-bookworm 2.8s
=> [sv_django auth] library/python:pull token for registry-1.docker.io 0.0s
=> [sv_django internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [sv_django djangobase 1/15] FROM docker.io/library/python:3.13.0-slim-bookworm@sha256:0d 2.6s
=> => resolve docker.io/library/python:3.13.0-slim-bookworm@sha256:0de818129b26ed8f46fd772f5 0.0s
=> => sha256:ac98cfdb273bf9e7a34bb9745c734d49b1506faa8a5044d29b138548b2c04c7 3.14MB / 3.14MB 0.5s
=> => sha256:d97fee4b636ac6cbeb4f80a1b121f37e1361739a25bd9bb8dc23155c4f59d 12.43MB / 12.43MB 2.2s
=> => sha256:0de818129b26ed8f46fd772f540c80e277b67a28229531a1ba0fdacfaed19bc 9.12kB / 9.12kB 0.0s
=> => sha256:7dc36c36b4fb5a4ba0b3db23fc144c185a1207b1c5f96b7b31a3e43e16bfe73 1.75kB / 1.75kB 0.0s
=> => sha256:5a0d3d0504fad4dfcd79dd018f5399e1d83ffa64b50982111ac2a7ad603f497 5.05kB / 5.05kB 0.0s
=> => sha256:bb3f2b52e6af242cee1bc6c19ce79e05544f8a1d13f5a6c1e828d98d2dbdc 28.06MB / 28.06MB 0.6s
=> => sha256:374482381e72e7a0a812588414eed066eb54201d3e5df1f9b9ee858ad45cfe17 249B / 249B 1.2s
=> => extracting sha256:bb3f2b52e6af242cee1bc6c19ce79e05544f8a1d13f5a6c1e828d98d2dbdc94e 0.9s
=> => extracting sha256:ac98cfdb273bf9e7a34bb9745c734d49b1506faa8a5044d29b138548b2c04c7f 0.1s
=> => extracting sha256:d97fee4b636ac6cbeb4f80a1b121f37e1361739a25bd9bb8dc23155c4f59d7f5 0.4s
=> => extracting sha256:374482381e72e7a0a812588414eed066eb54201d3e5df1f9b9ee858ad45cfe17 0.0s
=> [sv_django internal] load build context 0.1s
=> => transferring context: 15.74MB 0.1s
=> [sv_django djangobase 2/15] RUN DEBIAN_FRONTEND=noninteractive 0.3s
=> [sv_django djangobase 3/15] RUN apt-get update && apt-get install -y tzdata 2.0s
=> [sv_django djangobase 4/15] RUN apt-get update && apt-get upgrade -y && apt-get 26.4s
=> [sv_django djangobase 5/15] RUN pip3 install --upgrade pip 2.1s
=> [sv_django djangobase 6/15] RUN pip3 install -U pip setuptools 1.4s
=> [sv_django djangobase 7/15] RUN apt-get clean && apt-get update && apt-get install -y lo 3.4s
=> [sv_django djangobase 8/15] RUN locale-gen en_US.UTF-8 0.3s
=> [sv_django djangobase 9/15] RUN pip3 install uwsgi 5.6s
=> [sv_django djangobase 10/15] RUN echo "daemon off;" >> /etc/nginx/nginx.conf 0.4s
=> [sv_django djangobase 11/15] COPY nginx-app.conf /etc/nginx/sites-available/default 0.0s
=> [sv_django djangobase 12/15] COPY supervisor-app.conf /etc/supervisor/conf.d/ 0.0s
=> [sv_django djangobase 13/15] COPY app/requirements.txt /code/app/ 0.0s
=> [sv_django djangobase 14/15] RUN pip3 install -r /code/app/requirements.txt 16.7s
=> [sv_django djangobase 15/15] COPY . /code/ 0.0s
=> [sv_django] exporting to image 1.2s
=> => exporting layers 1.2s
=> => writing image sha256:b55671e831305525e9a1acebae44956b8aa97aa9ab9c735f3bd3d05c6ec91a67 0.0s
=> => naming to docker.io/library/sv_django:5 0.0s
=> [sv_django] resolving provenance for metadata file 0.0s
nari@nariMac-mini docker %
xrdpのコンテナ作る
ホンマは作るつもりなかったけど、kubernetesのxrdpコンテナ使いたくなったからやってみた。
ここでやってることをほぼそのままやればええ。
変更するのは、dockerfileに書いてる中にamd64
って指定してる箇所があるんよね。それは素直にarm64
に書き換えて使うだけ。
RUN /usr/bin/sh -c 'echo "deb [arch=arm64] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
ついでにわかったのは、libre officeの中でjre使ってる箇所があるらしくて、open jdkのバージョン21のをそのまま使ったらarm64の場合はjavaの仮想マシンがクラッシュしてコアダンプ吐いてまう。
arm64版のバグっぽいこと書いてたな。
open jdkのバージョン21の1つ前は17で、ちゃんと動くらしい。
コアダンプはアカン。手動でjava --version
とかやっても発生する。
しばらくはダウングレード利用しといて、改善されたらopen jdkのバージョンを21使うように戻したらええ。
sudo apt search openjdk-.*-jdk$
sudo apt install openjdk-17*
sudo update-alternatives --config java
java --version
これでlibre office起動するときにjavaがコアダンプ吐かんくなった。
vscodeもちゃんと動くし、ネットワークの性能もちゃんと維持できてる。
動作ステータス確認
ホンマはarm64のためのビルドだけできたらそれでええんやけど、せっかくやし動作確認してみっか。
ちゃんとarmの表記が見える。よかった、よかった。
よー見たらarmのはubuntuやなくてalpineで動いてるんやな。
djangoのページにログインもできる。
ログインしたら、念のためこのへんの集計が同じ結果になるか確認した。
いつものように1円単位で数字あってた。
どんな仮想マシンが動いてるんか
limaっていう仕組みで動いてるらしい。今はlimaの中でalpineのlinuxが稼働してるみたい。
alpineってdockerfileの中のベースイメージで指定されてるのみたことある。
めっちゃ軽いlinuxやったよな。
nari@narimac-mini docker % rdctl shell
lima-rancher-desktop:/Users/nari/Documents/personal/docker$ cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.20.3
PRETTY_NAME="Alpine Linux v3.20"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
BUILD_ID="v0.2.39.rd4"
VARIANT_ID="rd"
lima-rancher-desktop:/Users/nari/Documents/personal/docker$
プロセスは、自分で作ったコンテナがcontainerdで動いてるのはもちろん、下のほうにdockerのサーバ側が動いてるみたいやな。
crondがあるのはなんやろな。
nari@narimac-mini docker % rdctl shell
lima-rancher-desktop:/Users/nari/Documents/personal/docker$ pstree
init-+-acpid
|-containerd-shim-+-mariadbd---7*[{mariadbd}]
| `-11*[{containerd-shim}]
|-containerd-shim-+-xrdp-+-at-spi-bus-laun-+-dbus-daemon
| | | |-{dconf worker}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-at-spi2-registr-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-2*[dbus-daemon]
| | |-2*[dbus-launch]
| | |-gpg-agent
| | |-gvfs-afc-volume-+-{gdbus}
| | | |-{gmain}
| | | |-{gvfs-afc-volume}
| | | `-{pool-spawner}
| | |-gvfs-goa-volume-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-gvfs-gphoto2-vo-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-gvfs-mtp-volume-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-gvfs-udisks2-vo-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-gvfsd-+-gvfsd-trash-+-{gdbus}
| | | | |-{gmain}
| | | | |-{pool-spawner}
| | | | `-{pool}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-gvfsd
| | |-gvfsd-metadata-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-ibus-daemon-+-ibus-dconf-+-{dconf worker}
| | | | |-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawner}
| | | |-ibus-engine-moz-+-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawner}
| | | |-ibus-engine-sim-+-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawner}
| | | |-ibus-extension--+-{dconf worker}
| | | | |-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawner}
| | | |-ibus-ui-gtk3-+-{dconf worker}
| | | | |-{gdbus}
| | | | |-{gmain}
| | | | |-{ibus-ui-gtk3}
| | | | `-{pool-spawner}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-ibus-portal-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-ibus-x11-+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-tumblerd
| | |-2*[xdg-desktop-por-+-{dconf worker}]
| | | |-{gdbus}]
| | | |-{gmain}]
| | | `-{pool-spawner}]
| | |-xdg-document-po-+-fusermount3
| | | |-4*[{fuse mainloop}]
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-xdg-permission--+-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | |-4*[xfconfd]
| | |-xrdp
| | `-xrdp-sesman---xrdp-sesman-+-Xorg---{InputThread}
| | |-bash-+-ssh-agent
| | | `-xfce4-session-+-Thunar-+-{Thunar}
| | | | |-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawner}
| | | |-xfce4-notifyd-+-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spaw+
| | | |-xfce4-panel-+-panel-10-not+
| | | | |-panel-14-act+
| | | | |-panel-6-syst+
| | | | |-panel-7-scre+
| | | | |-panel-8-puls+
| | | | |-{gdbus}
| | | | |-{gmain}
| | | | |-{pool-spawne+
| | | | `-{xfce4-panel+
| | | |-xfdesktop-+-{gdbus}
| | | | |-{gmain}
| | | | |-{pool-spawner}
| | | | `-{xfdesktop}
| | | |-xfsettingsd-+-{gdbus}
| | | | |-{gmain}
| | | | `-{pool-spawne+
| | | |-xfwm4-+-{gdbus}
| | | | |-{gmain}
| | | | |-{llvmpipe-0}
| | | | |-{llvmpipe-1}
| | | | |-{llvmpipe-2}
| | | | |-{llvmpipe-3}
| | | | |-{pool-spawner}
| | | | |-{xfwm4:disk$0}
| | | | `-5*[{xfwm4}]
| | | |-xiccd-+-{gmain}
| | | | `-{pool-spawner}
| | | |-{gdbus}
| | | |-{gmain}
| | | `-{pool-spawner}
| | `-xrdp-chansrv---{xrdp-chansrv}
| `-11*[{containerd-shim}]
|-containerd-shim-+-supervisord-+-nginx---4*[nginx]
| | `-uwsgi---4*[uwsgi]
| `-11*[{containerd-shim}]
|-containerd-shim-+-s6-svscan-+-s6-supervise---s6-linux-init-s
| | |-s6-supervise---s6-ipcserverd
| | |-2*[s6-supervise]
| | |-s6-supervise---sh-+-inotifywait
| | | `-sh
| | |-s6-supervise---sh---nginx---nginx
| | `-s6-supervise---sh---cron
| `-11*[{containerd-shim}]
|-crond
|-7*[getty]
|-sshd.pam---sshd.pam---sshd.pam---ash---pstree
|-supervise-daemo---lima-guestagent---7*[{lima-guestagent}]
|-supervise-daemo---dockerd-+-containerd---8*[{containerd}]
| |-3*[docker-proxy---6*[{docker-proxy}]]
| |-5*[docker-proxy---7*[{docker-proxy}]]
| |-docker-proxy---5*[{docker-proxy}]
| |-docker-proxy---8*[{docker-proxy}]
| |-2*[log_proxy---2*[{log_proxy}]]
| `-25*[{dockerd}]
|-syslogd
|-udevd
`-2*[udhcpc]
dockerでビルドができるんやったら、どんなマシンでもええし、動きがおかしくなったらリセットしたる。
どこに仮想マシンできとるんかとか、どれぐらい容量食うのかとかは深追いせん。
たぶんこのへんに保管されてるし、容量圧迫発生したら仮想マシン作り直そ。
nari@narimac-mini rancher-desktop % pwd
/Users/nari/Library/Application Support/rancher-desktop
nari@narimac-mini rancher-desktop % sudo du -sch *
4.0K credential-server.json
19G lima
4.0K rd-engine.json
19G total
nari@narimac-mini rancher-desktop %
armで作ったdockerイメージをエクスポートできるか
今回の本丸、やっと挑戦できる。
x86版をベースにして書いておいて使ってみる。
#!/bin/sh
## -------------------------------------------------------------------------
## Script Name : dockerSaveM4.sh
## Created by : T.Naritomi
## on : 2024.12.30
## Updated by :
## on :
## Parameters :
## Return Code : 0=Normal End
## Comments : save -> for MicroK8s
## -------------------------------------------------------------------------
## ---detail----------------------------------------------------------------
GV_IM01=save-mariadb ⭐️ホンマはmariadbのイメージいらんのやけどx86版でやってるから揃えとく
GV_IM02=save-xrdpubu
GV_IM03=save-django
GV_TAG=gvis-saved
GV_SAVEDIR=/Users/nari/Documents/personal/microk8s/nariDockerDat/Dockerimages/ ⭐️dockerイメージはkubernetesのために使うからmicrok8sのフォルダに保管
docker rmi ${GV_IM01}:${GV_TAG}
docker rmi ${GV_IM02}:${GV_TAG}
docker rmi ${GV_IM03}:${GV_TAG}
docker commit `docker ps --format "table {{.Names}}" | grep mariadb` ${GV_IM01}:${GV_TAG}
docker commit `docker ps --format "table {{.Names}}" | grep cl_ubu24gvis` ${GV_IM02}:${GV_TAG}
docker commit `docker ps --format "table {{.Names}}" | grep django` ${GV_IM03}:${GV_TAG}
docker save ${GV_IM01}:${GV_TAG} > ${GV_SAVEDIR}${GV_IM01}.tar
docker save ${GV_IM02}:${GV_TAG} > ${GV_SAVEDIR}${GV_IM02}.tar
docker save ${GV_IM03}:${GV_TAG} > ${GV_SAVEDIR}${GV_IM03}.tar
ls -lh ${GV_SAVEDIR}
exit
動かしたらこんな感じになる。これを今度作るarm64のkubernetes環境作って入れるときに使う。kubernetesもmacminiにあるから.gzで圧縮してへん。
nari@narimac-mini docker % sh ./dockerSaveM4.sh
Untagged: save-mariadb:gvis-saved
Deleted: sha256:adffec77503d32bc4c9cc063a228238c03018e458d98eafe448aa7e121363567
Deleted: sha256:4e24f55dc98e89c9d2be9b39d2ce115f2aab137351acd0fbc2a1447ac69ce781
Untagged: save-xrdpubu:gvis-saved
Deleted: sha256:1e639c3d4adc396a1c3d0fcdf9a71848885f3bc61e562915962252c8a87fe3ed
Deleted: sha256:3391262b39a90ba2958740efd97d39de702d4681481de94aaa179dae7c25a38c
Untagged: save-django:gvis-saved
Deleted: sha256:cd4287dcae4d95b1ed4a4b51e2bd329e7a6d417ffa4b3b85fb2a610c4e342206
Deleted: sha256:fb5a649577bebca860c455a8dafb421e97c3c0ccfdea2a5f64995956f292ee40
sha256:a793e2d1ef4e0c418b7b273119b34a8fd440cdbf48154875de7fd1a24e76bb17
sha256:5db14cb129a9be2dd2c488a02bebd46f37d9b88687f43b9a68dafee384fa42f7
sha256:5975dbe11847288365aeed46c518303e063fc66ec975a01b2f3eea88ed20ae60
total 14549376
-rw-r--r-- 1 nari staff 1.1G 1 12 06:41 save-django.tar
-rw-r--r-- 1 nari staff 420M 1 12 06:40 save-mariadb.tar
-rw-r--r-- 1 nari staff 5.4G 1 12 06:41 save-xrdpubu.tar
nari@narimac-mini docker % docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
save-django gvis-saved 5975dbe11847 About a minute ago 1.15GB ⭐️x86版よりちょっとだけ大きい
save-xrdpubu gvis-saved 5db14cb129a9 About a minute ago 5.71GB ⭐️x86版よりちょっとだけ大きい
save-mariadb gvis-saved a793e2d1ef4e About a minute ago 434MB ⭐️x86版よりちょっとだけ大きい
gvis-ubu24 24gvis 43815c7c7f88 44 minutes ago 5.71GB
ubu 24gvis 6cdaf9699e54 23 hours ago 4.71GB
sv_django 5 b55671e83130 13 days ago 1.13GB
docker-sv_mariadb1104 latest 19f90911c48d 2 months ago 434MB
steveltn/https-portal 1 eb2a9175db4e 3 months ago 313MB
ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy latest 048743c919c1 55 years ago 5.18MB
nari@narimac-mini docker %
x86側のdockerイメージはこんな感じで、サイズがちょっとだけ小さい。
nari@nafslinux-ubu24:/docker/DockerImages$ ls -lh
合計 2.4G
-rw-r--r-- 1 root root 554M 12月 25 11:01 save-django.tar.gz
-rw-r--r-- 1 root root 1.9G 12月 25 11:00 save-xrdpubu.tar.gz
nari@nafslinux-ubu24:/docker/DockerImages$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
save-django gvis-saved c38774901f1a 5 days ago 1.39GB ⭐️arm版よりちょっとだけ小さい
save-xrdpubu gvis-saved 1c58dbaccb0f 5 days ago 5.02GB ⭐️arm版よりちょっとだけ小さい
gvis-ubu24 24gvis fbfcf5461461 5 days ago 5.02GB ⭐️arm版よりちょっとだけ小さい
ubu 24gvis ace2da18efde 5 days ago 4.49GB
sv_django 5 ac608b559dfb 2 months ago 1.13GB
steveltn/https-portal 1 e299987d7d0d 3 months ago 295MB
mariadb 11.4-noble 12cccacf61b3 3 months ago 406MB
docker-sv_jupyter latest 3a01d18f68ba 4 months ago 1.78GB
oracle/database 21.3.0-ee 98e41b2b83f4 6 months ago 7.94GB
nari@nafslinux-ubu24:/docker/DockerImages$
x86版のdockerイメージをarm64のkubernetesに持っていってctrのイメージ置き場にロードすることはできてまうんやけど、podを作った瞬間にクラッシュするのは当然。
恥ずかしながらdocker save
したファイルを間違えてarm64のmicrok8s環境にx86のイメージ持ってって、めっちゃクラッシュさせた。