0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

m1 macでPodmanを使ってamd64コンテナを動かしてみる

Last updated at Posted at 2023-02-27

はじめに

本ドキュメントは、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部分をクリックします。

run_amd64_on_m1mac_01.png

DIGEST全体が表示されているのでコピーします。

run_amd64_on_m1mac_02.png

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/Getting Started

podman Installation Instructions

Mosquittoの動かし方では、podmanでamd64のeclipse-mosquittoを動かしています。

0
2
0

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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?