1. システムとオフィスの融合
  2. media
  3. マイクロサービス Docker
  4. バージョン1.0が公開されたPodman DesktopをWindows/Macで試してみた

QESブログ

バージョン1.0が公開されたPodman DesktopをWindows/Macで試してみた

  • LINEで送る
  • このエントリーをはてなブックマークに追加
モデル駆動型アプリ概説



こんにちは。システムソリューション営業本部の吾妻です。
今回は久しぶりに、コンテナを利用したアプリケーション開発についての記事です。


以前は、コンテナといえばDockerということで、Docker CLIやDocker Desktopといった製品が、コンテナを利用したアプリケーション開発で利用されていました。ある時、Docker Desktopを商用利用する際には有償版のサブスクリプションが必要というように規約が変更されたことによって、アプリケーション開発のために常時ガッツリ使うわけではないけれども、たまにコンテナを起動してノートPCの環境を汚さずにツールを使いたい、といった使い方がしにくくなってしまいました。
Docker CLIを残してコマンドを叩けば、GUIなんかなくても問題ないじゃないかという意見もあるかもしれませんが、メンバーに展開する際のハードルが結構上がってしまう気がしており、できればGUIで済ませたいという思いがあります。

そんなDocker Desktopから移行する先として注目されているPodman Desktopという製品があります。
先月めでたくバージョン1.0がリリースされ、さっそくWindowsとMacにそれぞれインストールして操作感やUIを試してみたので、簡単にご紹介していきたいと思います。
Power Appsモデル駆動型アプリの連載記事を書いていたら月が変わってしまいました…。




Podman / Podman Desktopとは

Podmanとは、Red Hatを中心に、オープンソースソフトウェアとして開発されているコンテナ、ポッド、イメージを管理するためのツールです。
Dockerに依存することなく独立してコンテナを扱うことができるようにするために、コンテナやポッドを管理するためのPodman、コンテナをビルドするためのbuildah、コンテナイメージを転送・検証するためのskopeo、コンテナを実行するためのruncとcrun、といったコマンドラインツールが用意されており、互いに連携して動作します。



Dockerと比較したときのPodmanのメリットとして、公式サイトでは以下が挙げられています。

  • 速くて軽い
    …デーモンを使用していないために、リソースの利用量が少なく、リアクティブな(素早く反応する)UIになっている

  • 安全
    …非root権限でコンテナエンジンを実行することを前提としている

  • オープン
    …オープンソースで開発されていて、Linux以外にmacOS、Windowsもサポートしており、ベンダーロックインを防ぐことができる

  • 互換性
    …Dockerを含むOCI準拠のコンテナと互換性があり、Docker Composeも利用できる

WindowsとmacOSで同じ操作性で利用でき、Linuxについても、主要な開発元であるRed Hatが提供しているRed Hat Enterprise Linux / CentOSだけでなく、Arch Linux、Debian、Ubuntu、Gentooといった様々なディストリビューションで利用できることは大きなメリットだと感じます。



次に、Podman Desktopとは、DockerやPodmanのようなコンテナ管理用のCUIツールに対して、GUIで指示を出せるようにするためのラッパーソフトウェアです。
Podman Desktopと同様に、GUIを前提にしたDocker Desktopからの移行先としては、以下のようなツールから選択することもできます。

  • Docker Engine
    …Linux向けに提供される、Docker社のオープンソースソフトウェア
    …DockerデーモンとDockerクライアントが含まれるが、CUIしか用意されていないので、GUIで操作したい場合にはVS CodeのDev Containers拡張機能などを別途インストールする必要がある

  • Rancher Desktop
    …SUSEが中心となって開発されているオープンソースソフトウェアのコンテナ管理ツール

  • Container Desktop
    …GitHub上で開発が進められているWindows向けのオープンソースソフトウェア
    …WSL上で実行したDocker CEと連携させることで、タスクトレイに常駐したアプリケーションからDockerコンテナを操作することができる

用途やOSに応じて、適したツールを探してみてください。



インストール手順

WindowsとmacOSのそれぞれでPodmanをインストールするための手順をご紹介します。

①Podman Desktopの公式サイトからインストーラーをダウンロードして実行するか、以下のコマンドを実行してCUIでインストールします。
 Windows   macOS 
 winget install -e --id RedHat.Podman-Desktop 
 brew install podman-desktop 

②PodmanでDocker Composeを利用するために、Podman-Composeをインストールします。Pythonパッケージとして公開されているので、以下のコマンドを実行してインストールします。
 Windows   macOS 
 py -m pip install podman-compose 
 pip3 install podman-compose 

※インストールされたEXEファイルの格納先がPath環境変数に含まれていない場合は追加しておきます
 (例は、マシンレベルではなく、現在のユーザーのみのPath環境変数を設定するものです)
 Windows 
 $paths = [Environment]::GetEnvironmentVariable("Path", "User") 
 $paths += ";C:\Python\Scripts\"
[Environment]::SetEnvironmentVariable("Path", $paths, "User") 

③インストールが完了するとGet started画面が開くので、右下のボタンをクリックして進みます。
 共通 
 podman-mac01.png 

Initialize and startをクリックして進みます。
 共通 
 podman-mac02.png 

⑤WindowsではPodmanが一緒にインストールされなかったり、macOSでは管理者権限が必要な機能を利用するためのヘルパーツールを別途インストールする必要があったりするので、Podman Desktopのインストーラーではインストールされていないソフトウェアをインストールしていきます。
 Windows   macOS 
 podman-win06.png   podman-mac03.png 
 podman-win07.png   podman-mac04.png 
    podman-mac05.png 
   podman-mac06.png 

⑥後述の手順で、コンテナを実行し始めたタイミングでファイアウォールの警告が表示された場合には、通信を許可する必要があります。
 Windows   macOS 
 podman-win09.png   podman-mac07.png 



コンテナを実行してみる

今回は、以下のコマンドを利用してコンテナを起動して、動作確認を行うことにします。



①まず、nginxのコンテナを実行して、Webページを公開してみます。ブラウザからlocalhostのポート8080にアクセスすると、おなじみのnginxの初期画面が表示されるかと思います。
 コマンド   結果 
 podman run -d -p 8080:80 --name web nginx 
 podman-mac08.png 



②次に、異なるポートを使用してサービスを公開してみます。ここでは、RStudio Serverのコンテナを実行して、R言語を使用してデータ分析するための環境を用意してみます。ブラウザからlocalhostのポート8787にアクセスすると、RStudioの3つのペインが表示されるかと思います。
 コマンド   結果 
 podman run -d -p 8787:8787 rockerjp/tidyverse 
 podman-mac08.png 



③続いて、Docker Compose(Podman Compose)のコマンドを試してみるために、Pythonで記述したFlaskアプリケーションを用意し、コンテナの中で実行させてみます。


◆コードの例(クリックすると展開します)

FlaskアプリケーションをPythonコンテナ内で実行するためのソースコードの例を示します。


 Dockerfile 
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
 docker-compose.yml 
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
 app.py 
import time
import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')

def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
 requirements.txt 
flask
redis



ブラウザからlocalhostのポート8000にアクセスしてみます。redisのコンテナも同時に実行しているので、ブラウザからアクセスするたびにカウンターの値が増えていくことが確認できます。
 コマンド   結果 
 cd src/flask/ 
podman-compose up -d
 podman-mac08.png 
  
 podman-mac12.png 



④最後に、起動したコンテナの状況をPodman DesktopのGUIから確認してみます。①~③で起動したコンテナを起動させたままで、Podman DesktopのContainersタブを開くと、実行中のコンテナを一覧で確認したり、停止、削除したりすることができます。
podman-mac10.png



まとめ

今回は、オープンソースのコンテナ管理ツールであるPodman / Podman Desktopについて簡単にご紹介しました。
最近はPower Platformに関する記事ばかり投稿していましたが、それらのローコードアプリケーションの裏側でロジックを実行するために、バックエンドのサービスやBFFを実装することが増えてくるかと思うので、コンテナを活用しつつ引き続き力を入れていきたいと思います。









このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
DockerおよびDocker Composeは、米国およびその他の国における Docker Inc. の商標または登録商標です。
macOSは、米国およびその他の国で登録されたApple Inc.の商標です。
Red Hat、および Red Hat ロゴは、米国およびその他の国における Red Hat, Inc. またはその子会社の登録商標です。
その他のすべての商標は、それぞれの所有者に帰属します。

  • LINEで送る
  • このエントリーをはてなブックマークに追加

お気軽にお問い合わせください。

ページのトップへ