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

推薦する

CentOS ベースの OpenStack 環境の展開に関する詳細なチュートリアル (OpenStack のインストール)

エフェクト表示: 環境準備コントローラーノード: 6GB 4時間60GB/30GB/30GB計算ノー...

chkconfig および systemctl コマンドを使用して Linux サービスを有効または無効にする方法

これは Linux 管理者にとって重要な (そして素晴らしい) トピックなので、誰もが Linux ...

リアルタイムクロックを実装するネイティブJS

ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...

一般的な XHTML タグの使用方法の紹介

XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...

CentOSはexpectを使用してスクリプトやコマンドをバッチでリモート実行します

サーバーへのファイルのアップロード、ソフトウェアのインストール、コマンドやスクリプトの実行、サービス...

MySQL Community Server 5.7.16 のグリーン バージョンをインストールしてリモート ログインを実装する方法

1. MySQL Community Server 5.7.16をダウンロードしてインストールします...

HTML テーブル マークアップ チュートリアル (43): テーブル ヘッダーの VALIGN 属性

垂直方向では、ヘッダーの配置を上、中央、下に設定できます。基本的な構文構文Top は上、Middle...

Linux で Squid プロキシ サーバーを構築するための完全な手順

序文この記事では、Linux で Squid プロキシ サーバーを設定することに関する関連コンテンツ...

Vueの子コンポーネントと親コンポーネントの詳細な分析

目次1. 親コンポーネントと子コンポーネント2. テンプレート分離書き込み1. テンプレートタグ2....

HTMLの基礎: HTMLの基本構造

HTML ハイパーテキスト ドキュメントの基本構造は、ドキュメント ヘッダーとドキュメント本体の 2...

Docker による Oracle 11g イメージ構成のプルに関する詳細なチュートリアル

さっそくAlibaba の oracle11g イメージをプルして構成する docker の記録を開...

Vue ルーティング遅延読み込みの詳細

目次1. ルートの遅延読み込みとは何ですか? 2. ルートの遅延読み込みの使用1. ルートの遅延読み...

きちんとした標準的なHTMLタグの書き方を学ぶ

優れた HTML コードは美しい Web サイトの基礎となります。私が CSS を教えるときは、まず...

Vue の get リクエストと post リクエストの違いのまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

Reactフックの長所と短所

目次序文アドバンテージ:欠点: 1. レスポンシブな使用効果2. ステータスが同期されていないRea...