3
3

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.

macOS の podman で docker-compose する

Last updated at Posted at 2022-06-18

概要

podman 4.1 系から docker-compose v2 がサポートされたとのことで、それを簡単に検証した

※ podman 4.7 系から公式にサブコマンドとして podman compose が入りました

以下のことを確認する

  • nginx を起動して画面を見るというシンプルな確認をする
  • podman + docker-compose で macOS で編集したものを、そのまま表示してみる
  • podman machine は 4系から QEMU の volume マウントをサポートしているので、 docker-compose の container から macOS のディレクトリをマウントしてみる
  • podman は、4.1系から docker-compose v2 がサポートされたので動かしてみる

検証した環境

$ sw_vers
ProductName:	macOS
ProductVersion:	12.4
BuildVersion:	21F79

$ podman version
Client:       Podman Engine
Version:      4.1.1
API Version:  4.1.1
Go Version:   go1.18.3
Built:        Wed Jun 15 05:12:46 2022
OS/Arch:      darwin/amd64

Server:       Podman Engine
Version:      4.1.0
API Version:  4.1.0
Go Version:   go1.18
Built:        Sat May  7 01:15:54 2022
OS/Arch:      linux/amd64

docker-compose も事前に入れておく

brew でインストールできる docker-compose は 2系になってるのでそれを使う

$ docker-compose -v
Docker Compose version 2.6.0

$ ls -al /usr/local/bin/docker-compose
lrwxr-xr-x 1 tigerroll 49  6 18 09:58 /usr/local/bin/docker-compose -> ../Cellar/docker-compose/2.6.0/bin/docker-compose

podman の導入

導入方法は以前書いた以下記事を参照ください :pray:

検証用ディレクトリの構成

※ ファイルについては後述する

$ tree $(pwd)
/path/to/macOS
├── compose.yaml
└── html
    └── index.html

1 directory, 3 files

podman + docker-compose のディレクトリマウント構成

  • macOS のディレクトリを QEMU インスタンスに Shared ディレクトリとしてマウントさせる
    macOS --> /mnt/qemu
  • QEMU のディレクトリを container 側がマウントして macOS のディレクトリを参照する
    /mnt/qemu --> /usr/share/nginx/html
  • ディレクトリのマウントの関係は以下の様になる
    macOS --> /mnt/qemu --> /usr/share/nginx/html

QEMU インスタンスをセットアップする

ディレクトリをマウントするために -v オプションを使う
/Host側のパス:/Guest側のパス で表現するで、適宜使いやすい様に試して頂ければ良いだろう

$ cd /path/to/macOS
$ podman machine init --cpus 2 --memory 8192 -v .:/mnt/qemu

※ 4.1.1 から DOCKR_HOST のセットは不要になった模様

API forwarding listening on: /var/run/docker.sock
Docker API clients default to this address. You do not need to set DOCKER_HOST.

rootrul モードに切り替えるコマンド

コンテナ に 80 や 443 を割り当てたい場合は rootful モードに切り替えをすれば割当可能

rootful モードに切り替える場合のみ利用する
$ podman machine set --rootful
podman machine の起動
$ podman machine start
Starting machine "podman-machine-default"
Waiting for VM ...
Mounting volume... .:/mnt/qemu

This machine is currently configured in rootless mode. If your containers
require root permissions (e.g. ports < 1024), or if you run into compatibility
issues with non-podman clients, you can switch using the following command:

	podman machine set --rootful

API forwarding listening on: /var/run/docker.sock
Docker API clients default to this address. You do not need to set DOCKER_HOST.

Machine "podman-machine-default" started successfully

docker-compose で container を起動する

docker-compose の設定ファイルを用意する

  • nginx のコンテンツが編集できることを確認するので、volume をバインドマウントする
  • hostPort[8080] を LISTEN させて、転送先の containerPort[80] を指定する
  • docker-compose v2 からファイル名は compose.yaml となる
$ cat <<'EOF'> compose.yaml
services:
  web:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - type: bind
        source: /mnt/qemu/html
        target: /usr/share/nginx/html
EOF

docker-compose でコンテナを起動する

[注意]
  • 環境変数に DOCKER_BUILDKIT=1 がセットされていると Build が失敗する( 0 をセットすることで回避可能)
  • 未設定であれば影響はない
$ docker-compose up -d
[+] Running 1/8
 ⠿ web Pulled                                        15.3s
   ⠇ 75a963e94de0 Download complete                   6.8s
   ⠇ 42c077c10790 Download complete                   6.8s
   ⠇ 915cc9bd79c2 Download complete                   6.8s
   ⠇ 62c70f376f6a Download complete                   6.8s
   ⠇ db24d06d5af4 Download complete                   6.8s
   ⠇ 7b1fab684d70 Download complete                   6.8s
   ⠋ 0e901e68141f Download complete                   0.0s
[+] Running 2/2
 ⠿ Network kind_default  Cr...                        0.0s
 ⠿ Container kind-web-1  St...                        0.6s

hostPort で指定した Port が LISTEN 状態になっていることが確認できる

$ lsof -n -P -iTCP -sTCP:LISTEN
gvproxy  28718 tigeroll   42u  IPv6 0x96d0cbd1403ddf67      0t0  TCP *:8080 (LISTEN)

以上で docker-compose の起動は完了

nginx で読み込む index.html を準備する

cat <<'EOF'> html/index.html
<h1>Hello Podman bind mount contents !</h1>
EOF

nginx にブラウザで接続してみる

上手く表示させることができた :star2:

image.png

podman + docker-compose で macOS のディレクトリをマウントした感想

  • QEMU のディレクトリマウントが必要だが、macOS 側で編集したものを表示出来た :smile:
  • rootful モードなら 80, 443 で LISTEN 可能なのでブラウザからのポート指定は不要になり便利 :rocket:
  • docker-compose が普通に使えるので、macOS で podman + docker-compose を使ったアプリケーション開発はできると思います :thumbsup:
  • 脱 Docker :whale: を求めてる人には、とても相性が良いと思う
3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?