mac+Rancherを使ったdocker環境

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セットアップ

入れ方はこのへんで確認。
作者さんありがとう。

Docker Desktop有償化対策の答えはRancher Desktopだった - Qiita
皆さん、お金払いましたか?Docker Desktopが有償化されて数日が経ちましたが、皆様どうお過ごしでしょうか。焦って有償プランを契約して配布したのもいい思い出です。Rancher Des…

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ってのがあった。

GitHub - rancher-sandbox/rancher-desktop: Container Management and Kubernetes on the Desktop
Container Management and Kubernetes on the Desktop - rancher-sandbox/rancher-desktop

brewでインストールできたのは1.16やったけど、そのうち上がってくやろから放置。

rancherの設定

GUIで設定した箇所。

macm4-rancher

自動更新はbrew使うからいらんかもな。チェックは入れとくか。

macm4-rancher

そういえばここからkubernetes使う手もあるんやけど、dockerと一緒に使えへんかったはずなのと、今はdocker利用が目的やからこのまま行く。

macm4-rancher

kubernetesのオプションは指定せん。

macm4-rancher

ハードウェアはそれなりに。ビルドするだけやし少なめでええ。

macm4-rancher

qemuは処理遅い印象が強いから、appleのvirtualization使いたいやん。

macm4-rancher

appleのvirtualization使うときはvirtofs使ってたはず。

macm4-rancher

ちなみにrancherの中の仮想マシンが起動するのは30秒ほど待つ。ウィンドウの下のほうで頑張ってる様子が見える。

macm4-rancher

なんでかわからんけど、たまーにこの起動が失敗することあるんやけど、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増えてた。

macm4-rancher

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のコンテナに接続してみたらつながる。

macm4-rancher

当たり前やけど、データはすっからかんやからテーブルはゼロやね。

データ流し込みする

リストアのスクリプトあるので、流し込みしている箇所を手動で使う。

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側から確認すると、ちゃんと入ってる。

macm4-rancher

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版のバグっぽいこと書いてたな。

Reddit - Dive into anything

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もちゃんと動くし、ネットワークの性能もちゃんと維持できてる。

macm4-rancher

動作ステータス確認

ホンマはarm64のためのビルドだけできたらそれでええんやけど、せっかくやし動作確認してみっか。

ちゃんとarmの表記が見える。よかった、よかった。

よー見たらarmのはubuntuやなくてalpineで動いてるんやな。

macm4-rancher

djangoのページにログインもできる。

macm4-rancher

ログインしたら、念のためこのへんの集計が同じ結果になるか確認した。

いつものように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のイメージ持ってって、めっちゃクラッシュさせた。

タイトルとURLをコピーしました