はじめに
本ドキュメントは、m1 macにてPodmanを使いMongoDB amd64コンテナを動作させてみた記録です。MAC環境では、QEMUベースの仮想マシンをPodman machineとして利用しています。同じような仕組みとして、Rancher Desktop、Limaがあげられます。このQEMUのテクノロジーを使うことにより、m1でamd64コンテナイメージを実行することが可能となります。
前提条件
- インターネットアクセス環境 (数GB程度のダウンロードが走ります)
作業環境
- Apple MacBook Pro 13, M1, 2020
- 16GB Memory
- macOS Ventura
準備
Podmanのインストールとセットアップ
homebrewを使ってpodmanをインストールします。次にpodman machineを4 vCPU、8 GB memory構成でセットアップします。デフォルトでは1 vCPU、2GB memoryで構成されます。--cpus
、--memory
オプションは、必要に応じてご指定下さい。
podman machine init
を実行すると数GBあるfedora-coreosの仮想マシンをダウンロードします。インターネット接続環境に注意が必要です。
brew install podman
podman machine init --cpus 4 --memory 8192
podman machine start
バージョン確認。
podman -v
podman version 4.4.1
podman machineが停止状態だとpodmanの多くのコマンドが下記のようにエラーとなります。起動状態でご利用下さい。
podman ps -a
Error: failed to connect: dial tcp [::1]:54669: connect: connection refused
podman machineの停止方法は podman machine stop
です。
podman machineの設定を確認します。
podman machine list
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default* qemu About an hour ago Currently running 4 8.59GB 107.4GB
podman machine info
Host:
Arch: arm64
CurrentMachine: podman-machine-default
DefaultMachine: podman-machine-default
EventsDir: /var/folders/m3/8c8dm0td3qj7yn_xj16x4x940000gn/T/podman-run--1/podman
MachineConfigDir: /Users/username/.config/containers/podman/machine/qemu
MachineImageDir: /Users/username/.local/share/containers/podman/machine/qemu
MachineState: Running
NumberOfMachines: 1
OS: darwin
VMType: qemu
Version:
APIVersion: 4.4.1
Built: 1675882998
BuiltTime: Thu Feb 9 04:03:18 2023
GitCommit: 34e8f3933242f2e566bbbbf343cf69b7d506c1cf
GoVersion: go1.19.5
Os: darwin
OsArch: darwin/arm64
Version: 4.4.1
以上でインストールと設定は完了です。
動作するcpu archの確認
alpine arm64イメージを実行
m1 macはarmベースのイメージが動作することを確認します。uname -a
を実行するとaarch64 Linux
であることが確認できました。
podman run --rm docker.io/library/alpine:3.17.2 uname -a
Trying to pull docker.io/library/alpine:3.17.2...
Getting image source signatures
Copying blob sha256:af6eaf76a39c2d3e7e0b8a0420486e3df33c4027d696c076a99a3d0ac09026af
Copying config sha256:d74e625d91152966d38fe8a62c60daadb96d4b94c1a366de01fab5f334806239
Writing manifest to image destination
Storing signatures
Linux 9d77a17f8d28 6.1.11-200.fc37.aarch64 #1 SMP PREEMPT_DYNAMIC Thu Feb 9 19:41:51 UTC 2023 aarch64 Linux
podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/alpine 3.17.2 d74e625d9115 12 days ago 7.75 MB
alpine amd64イメージを実行
上と同じalpine:3.17.2
ですが、Digestを指定しamd64イメージにてuname -a
を実行してみます。Docker hubにてDigestを確認します。まずOS/ARCHを確認しamd64のDigest部分をクリックします。
DIGEST全体が表示されているのでコピーします。
TAGに続けて@とDigestを貼り付けて実行します。WARNING(警告: イメージのプラットフォームが違う)という趣旨のメッセージが表示されますがuname -a
コマンドは適切に処理されx86_64 Linux
のコンテナイメージが動作していることが確認できます。
podman run --rm alpine:3.17.2@sha256:e2e16842c9b54d985bf1ef9242a313f36b856181f188de21313820e177002501 uname -a
Resolved "alpine" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/alpine@sha256:e2e16842c9b54d985bf1ef9242a313f36b856181f188de21313820e177002501...
Getting image source signatures
Copying blob sha256:63b65145d645c1250c391b2d16ebe53b3747c295ca8ba2fcb6b0cf064a4dc21c
Copying config sha256:b2aa39c304c27b96c1fef0c06bee651ac9241d49c4fe34381cab8453f9a89c7d
Writing manifest to image destination
Storing signatures
WARNING: image platform (linux/amd64) does not match the expected platform (linux/arm64)
Linux 1de721790093 6.1.11-200.fc37.aarch64 #1 SMP PREEMPT_DYNAMIC Thu Feb 9 19:41:51 UTC 2023 x86_64 Linux
イメージのリストを表示すると新しいイメージが確認できます。TAGは重複しているので<none>
となります。
podman image list
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/alpine <none> b2aa39c304c2 12 days ago 7.34 MB
docker.io/library/alpine 3.17.2 d74e625d9115 12 days ago 7.75 MB
TAGがnoneの方をinspectするとこのようになります。Digestはrunの際に指定した内容となっていますし、Architectureがamd64となっていることも確認できます。
podman inspect b2aa39c304c2
[
{
"Id": "b2aa39c304c27b96c1fef0c06bee651ac9241d49c4fe34381cab8453f9a89c7d",
"Digest": "sha256:e2e16842c9b54d985bf1ef9242a313f36b856181f188de21313820e177002501",
"RepoTags": [],
"RepoDigests": [
"docker.io/library/alpine@sha256:e2e16842c9b54d985bf1ef9242a313f36b856181f188de21313820e177002501"
],
"Parent": "",
"Comment": "",
"Created": "2023-02-11T04:46:42.558343068Z",
"Config": {
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh"
]
},
"Version": "20.10.12",
"Author": "",
"Architecture": "amd64",
"Os": "linux",
"Size": 7340512,
"VirtualSize": 7340512,
"GraphDriver": {
"Name": "overlay",
"Data": {
"UpperDir": "/var/home/core/.local/share/containers/storage/overlay/7cd52847ad775a5ddc4b58326cf884beee34544296402c6292ed76474c686d39/diff",
"WorkDir": "/var/home/core/.local/share/containers/storage/overlay/7cd52847ad775a5ddc4b58326cf884beee34544296402c6292ed76474c686d39/work"
}
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:7cd52847ad775a5ddc4b58326cf884beee34544296402c6292ed76474c686d39"
]
},
"Labels": null,
"Annotations": {},
"ManifestType": "application/vnd.docker.distribution.manifest.v2+json",
"User": "",
"History": [
{
"created": "2023-02-11T04:46:42.449083344Z",
"created_by": "/bin/sh -c #(nop) ADD file:40887ab7c06977737e63c215c9bd297c0c74de8d12d16ebdf1c3d40ac392f62d in / "
},
{
"created": "2023-02-11T04:46:42.558343068Z",
"created_by": "/bin/sh -c #(nop) CMD [\"/bin/sh\"]",
"empty_layer": true
}
],
"NamesHistory": [
"docker.io/library/alpine@sha256:e2e16842c9b54d985bf1ef9242a313f36b856181f188de21313820e177002501"
]
}
]
MongoDBのamd64イメージを実行
イメージを選択
MongoDBのオフィシャルだとarm64もあるようなのでbitnami/mongodbを使います。
bitnami/mongodb:4.2.5を実行
podman run \
-d --restart=unless-stopped \
-e MONGODB_USERNAME=user1 \
-e MONGODB_PASSWORD=password \
-e MONGODB_DATABASE=master1 \
--name mongo docker.io/bitnami/mongodb:4.2.5
WARNING: image platform (linux/amd64) does not match the expected platform (linux/arm64)
c90431e2273ebade50761d885dc03dd37237135194f415660cbb19428d36c451
動作状況を確認
Container IDを確認します。
podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c90431e2273e docker.io/bitnami/mongodb:4.2.5 /opt/bitnami/scri... 2 hours ago Up 2 hours mongo
コンテナに入り、mongoコマンドを使って動作していることを確認します。
podman exec -it c90431e2273e bash
1001@c90431e2273e:/$ mongo -u user1 -p password --authenticationDatabase master1
MongoDB shell version v4.2.5
connecting to: mongodb://127.0.0.1:27017/?authSource=master1&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b52f5f23-9415-4412-b757-04e6d56f9d76") }
MongoDB server version: 4.2.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
2023-02-23T06:52:32.698+0000 I STORAGE [main] In File::open(), ::open for '//.mongorc.js' failed with Permission denied
> use master1
switched to db master1
> show collections
> exit
bye
1001@c90431e2273e:/$
参考情報
podman Installation Instructions
Mosquittoの動かし方では、podmanでamd64のeclipse-mosquittoを動かしています。