このページではLinuxにおけるコンテナ仮想化「Podman」の使用方法についてよく使うコマンドをまとめています。Podmanは次の特長を持っており、今後の主流のコンテナエンジンになると見越しています。
Podmanの特長
-
一般ユーザ権限で動作する
Podmanコンテナはルートレスモード(root権限不要)で動く -
セキュリティリスクが考慮されている
rootで実行する必要がないため悪意のあるプログラムに隔離が突破されるリスクが少ない。 -
Dockerとの互換性がある
Dockerと互換性があり引数などの指定方法はすべてDockerと同じである。 -
コンテナ管理基盤の「Kubernetes」の「Pod」がサポートされる
Podmanはコンテナ管理基盤の「Kubernetes」で複数のコンテナをグループ化した「Pod」もサポートされる
それではコンテナ仮想化「Podman」の使用方法について記していきます。
ここではUbuntu Linux環境で使用することを想定しています。
1. コンテナイメージの入手
書式
podman pull "イメージ"
■ 実行例①
- Ubuntuの公式イメージを入手
$ podman pull ubuntu
■ 実行例②
- apache2ののイメージを入手
$ podman pull docker.io/httpd:latest
2. コンテナイメージの一覧表示
書式
podman images
■ 実行例
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/my_ubuntu latest fc359f43a75e 22 hours ago 80.4 MB
docker.io/library/httpd latest acd59370d8fb 3 days ago 148 MB
docker.io/library/ubuntu latest 27941809078c 5 days ago 80.3 MB
3. コンテナイメージの削除
書式
podam rmi "IMAGE ID"
■ 実行例
$ podman rmi fc359f43a75e
Untagged: localhost/my_ubuntu:latest
Deleted: fc359f43a75e335d152d79403655fffe7ef982fafaebfb1a5a08829dc3d5c919
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest acd59370d8fb 3 days ago 148 MB
docker.io/library/ubuntu latest 27941809078c 5 days ago 80.3 MB
4. コンテナをデーモンとして起動
書式
podman run --name "コンテナ名" -d "イメージ名"
■ 実行例①
- イメージはubuntu、コンテナ名は「ubuntu01」として起動
$ podman run --name ubuntu01 -itd ubuntu /bin/bash
5a0a7faf2dc1708dff829f7ef18e3c28311405bf7e5f2bef4b1ce2beb41dc22e
■ 実行例②
- イメージはapache2、コンテナ名は「www01」として起動。
- この時コンテナ内の80ポートをホスト側の8081にポートフォワーディングせている。
$ podman run --name www01 -p 8081:80 -d httpd
e7dc829dea99b20fcb919ed5bdc687ea0560fdc46963dde2a37da239e922349a
5. コンテナのプロセス確認
書式
- (動作中)
podman ps - (動作中及び停止中)
podman ps -a
■ 実行例
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a0a7faf2dc1 docker.io/library/ubuntu:latest /bin/bash 13 seconds ago Up 14 seconds ago ubuntu01
e7dc829dea99 docker.io/library/httpd:latest httpd-foreground 3 seconds ago Up 4 seconds ago 0.0.0.0:8081->80/tcp www01
6. 動作中のコンテナを停止する
書式
podman stop "コンテナ名"
もしくは
podman stop "CONTAINER ID"
■ 実行例
$ podman stop ubuntu01
ubuntu01
$ podman stop e7dc829dea99
e7dc829dea99
$ podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a0a7faf2dc1 docker.io/library/ubuntu:latest /bin/bash 3 minutes ago Exited (137) 19 seconds ago ubuntu01
e7dc829dea99 docker.io/library/httpd:latest httpd-foreground 3 minutes ago Exited (0) 5 seconds ago 0.0.0.0:8081->80/tcp www01
- STATUSでExitedとなっていることを確認
7. コンテナをイメージ化してバックアップする
手順
①コンテナを新しいメージとして作成しする。
(書式) podman commit "コンテナID" "作成するイメージ名"
②作成したイメージをファイルとして保存する
(書式) podman save "作成したイメージ" >ファイル名.tar
:
■ 実行例
- コンテナを新しいメージとして作成
$ podman commit 5a0a7faf2dc1 my_ubuntu
Getting image source signatures
Copying blob a790f937a6ae skipped: already exists
Copying blob 9d99e6fd6107 done
Copying config c1733d0749 done
Writing manifest to image destination
Storing signatures
c1733d07494c5022fa67ab6387f8986b4022476504ed467b344b68fe4757bdfc
- 作成したイメージをファイルとして保存
$ podman save my_ubuntu >my_ubuntu.tar
$ ls -lh
-rw-rw-r-- 1 ishimatsu ishimatsu 77M 6月 12 14:23 my_ubuntu.tar
8. バックアップしたコンテナイメージのリストア
:::note info
書式
podman load -i "バックアップファイル名".tar
:
■ 実行例
- リストア前の状態
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/httpd latest acd59370d8fb 3 days ago 148 MB
- リストアの実行
$ podman load -i my_ubuntu.tar
Getting image source signatures
Copying blob 9d99e6fd6107 [======================================] 10.0KiB / 10.0KiB
Copying blob a790f937a6ae done
Copying config c1733d0749 done
Writing manifest to image destination
Storing signatures
Loaded image(s): localhost/my_ubuntu:latest
- リストア後の確認
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/my_ubuntu latest c1733d07494c 10 minutes ago 80.4 MB
docker.io/library/httpd latest acd59370d8fb 3 days ago 148 MB
9. コンテナとホスト間のファイルコピー
:::note info
書式 ホストからコンテナへのファイルコピー
podman cp "ファイル名" "コンテナ名:保存先"
:
■ 実行例
- ホストからコンテナへのファイルコピー
$ podman exec -it my_httpd /bin/bash
# cd /root
# ls
test.txt
$ podman cp ./test.txt my_httpd:/root
:::note info
書式 コンテナからホストへのファイルコピー
podman cp "コンテナ名:保存元" "ホスト側の保存先""
:
■ 実行例
- コンテナからホストへのファイルコピー
podman cp my_httpd:/root/test2.txt ./podman
以上になります。
今回はPodmanで使用する基本的なものをまとめました。
これからの皆さんの何か参考になれば幸いです。
|