Podmanはコンテナを自動的に起動し、Dockerと比較します

Podmanはコンテナを自動的に起動し、Dockerと比較します

1. podmanの紹介

Podman は以前は CRI-O プロジェクトの一部でしたが、後に独立したプロジェクト libpod に分離されました。Libpod は、コンテナ ポッドを作成するためのツールとライブラリです。Podman は、ルート ユーザーとして、またはルートレス モードで実行されるデーモンレス コンテナ エンジンです。簡単に言うと、podman はコンテナを管理するための docker-CLI コマンドラインを提供します。

2. Dockerと比較した利点

Dockerの欠点1:

ご存知のとおり、Docker デーモンは C/S モデルを使用して、複数のコア上の CPU リソースをほぼ 100% 占有します。

ポッドマンの利点1:

Podman はデーモン プロセスや root 権限グループを必要とせず、ユーザー名前空間を使用してコンテナー内の root 操作をシミュレートし、fork/exec モデルを採用しています。

fork/exec モデルには、C/S モデルに比べて次のような利点があります。

  • システム管理者は誰がコンテナを開始したかを知る
  • cgroupを使用してpodmanを制限すると、対応する作成されたコンテナも制限されます。
  • systemdユニットファイルの生成により、タスクの起動とシャットダウンを管理できます。
  • ソケットのアクティベーション。systemd から podman コンテナにソケットを送信して使用します。

3. 互換性

docker の機能のほとんどは podman と互換性があり、エイリアスを使用して docker コマンドを記述することもできます。

4. バックグラウンド サービス ユニット ファイルの優先順位

/usr/lib/systemd/user : 最も優先度が低く、優先度の高い同じ名前のユニットによって上書きされます ~/.local/share/systemd/user

/etc/systemd/user : グローバルに共有されるユーザーレベルのユニット

~/.config/systemd/user : 最高優先度

5. podmanの基本操作

インストール

#デフォルトの Centos ソース [root@slave02 ~]# yum -y module install container-tools #モジュールに基づくコンテナ ツール [root@slave02 ~]# yum -y install podman-docker #docker 互換パッケージをインストール (オプション)

バージョン

[root@slave02 ~]# podman -v
podman バージョン 3.3.0-dev

倉庫

公式リポジトリ: registry.access.redhat.com

サードパーティリポジトリ: docker.io

プライベートリポジトリ: registry.lab.example.com

コマンドヘルプ

[root@slave02 ~]# podman ヘルプ|head -15
ポッド、コンテナ、イメージを管理する
使用法:
  podman [オプション] [コマンド]
使用可能なコマンド:
  実行中のコンテナにアタッチする
  自動更新 自動更新ポリシーに従ってコンテナを自動更新します
  ビルド Containerfiles の指示に従ってイメージをビルドする
  commit 変更されたコンテナに基づいて新しいイメージを作成する #変更されたコンテナに基づいて新しいコンテナを作成する コンテナを管理する
  cp コンテナとローカルファイルシステム間でファイル/フォルダをコピーする
  コンテナを作成しますが、起動はしません
  diff オブジェクトのファイルシステムの変更を表示します
  イベント podman イベントを表示
....

画像アクセラレータ

設定ファイルを変更する: /etc/containers/registries.conf

注意: httpds//:url 形式を含めることはできません

[root@slave02 ~]# cp /etc/containers/registries.conf /backup/registries.conf.back #バックアップ [root@slave02 ~]# vim /etc/containers/registries.conf
unqualified-search-registries = ["docker.io"] # 非修飾検索レジストリ [[registry]]
プレフィックス = "docker.io"
location = "x" #xはAliアクセラレーションミラーのアドレスです

画像をプルする

[root@slave02 ~]# podman pull nginx

6. Webコンテナを実行する

バックグラウンドでWebコンテナを起動し、コンテナのコンテンツにアクセスする

#HTMLページコンテンツを準備する[root@192 ~]# cat /opt/webhtml/index.html 
自分の道を進み、自分の景色を見て、満足することなく他人を超え、野心を失わずに他人に追い抜かれる
#デーモン Web コンテナ プロセスを実行し、/opt/webhtml ディレクトリの内容を、Web ページが保存されているコンテナの /usr/share/nginx/html にマップします [root@192 ~]# podman run -d --name web -p 8888:80 -v /opt/webhtml:/usr/share/nginx/html nginx
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
[root@podman ~]# カール 192.168.136.129:8888
自分の道を進み、自分の景色を見て、満足することなく他人を超え、野心を失わずに他人に追い抜かれる
#コンテナIP
[root@podman ~]# podman examine web|grep IPアドレス
"IPアドレス": "10.88.0.6",
"IPアドレス": "10.88.0.6",
#ホストマシンのIP
[root@podman ~]# ip r
192.168.136.0/24 dev ens33 proto カーネル スコープ リンク src 192.168.136.129 メトリック 100 
#ポートバインディングが実行されるので、curl 192.168.136.129:8888で直接アクセスできます

バックエンドのWebコンテナに入り、サービスステータスを確認します

[root@podman ~]# podman exec -it web bash
root@3528e6d5148b:/# サービス nginx ステータス
[ ok ] nginx が実行中です。#実行中

コンテナサービスの内容を変更する

#ホストマシンの /opt/webhtml/index.html を変更します [root@podman ~]# cat /opt/webhtml/index.html 
自分の道を進み、自分の景色を見て、慢心せずに他人を超え、野心を失わずに他人に追い抜かれるRHCAS
RHCE RHCA
#[root@podman ~]にアクセス# curl 192.168.136.129:8888
自分の道を進み、自分の景色を見て、慢心せずに他人を超え、野心を失わずに他人に追い抜かれるRHCAS 
RHCE RHCA
# コンテナに入り、コンテンツが変更されたかどうかを確認します [root@podman ~]# podman exec -it web bash
root@3528e6d5148b:/# cat /usr/share/nginx/html/index.html 
自分の道を進み、自分の景色を見て、慢心せずに他人を超え、野心を失わずに他人に追い抜かれるRHCAS 
RHCE RHCA

コンテナの一時停止と削除

#一時停止 [root@podman ~]# podman stop web
ウェブ
[root@podman ~]# podman ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
3528e6d5148b docker.io/library/nginx:latest nginx -g daemon o... 25 分前 終了 (0) 16 秒前 0.0.0.0:8888->80/tcp web
#削除 [root@podman ~]# podman rm web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c
#または実行中のコンテナを強制的に削除する [root@podman ~]# podman rm -f web
3528e6d5148bcf980f0df5708a82419d3485a33d1d16d722db3e880cc103cd2c

7. Webコンテナの設定が自動的に開始されます

バックグラウンドでWebコンテナを実行する

[root@podman ~]# podman run --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a

Webコンテナに基づいて、通常の優先度の/etc/systemd/systemに

.service ユニットファイルを作成する

[root@192 ~]# cd /etc/systemd/system/
[root@podman ユーザー]# podman generate systemd --
--container-prefix (コンテナの Systemd ユニット名プレフィックス)
--files {標準出力に印刷する代わりに .service ファイルを生成する}
--format (作成されたユニットを指定された形式 (json) で印刷します) # 指定された形式でユニット ファイルを印刷します --name (ID の代わりにコンテナー/ポッド名を使用します) # 既存のコンテナーを使用する代わりに新しいコンテナーを作成します --new (既存のコンテナーを起動する代わりに新しいコンテナーを作成します) # (ヘッダー生成をスキップします)
--no-header (ヘッダー生成をスキップ)
--pod-prefix (ポッドの Systemd ユニット名プレフィックス)
--restart-policy (Systemd 再起動ポリシー)
--separator (名前/IDとプレフィックス間のSystemdユニット名区切り文字)
--time (タイムアウトのオーバーライドを停止)
[root@192 system]# podman generate systemd --name web --files --new
コンテナのWebサービス

生成されたユニットファイルを表示する

[root@192 システム]# cat コンテナ-web.service 
# コンテナウェブサービス
# Podman 3.3.0-dev によって自動生成 # 2021 年 8 月 17 日火曜日 13:03:13 CST # 2021 年 8 月 17 日火曜日 13:03:13 CST                                                            
[ユニット] #ユニットの説明=Podman container-web.service #説明のドキュメント=man:podman-generate-systemd(1) #ヘルプと生成されたシステム Wants=network-online.target #ネットワーク After=network-online.target
RequiresMountsFor=%t/containers # 重要でない場合は前のものをスキップします [サービス]
環境=PODMAN_SYSTEMD_UNIT=%n                   
Restart=on-failure #失敗時に再起動 TimeoutStopSec=70 #タイムアウト ExecStart=/usr/bin/podman run --sdnotify=conmon --cgroups=no-conmon --rm --replace --name web -d -p 8080:80 -v /opt/webhtml:/usr/shar/nginx/html nginx #実行は、作成したばかりのコンテナを実行する /usr/bin/podman から開始されます Type=notify
通知アクセス=すべて
[インストール]
WantedBy=マルチユーザー.target デフォルト.target

コンテナを今すぐ削除

[root@podman ~]# podman rm web
910db3ab6bd1ef18e5fd0afe1844912f0b89334b7b8ab758353a948a1b55282a
[root@podman ~]# podman ps -a
コンテナID イメージ コマンド 作成ステータス ポート名

自動起動を設定する

[root@192 ~]# systemctl デーモンリロード 
[root@192 ~]# systemctl enable --now container-web.service 
/etc/systemd/system/multi-user.target.wants/container-web.service → /etc/systemd/system/container-web.service のシンボリックリンクを作成しました。
/etc/systemd/system/default.target.wants/container-web.service → /etc/systemd/system/container-web.service のシンボリックリンクを作成しました。
[root@192 ユーザー]# podman ps -a
コンテナID イメージ コマンド 作成ステータス ポート名
b0c7709cb00e docker.io/library/nginx:latest nginx -g daemon o... 15 秒前 16 秒前にアップ 0.0.0.0:8080->80/tcp web

コンテナをルートレス モードで設定する方法は、上記の方法と同様です。

systemctlコマンドを--userとともに使用する

#サーバーの起動時にユーザーサービスが自動的に起動するようにするには、loginctl enable-linger コマンドを実行する必要があります [containers@serverb ~]$ loginctl enable-linger 

上記は、Podman ブートおよび自動起動コンテナの実装プロセスの詳細な内容です。Podman ブートおよび自動起動コンテナの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • 廃止された Docker は Podman に置き換えられますか?
  • podmanコンテナツールの具体的な使用方法

<<:  国内SNSのホームページを比較・分析して得た経験をみんなで共有(写真)

>>:  MySQL 権限とデータベース設計のケーススタディ

推薦する

計算機機能を実装するミニプログラム

この記事の例では、計算機機能を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

Jenkins を通じて None のイメージを定期的にクリーンアップする方法

序文継続的なコード配信のプロセスで、Jenkins を利用して Docker イメージを作成すると、...

Nginx サーバーで Web クローラーをブロックおよび禁止する方法

通常、すべての Web サイトは、多くの非検索エンジン クローラーに遭遇します。これらのクローラーの...

JavaScriptの詳細な分析と方向の変更方法

目次これ方法オブジェクト内これを隠した厳密モードこれを変更してこれいつものように、まずはコードを見て...

CSS3は、ズームと回転を実現するためにscale()とrotate()を使用します。

1. scale() メソッドズームとは「縮小」と「拡大」を意味します。 CSS3 では、scal...

オンライン MYSQL 同期エラーのトラブルシューティング方法の概要 (必読)

序文フェイルオーバーが発生した後、よくある問題は同期エラーです。データベースが小さい場合は、ダンプし...

Nginx 設定場所のマッチング優先順位の簡単な分析

序文Nginx 構成のサーバー ブロック内の場所は、リクエスト URI を一致させるために使用され、...

MySQL バッチ追加および保存メソッドの例

ストレステストにログインする際には、多くの異なるユーザーが必要となり、データベースに新しいデータを追...

Mysql5.7 のルートパスワードを忘れた場合の対処法 (シンプルで効果的な方法)

前回の記事では、MySQL 5.7でルートパスワードを忘れた場合と、MySQL 5.7でルートパスワ...

Ubuntu で中国語入力方法が使えない場合の解決策

Ubuntu では中国語入力方法の解決策はありません。仮想マシンや Ubuntu システムをインスト...

Windows Server 2016 に MySQL 5.7.19 の解凍バージョンをインストールするための詳細なチュートリアル

MySQL 5.7.19 winx64 解凍版のインストールチュートリアルを収録しています。具体的な...

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

Docker Swarm クラスタ管理の使用と原理の分析

Swarm クラスター管理導入Docker Swarm は Docker 用のクラスター管理ツールで...

mysql バックアップ スクリプトを作成し、7 日間保存します。

スクリプトの要件: MySQL データベースを毎日バックアップし、スクリプトを 7 日間保存します。...

JS でシングルトン モードを実装するための 6 つのソリューションの概要

序文今日は、デザインパターンのクリエーションパターンを見直していたところ、JS でシングルトンパター...