コンテナ仮想化「Podman」の使用方法

***このページではLinuxにおけるコンテナ仮想化「Podman」の使用方法についてよく使うコマンドをまとめています。Podmanは次の特長を持っており、今後の主流のコンテナエンジンになると見越しています。***

## Podmanの特長 
- **一般ユーザ権限で動作する**
 Podmanコンテナはルートレスモード(root権限不要)で動く	
- **セキュリティリスクが考慮されている**	
 rootで実行する必要がないため悪意のあるプログラムに隔離が突破されるリスクが少ない。	
- **Dockerとの互換性がある**		
 Dockerと互換性があり引数などの指定方法はすべてDockerと同じである。	
- **コンテナ管理基盤の「Kubernetes」の「Pod」がサポートされる**		
 Podmanはコンテナ管理基盤の「Kubernetes」で複数のコンテナをグループ化した「Pod」もサポートされる

それではコンテナ仮想化「Podman」の使用方法について記していきます。
ここではUbuntu Linux環境で使用することを想定しています。

## 1. コンテナイメージの入手
:::note info
書式
podman pull　"イメージ"
:::

##### ■ 実行例①
- Ubuntuの公式イメージを入手
```
$ podman pull ubuntu
```
##### ■ 実行例②
- apache2ののイメージを入手
```
$ podman pull docker.io/httpd:latest
```

## 2. コンテナイメージの一覧表示
:::note info
書式
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. コンテナイメージの削除
:::note info
書式
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. コンテナをデーモンとして起動
:::note info
書式
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. コンテナのプロセス確認
:::note info
書式
- (動作中)   
 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. 動作中のコンテナを停止する
:::note info
書式
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. コンテナをイメージ化してバックアップする
:::note info
手順
①コンテナを新しいメージとして作成しする。
 (書式)　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で使用する基本的なものをまとめました。
これからの皆さんの何か参考になれば幸いです。

<table border="0" cellpadding="0" cellspacing="0"><tr><td><div style="border:1px solid #95a5a6;border-radius:.75rem;background-color:#FFFFFF;width:504px;margin:0px;padding:5px;text-align:center;overflow:hidden;"><table><tr><td style="width:240px"><a href="https://hb.afl.rakuten.co.jp/ichiba/14f168ca.485dc5c9.14f168cb.b3e40f57/_RTLink71449?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F46d00af1a73f3b481f3b0f7dc778e8fe%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjAsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjoxLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><img src="https://hbb.afl.rakuten.co.jp/hgb/322135aa.f4737de6.322135ab.3983495c/?me_id=1278256&item_id=19635352&pc=https%3A%2F%2Fthumbnail.image.rakuten.co.jp%2F%400_mall%2Frakutenkobo-ebooks%2Fcabinet%2F3253%2F2000009143253.jpg%3F_ex%3D240x240&s=240x240&t=picttext" border="0" style="margin:2px" alt="" title=""></a></td><td style="vertical-align:top;width:248px;"><p style="font-size:12px;line-height:1.4em;text-align:left;margin:0px;padding:2px 6px;word-wrap:break-word"><a href="https://hb.afl.rakuten.co.jp/ichiba/14f168ca.485dc5c9.14f168cb.b3e40f57/_RTLink71449?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F46d00af1a73f3b481f3b0f7dc778e8fe%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjAsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjoxLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  >図解即戦力　仮想化＆コンテナがこれ1冊でしっかりわかる教科書【電子書籍】[ 五十嵐貴之 ]</a></p><div style="margin:10px;"><a href="https://hb.afl.rakuten.co.jp/ichiba/14f168ca.485dc5c9.14f168cb.b3e40f57/_RTLink71449?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F46d00af1a73f3b481f3b0f7dc778e8fe%2F&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjAsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjoxLCJhbXAiOmZhbHNlfQ%3D%3D" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><img src="https://static.affiliate.rakuten.co.jp/makelink/rl.svg" style="float:left;max-height:27px;width:auto;margin-top:0"></a><a href="https://hb.afl.rakuten.co.jp/ichiba/14f168ca.485dc5c9.14f168cb.b3e40f57/_RTLink71449?pc=https%3A%2F%2Fproduct.rakuten.co.jp%2Fproduct%2F-%2F46d00af1a73f3b481f3b0f7dc778e8fe%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjAsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxLCJwcm9kIjoxLCJhbXAiOmZhbHNlfQ==" target="_blank" rel="nofollow sponsored noopener" style="word-wrap:break-word;"  ><div style="float:right;width:41%;height:27px;background-color:#bf0000;color:#fff!important;font-size:12px;font-weight:500;line-height:27px;margin-left:1px;padding: 0 12px;border-radius:16px;cursor:pointer;text-align:center;">楽天で購入</div></a></div></td></tr></table></div><br><p style="color:#000000;font-size:12px;line-height:1.4em;margin:5px;word-wrap:break-word"></p></td></tr></table>