📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の10版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
コンテナとは、ソフトウェアプロセスやマイクロサービスをパッケージ化して、あらゆるコンピューティング環境で実行可能にするソフトウェアソリューションである。<br>
コンテナとは、Linuxシステム上で実行される、互いに隔離されたプロセス群のことである。<br>
また、ソフトウェアプロセスやマイクロサービスをパッケージ化して、あらゆるコンピューティング環境で実行可能にするソフトウェアソリューションである。<br>
<br>
コンテナは、1つのプロセス・グループがシステム上の他のプロセスに干渉しないようにする。<br>
<br>
<br>
コンテナに含まれるファイルには、アプリケーションコード、環境変数、設定コード、バイナリプログラム、ソフトウェアの依存関係、ライブラリ等がある。<br>
コンテナに含まれるファイルには、アプリケーションコード、環境変数、設定コード、バイナリプログラム、ソフトウェアの依存関係、ライブラリ等がある。<br>
7行目: 10行目:
このイメージは、クラウド、オンプレミスのデータシステム、ローカルシステム等、あらゆるプラットフォームにデプロイされる。<br>
このイメージは、クラウド、オンプレミスのデータシステム、ローカルシステム等、あらゆるプラットフォームにデプロイされる。<br>
<br>
<br>
Podman (Pod Manage) は、Open Container Initiatives (OCI) のコンテナイメージを開発、管理、本番環境で実行する時に使用するコンテナエンジンである。<br>
また、不正なプロセスがシステム・リソースを独占することはできず、他のプロセスがタスクを実行するのを妨げることもできる。<br>
悪意のあるコンテナであったとしても、他のコンテナを攻撃したり、データを盗んだり、サービス拒否攻撃を引き起こしたりすることもできない。<br>
<br>
コンテナの最終的な目標は、同じライブラリの異なるバージョンを必要とするアプリケーションと競合しないように、<br>
共有ライブラリの独自のバージョンでアプリケーションをインストールできるようにすることある。<br>
その代わり、コンテナによってアプリケーションは仮想化された環境に住むことができ、あたかもシステム全体を所有しているかのような印象を与えることができる。<br>
<br>
Podman (Pod Manager) は、Open Container Initiatives (OCI) のコンテナイメージを開発、管理、本番環境で実行する時に使用するコンテナエンジンである。<br>
Podmanプロジェクトは、Podmanを<u>Linuxシステム上でOCIコンテナを開発、管理、実行するためのデーモンレス・コンテナ・エンジン</u>と説明している。<br>
<br>
OCIは、コンテナフォーマットとランタイムに関するOSレベルの仮想化ソフトウェアコンテナのオープンなガバナンス構造を実装するために設計された。<br>
OCIは、コンテナフォーマットとランタイムに関するOSレベルの仮想化ソフトウェアコンテナのオープンなガバナンス構造を実装するために設計された。<br>
<br>
<br>
Podmanコンテナは、スーパユーザ / 非スーパーユーザのいずれでも実行可能である。<br>
Podmanコンテナは、スーパユーザ / 非スーパーユーザのいずれでも実行可能である。<br>
<br>
PodmanはDockerと同じコマンドラインでDockerができることのほとんど全てを行うことができるため、Docker = Podmanという単純な行のエイリアスで要約されることが多い。<br>
しかし、Podmanはそれ以上のことができる。<br>
<br>
Dockerを理解することはPodmanを理解する上で重要ではないが役立つこともある。<br>
<br><br>
== コンテナ・オーケストレータ / コンテナ・エンジン / コンテナ・ランタイム ==
コンテナの世界では、コンテナ・オーケストレータ、コンテナ・エンジン、コンテナ・ランタイムといった用語が同じ意味で用いられることがよくある。<br>
<br>
==== コンテナ・オーケストレータ ====
コンテナを複数の異なるマシンやノードにオーケストレートするソフトウェアプロジェクトや製品のことである。<br>
これらのオーケストレータは、コンテナを実行するためにコンテナエンジンと通信する。<br>
<br>
主要なコンテナ・オーケストレータはKubernetesで、元々はDockerデーモンのコンテナ・エンジンと通信するように設計されていたが、<br>
Kubernetesはコンテナ・エンジンとして主にCRI-Oまたはcontainerdを使用しているため、Dockerを使用することは時代遅れになりつつある。<br>
<br>
CRI-Oとcontainerdは、オーケストレーションされたKubernetesコンテナを実行するために構築されている。<br>
<br>
Docker SwarmおよびApache Mesosも、コンテナ・オーケストレータである。<br>
<br>
==== コンテナ・エンジン ====
主に、コンテナ化されたアプリケーションを単一のローカル・ノードで実行するように構成するために使用される。<br>
ユーザ、管理者、開発者が直接起動できる。<br>
<br>
また、ブート時にSystemdユニットファイルから起動したり、Kubernetesのようなコンテナ・オーケストレータから起動することもできる。<br>
<br>
前述したように、CRI-Oとcontainerdは、Kubernetesがコンテナをローカルで管理するために使用するコンテナエンジンである。<br>
一般的に、ユーザが直接使用することは想定されていない。<br>
<br>
DockerとPodmanは、コンテナ化されたアプリケーションを1台のマシンで開発、管理、実行するためにユーザが使用する主要なコンテナエンジンである。<br>
<br>
PodmanがKubernetesのコンテナ起動に使われることはほとんどない。<br>
<br>
Buildahもコンテナエンジンの1つであるが、コンテナイメージの構築にしか使用されない。<br>
<br>
==== Open Container Initiative (OCI) コンテナ・ランタイム ====
Linuxカーネルの様々な部分を設定して、最後にコンテナ化されたアプリケーションを起動する。<br>
最も一般的に使用される2つのコンテナ・ランタイムは、runcとcrunである。<br>
<br>
KataとgVisorも、コンテナ・ランタイムである。<br>
<br>
<u>※注意</u><br>
<u>Open Container Initiative (OCI) は、コンテナフォーマットとランタイムに関するオープンな業界標準を作成することを主な目的とした標準化団体である。</u><br>
<u>詳細を知りたい場合は、https://opencontainers.org を参照すること。</u><br>
<br>
下図は、オープンソース・コンテナ・プロジェクトがどのカテゴリーに当てはまるかを示している。<br>
[[ファイル:Container 1.png|中央]]
<br><br>
<br><br>


112行目: 172行目:
   
   
  # SUSE
  # SUSE
  sudo zypper install meson ninja glib2-devel glibc-devel libseccomp-devel
  sudo zypper install meson ninja glib2-devel glibc-devel libseccomp-devel systemd-devel
<br>
<br>
[https://github.com/containers/conmon conmonのGithub]にアクセスして、ソースコードをダウンロードする。<br>
[https://github.com/containers/conmon conmonのGithub]にアクセスして、ソースコードをダウンロードする。<br>
286行目: 346行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
===== catatonitのインストール =====
catatonitは、PodmanやDocker等のコンテナランタイムが、コンテナ内のプロセスを正しく管理するために使う補助的なツールである。<br>
ポッドは、Kubernetes等のオーケストレーションツールで使用される複数のコンテナを1つにまとめた単位であるが、ポッド自体の作成や管理はKubernetesの制御プレーンやAPIサーバが行う。<br>
<br>
catatonitは、コンテナのinitプロセスとして使用される小さなプログラムである。<br>
Podmanや他のコンテナランタイムでは、コンテナ内でプロセスが正しく動作および終了するためにinitプロセスを使用することが一般的である。<br>
catatonitはそのための軽量な選択肢の1つであり、特にリソースの少ない環境やシンプルなコンテナイメージでの使用に適している。<br>
<br>
コンテナのinitプロセスは、コンテナ内で最初に実行されるプロセスであり、次のような役割を果たす。<br>
* 孤児プロセスの回収
*: コンテナ内で起動されたプロセスが終了した時、その親プロセスが終了している場合、プロセスが孤児化される。
*: initプロセスはこれらの孤児プロセスを回収して、適切に終了させる。
*: <br>
* シグナルの管理
*: catatonitは、コンテナに送信されるシグナルをキャッチして、適切にハンドリングする。
*: これにより、コンテナ内で実行中のプロセスがシグナルを受信できるようにする。
*: <br>
* リソースのクリーンアップ
*: コンテナが終了する時、catatonitはシステムリソースを適切にクリーンアップする。
<br>
[https://github.com/openSUSE/catatonit catatonitのGithub]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf catatonit.tar.xz
cd catatonit
<br>
または、<code>git clone</code>コマンドを実行してソースコードをダウンロードすることもできる。<br>
git clone https://github.com/openSUSE/catatonit.git
cd catatonit
<br>
catatonitをビルドおよびインストールする。<br>
./autogen.sh
mkdir build && cd build
../configure --prefix=<Podmanのインストールディレクトリ>
make -J $(nproc)
make install
<br>
===== 最新のnetavarkが必要な場合 =====
===== 最新のnetavarkが必要な場合 =====
最新バージョンのnetavarkをインストールする場合、ソースコードからインストールする。<br>
最新バージョンのnetavarkをインストールする場合、ソースコードからインストールする。<br>
368行目: 467行目:
  cd bin
  cd bin
  mv ./*  /<Podmanのインストールディレクトリ>/bin
  mv ./*  /<Podmanのインストールディレクトリ>/bin
<br><br>
== Podmanに関連するディレクトリ ==
Podmanに関連するディレクトリを以下に示す。<br>
これらのディレクトリは、Podmanとその関連ツール (Podman Desktop) によって使用されており、rootlessモードで実行する時にユーザのホームディレクトリ配下に作成される。<br>
<br>
* ~/.local/share/containers/storage
*: Podmanが使用するメインのストレージディレクトリである。
*: コンテナイメージ、コンテナ、ボリューム等のデータが格納される。
* ~/.local/share/containers/podman-desktop
*: Podman Desktopアプリケーションが使用するディレクトリである。
*: GUIベースのPodman管理ツールの設定やデータが保存される。
* ~/.local/share/containers/cache
*: Podmanのキャッシュディレクトリである。
*: イメージレイヤーのキャッシュやその他の一時的なデータが保存される。
*: キャッシュを使用することにより、同じイメージの再ダウンロードを避け、操作を高速化する。
<br><br>
<br><br>


472行目: 587行目:


==== Linux仮想マシンの作成と開始 ====
==== Linux仮想マシンの作成と開始 ====
===== Linux仮想マシン (Podman Machine) とは =====
Podman Machineを理解するには、まず、Podmanのアーキテクチャについて知る必要がある。<br>
<br>
Linuxでは、Podmanはデフォルトでrootless (非特権) モードで動作できるため、直接コンテナが実行できる。<br>
<u>Linuxでは、以下に示すようなLinuxカーネルの機能 (コンテナ実行に必要な機能が最初から利用可能) を直接利用できるできるため、</u><br>
<u>Podman Machineは不要であり、podman run等のコマンドが直接実行できる。</u><br>
* namespaces
* cgroups
* SELinux / AppArmor等
<br>
Windows / MacOSでは、Linuxコンテナをネイティブに実行できないため、仮想マシンを介してLinux環境を用意する必要があるため、仮想マシン (VM) が必要になる。<br>
この仮想マシンを<u>Podman Machine</u>と呼ぶ。<br>
<br>
podman machineコマンドの役割を以下に示す。<br>
* Windows / MacOS環境で必要な仮想マシンを起動すること。
* 仮想マシン内でPodmanデーモンを開始すること。
* ホストOSからコンテナを操作できるような環境を準備すること。
<br>
podman machineコマンドを実行せずにpodman runコマンド等が使用できる環境は、以下の通りである。<br>
* ホストOSがLinux
* Podman Machineが自動的に設定・起動されている状態
<br>
===== Linux仮想マシンの初期化 =====
===== Linux仮想マシンの初期化 =====
コンテナが実行される新しいLinux仮想マシンを初期化する。<br>
コンテナが実行される新しいLinux仮想マシンを初期化する。<br>
480行目: 617行目:
一般的なFedora CoreOSのアップグレードは14日ごとに行われるが、自動アップデートのZincataはPodmanマシンでは無効になっている。<br>
一般的なFedora CoreOSのアップグレードは14日ごとに行われるが、自動アップデートのZincataはPodmanマシンでは無効になっている。<br>
<br>
<br>
もし、LinuxホストでPodman Machineを作成した場合は、~/.local/share/containers/podman/machineディレクトリに初期ファイルが生成される。<br>
これは、2[GB]程度の容量が必要なため、Linux上ではPodman Machineは不要であることから削除することを推奨する。<br>
<br>
===== Linux仮想マシンの編集 =====
===== Linux仮想マシンの編集 =====
<u>Podmanをソースコードから任意のディレクトリにインストールした場合、</u><br>
<u>Podmanをソースコードから任意のディレクトリにインストールした場合、</u><br>
531行目: 672行目:
<br>
<br>
Podman Desktopのメイン画面右下にある[電球]アイコンを選択して[トラブルシューティング]ページを開き、[プロバイダーを再接続]ボタンを押下する。<br>
Podman Desktopのメイン画面右下にある[電球]アイコンを選択して[トラブルシューティング]ページを開き、[プロバイダーを再接続]ボタンを押下する。<br>
<br><br>
== Podmanのデータ保存場所と設定 ==
==== Linux環境でのデフォルト保存場所 ====
Podmanのイメージやコンテナの保存場所は、実行モードによって異なる。<br>
* rootlessモード (非rootユーザとして実行)
*: ~/.local/share/containers
* rootモード (root権限で実行)
*: /var/lib/containers
<br>
==== Windows環境での保存場所 ====
Windowsでは、WSL2ベースのPodman Machineを使用するため、データはWSL2内に保存される。<br>
* WSL2ディストリビューション内
*: \\wsl$\podman-machine-default\
*: <br>
*: 具体的なパスの例 (VM内部)
*: /var/lib/containers
*: ~/.local/share/containers
<br>
ホスト側からのアクセスとしては、<u>\\wsl$\podman-machine-default\home\user\.local\share\containers</u> となる。<br>
<br>
==== Podmanの設定ファイル ====
===== storage.conf : ストレージ保存場所の設定 =====
このファイルは、イメージやコンテナの物理的な保存場所 (graphroot) を設定する。<br>
<br>
* rootlessモード
*: ~/.config/containers/storage.conf
* rootモード
*: /etc/containers/storage.conf
<br>
===== containers.conf : コンテナ動作の設定 =====
このファイルは、コンテナの実行時動作 (デフォルトネットワーク、リソース制限、ヘルパーバイナリ等) を設定する。<br>
<br>
* rootlessモード
*: ~/.config/containers/containers.conf
* rootモード
*: /etc/containers/containers.conf
<br>
==== デフォルト保存場所の変更方法 ====
===== 方法 1 : storage.confの編集 =====
storage.confファイルを編集して、保存場所を変更する。<br>
<br>
* rootlessモード
*: ~/.config/containers/storage.conf
* rootモード
*: /etc/containers/storage.conf
<br>
<syntaxhighlight lang="toml">
[storage]
driver = "overlay"
graphroot = "/path/to/new/location"  # イメージとコンテナの保存先
runroot = "/path/to/run/location"    # 実行時データの保存先
</syntaxhighlight>
<br>
===== 方法 2 : 環境変数の使用 =====
一時的に保存場所を変更する場合は、環境変数を設定する。<br>
設定変更後は、Podmanを再起動、または、新規コンテナで変更が反映される。<br>
<br>
<syntaxhighlight lang="bash">
export CONTAINERS_STORAGE_CONF=/path/to/custom/storage.conf
</syntaxhighlight>
<br>
==== Podman Machine環境での変更 ====
Podman Machine (WSL2やVM等) を使用している場合、保存場所の変更方法が異なる。<br>
<br>
===== VM内の保存場所を変更する場合 =====
Podman MachineにSSH接続する。<br>
podman machine ssh
<br>
VM内でstorage.confを編集する。<br>
# rootlessモードの場合
vi ~/.config/containers/storage.conf
# rootモードの場合
sudo vi /etc/containers/storage.conf
<br>
===== Podman Machine自体のディスクイメージ保存場所 =====
Podman Machine自体の仮想ディスクイメージは、以下に示す場所に保存されている。<br>
ディスクイメージの保存場所を変更することも可能であるが、Podman Machineの再作成が必要になる場合がある。<br>
<br>
* Linux
*: ~/.local/share/containers/podman/machine/
* Windows
*: %USERPROFILE%\.local\share\containers\podman\machine\
<br><br>
<br><br>


536行目: 761行目:
Podmanの動作を確認するため、テストイメージをダウンロードして実行する。<br>
Podmanの動作を確認するため、テストイメージをダウンロードして実行する。<br>
   podman run hello-world
   podman run hello-world
<br><br>
== Podmanのストレージ ==
コンテナ内で発生したデータは同じコンテナ内のどこかに書き込まれるが、コンテナを破棄すると同時に削除される。<br>
コンテナを破棄してもデータは保存する場合、または、他のコンテナで再利用する場合は、コンテナ外にデータ保存領域を作成する機能を提供している。<br>
<br>
* ボリューム
*: Podmanの管理下でストレージ領域を確保する。
*: ルートレスモードのデフォルトでは、~/.local/share/containersディレクトリである。
*: <br>
*: 名前付きボリュームと匿名ボリュームがあり、名前付きの場合はホスト内で名前解決できるため簡単にアクセスすることができる。
*: 匿名ボリュームは任意のハッシュ値が振られる。
*: <br>
*: 他のプロセスからはアクセスできないため安全に使用できる。
*: <br>
* バインドマウント
*: ホスト側のディレクトリをコンテナ内のディレクトリと共有する。
*: <br>
* tmpfs
*: メモリ上に一時的なストレージ領域を確保する。
*: 使用用途としては、機密性の高い情報を一時的にマウントする場合等がある。
<br>
<code>-v</code>オプション、<code>VOLUME</code>、<code>volumes</code>で指定する場合に関しても、基本的には上記のいずれかを扱っている。<br>
<br><br>
<br><br>


730行目: 932行目:
<br><br>
<br><br>


{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]][[カテゴリ:コンテナ]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]][[カテゴリ:Web]][[カテゴリ:コンテナ]]