Amazon Linux 2 x86 を実行している EC2 インスタンスに Podman をインストールし、ルートレスコンテナを設定するにはどうすればよいですか?

最終更新日: 2020 年 8 月 20 日

Amazon Linux 2 x86 を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスがあります。Docker ツールの代わりにコンテナを管理するように Podman をインストールして設定するにはどうすればよいですか?

簡単な説明

Linux 上でコンテナを管理するためのオープンソースツールである Podman は、Docker ツールの代わりとなります。Podman は実行中のデーモンを必要とせず、cgroup V2 をサポートしています。詳細については、podman.IO のウェブサイト上の podman を参照してください

コマンドの構文は、Docker ツールに似ています。たとえば、次のコマンドを使用して、標準の hello-world コンテナを起動します。

$ podman run --rm -it hello-world

解決方法

1.    SSH を使用して EC2 Linux インスタンスに接続します

2.    Docker を無効にします:

$ sudo amazon-linux-extras disable docker

3.    amazon-linux-extras ツールを使用して、kernel-ng トピックから新しいカーネルをインストールします。

$ sudo amazon-linux-extras install kernel-ng

4.    yum プラグインをインストールし、Kubic Project リポジトリを追加して、更新された Podman パッケージと依存関係にアクセスできるようにします。Kubic Project のパッケージの一覧については、Build.OpenSUSE.org ウェブサイトの Stable releases of upstream github/com/containers packages を参照してください。

$ sudo yum check-update

$ sudo yum install -y yum-utils yum-plugin-copr

$ sudo yum-config-manager --add-repo \
   https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_7/devel:kubic:libcontainers:stable.repo
$ sudo yum copr enable -y lsm5/container-selinux

5.    Podman パッケージとその依存関係をインストールします。

$ sudo yum check-update

$ sudo yum install -y podman

6.    grubby ツールを使用して、grub 設定にカーネル引数を追加します。引数は、cgroup V2 とユーザーの名前空間を有効にします。

$ sudo grubby --update-kernel=ALL \
   --args="systemd.unified_cgroup_hierarchy=1 namespace.unpriv_enable=1 user_namespace.enable=1"

7.    名前空間の範囲を有効にします。名前空間は、コンテナ内の root を、コンテナ外の権限のないユーザーにマップします。

$ echo "user.max_user_namespaces=10000" | sudo tee /etc/sysctl.d/98-userns.conf

8.    ユーザーのエントリを /etc/subuid ファイルと /etc/subgid ファイルに追加します。これらのエントリは、権限のないユーザーに、コンテナで使用する UID の範囲を与えます。ユーザーの例は ec2-user です。

$ echo "$(id -un):100000:65536" | sudo tee -a /etc/subuid
$ echo "$(id -un):100000:65536" | sudo tee -a /etc/subgid

9.    インスタンスを再起動して、最新のカーネルを使用します。

$ sudo systemctl reboot

10.    SSH を使用してインスタンスに接続します。

11.    Podman が想定どおりに動作することを確認します。

$ podman version
Version:      2.0.2
API Version:  1
Go Version:   go1.13.11
Built:        Thu Jan  1 00:00:00 1970
OS/Arch:      linux/amd64

$ podman run --rm -it hello-world
Trying to pull registry.fedoraproject.org/hello-world...
  manifest unknown: manifest unknown
Trying to pull registry.access.redhat.com/hello-world...
  name unknown: Repo not found
Trying to pull registry.centos.org/hello-world...
  manifest unknown: manifest unknown
Trying to pull docker.io/library/hello-world...
Getting image source signatures
Copying blob 0e03bdcc26d7 done
Copying config bf756fb1ae done
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

前述の出力例では、Podman のインストールと、権限のない ec2-user がコンテナを起動できることを確認します。

13.    (オプション) 代わりに Podman を使用するように docker のローカルバッシュエイリアスを設定します。

$ echo "alias docker=podman" >> $HOME/.bashrc
$ source $HOME/.bashrc
$ docker version
Version:      2.0.2
API Version:  1
Go Version:   go1.13.11
Built:        Thu Jan  1 00:00:00 1970
OS/Arch:      linux/amd64

14.    (オプション) podman-compose ツールをインストールします。podman-compose ツールは、Docker の代わりに Podman を使用して docker-compose.yml ファイルを実行するスクリプトです。詳細については、GitHub ウェブサイトの podman-compose を参照してください。

podman-compose ツールをインストールするには:

インスタンスに Python3 パッケージがインストールされていることを確認します。

$ sudo yum install -y python3 python3-pip

Python pip ツールを使用して podman-compose ツールをローカルにインストールします。

$ pip3 install --user --upgrade PyYAML 
$ pip3 install --user --upgrade podman-compose

これで Podman で docker-compose.yml ファイルを実行できるようになりました。

$ echo "alias docker-compose=podman-compose" >> $HOME/.bashrc
$ source $HOME/.bashrc

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?