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 権限とデータベース設計のケーススタディ

推薦する

SSH ポート転送、ローカル ポート転送、リモート ポート転送、動的ポート転送の詳細

パート 1 SSH ポート転送の概要カフェで無料Wi-Fiを利用しているとき、誰かがあなたのパスワー...

CentOS7.4 起動時の緊急モードへようこそメッセージに対する解決策

今日は仮想マシンを使って実験をしました。システムをインストールし、いくつかのオプションを最適化した後...

MySQL 5.7 のユニオンオール使用法のブラックテクノロジーを 5 分で学ぶ

MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...

JSはモバイル端末の画面を1つずつ上下にスライドさせる機能を実装します

この記事では、モバイル端末を一度に1画面ずつ上下にスライドさせるためのJSの具体的なコードを参考まで...

Firefoxでリンクをクリックしたときに点線の枠線を削除する方法

今日、ブラウザの互換性の問題にいくつか遭遇しました。そのうちの 1 つは奇妙に感じました。Firef...

IEウェブページのポップアップウィンドウの共通パラメータは自分で設定できます

ポップアップは、現在のウィンドウにメニューツールバーがあるかどうかとは関係ありません。ページにスクリ...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

CentOSにPHP+Apache+MySQLのサーバー環境をインストールして構築する

Yum (フルネームは Yellow dog Updater, Modified) は、Fedora...

jsはカスタムドロップダウンボックスを実装します

この記事の例では、カスタムドロップダウンボックスを実装するためのjsの具体的なコードを参考までに共有...

Linux ssh サービス情報と実行ステータスを表示する方法

Linux での ssh サービス構成など、ssh サーバー構成に関する記事は多数あります。ここでは...

JavaScript における継承の 3 つの方法

継承する1. 継承とは何か継承: まず、継承とは関係、つまりクラス間の関係です。JS にはクラスはあ...

MySQL 5.7 インストール不要の設定グラフィックチュートリアル

Mysql は人気があり、使いやすいデータベース ソフトウェアです。以下は、mysql の無料インス...

MySQL はパスワード強度の検証をオフにします

パスワード強度検証について: [root@mysql mysql]# mysql -uroot -p...

Windows 64 ビット版の MySQL 8.0.15 インストール チュートリアル

まず公式サイトにアクセスしてダウンロードし、MySQLダウンロードをクリックします。 ダウンロードし...

ウェブフロントエンドウェブ開発の一般的なプロセスの簡単な紹介

フロントエンド開発を行っている初心者の学生を多く見かけますが、彼らの効率は比較的遅いです。常にコード...