CentOS8でPodman(Docker互換のコンテナエンジン)を使用する

# 概要
本書ではCentOS8から備わったDockerとの互換性があるコンテナエンジン「Podman」を使用して、CentOSのコンテナを作成します。

## 0. 前提条件
 - CentOS8をインストールしていること。
 - 本書ではWindows 10 Pro (Hyper-V)を使用します。
 - 本書では podman-docker パッケージをインストールします。

## 1. podman-dockerのインストール

1. パッケージをアップデートする。

    ```
    $ dnf -y update
    ```

2. podman-dockerをインストールする。

    ```
    $ dnf -y install podman-docker
    ```

3. podman-dockerをインストールしたことを確認する。

    ```
    $ podman -v
    podman version 1.0.5
    $ docker -v
    Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
    podman version 1.0.5
    ```

## 2. コンテナの作成

1. CentOSのイメージを取得する。

    ```
    $ docker pull centos
    ```

2. CentOSのイメージを取得したことを確認する。

    ```
    $ docker images
    REPOSITORY                 TAG      IMAGE ID       CREATED        SIZE
    docker.io/library/centos   latest   0f3e07c0138f   3 months ago   227 MB
    ```

3. コンテナを作成する。

    ```
    $ docker run -d --privileged --hostname [ホスト名] --name [コンテナ名] centos /sbin/init 
    ```

4. コンテナが起動していることを確認する。

    ```
    $ docker ps -a
    CONTAINER ID  IMAGE                            COMMAND            CREATED             STATUS                 PORTS  NAMES
    f810b8f0a2e1  docker.io/library/centos:latest  /sbin/init  17 seconds ago  Up 17 seconds ago         test-docker
    ```

5. コンテナに接続する。

    ```
    $ docker exec -it [コンテナID または コンテナ名] /bin/bash
    ```

6. コンテナに接続したことを確認する。

    ```
    $ hostname
    test-centos
    $ cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core)
    ```

7. 接続したコンテナで作業する。例として本書では接続したコンテナでMariaDBをインストールする。

    ```
    $ dnf -y update
    $ dnf -y install mariadb mariadb-server
    $ systemctl start mariadb
    $ systemctl enable mariadb
    $ mysql_secure_installation
    $ mysql -u root -p
    > create database testdb;
    > use testdb;
    > create table testtable (id int , name varchar(20));
    > insert into testtable values (1 , 'Hikari Ishida');
    > select * from testtable;
    > quit
    ```

8. 接続しているコンテナ内での作業が終わったら、コンテナの接続から抜ける。

    ```
    $ exit
    ```

9.  起動しているコンテナを停止する。

    ```
    $ docker stop [コンテナID または コンテナ名]
    ```

10. コンテナが停止したことを確認する。

    ```
    $ CONTAINER ID  IMAGE                            COMMAND     CREATED         STATUS                      PORTS  NAMES
    f810b8f0a2e1  docker.io/library/centos:latest  /sbin/init  15 minutes ago  Exited (130) 4 seconds ago         test-docker
    ```

## 3. コンテナをイメージファイルに保存

1. コンテナをイメージに保存する。

    ```
    $ docker commit [コンテナID または コンテナ名] [イメージ名]
    ```

2. イメージに保存されたことを確認する。

    ```
    $ docker images
    localhost/test-podman-image   latest   4c67f61cf642   37 seconds ago   707 MB
    docker.io/library/centos      latest   0f3e07c0138f   3 months ago     227 MB
    ```

3. イメージファイルを`/tmp`に保存する。

    ```
    $ cd /tmp
    $ docker save [コンテナID または コンテナ名] > [イメージファイル名].tar
    ```

4. イメージファイルが保存されていることを確認する。

    ```
    $ ls -la
    -rw-r--r--.  1 root root 706926080  1月  5 21:11 test-podman-docker.tar
    ```

## 4. イメージファイルからコンテナを作成

1. イメージファイルをロードする。

    ```
    $ docker load -i [イメージファイル名].tar
    ```

2. イメージファイルがロードされたことを確認する。

    ```
    REPOSITORY                    TAG      IMAGE ID       CREATED          SIZE
    localhost/test-podman-image   latest   4c67f61cf642   25 minutes ago   707 MB
    ```

3. 2章を参照し、ロードしたイメージからコンテナを作成する。

    ```
    $ docker run -d --privileged --hostname [ホスト名] --name [コンテナ名] centos /sbin/init
    $ docker exec -it [コンテナID または コンテナ名] /bin/bash
    ```

4. コンテナに接続したことを確認する。

    ```
    $ hostname
    test2docker
    $ cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core)
    ```

5. ロードしたイメージで作業していた内容がコンテナに保存されているか確認する。本書では2章にてコンテナ内で作業したMariaDBの操作が保存されているか確認する。

   ```
   $ systemctl status mariadb
   ● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-01-05 12:37:49 UTC; 58s ago
   $ mysql -u root -p
   > use testdb;
   > select * from testtable;
   +------+---------------+
   | id   | name          |
   +------+---------------+
   |    1 | Hikari Ishida |
   +------+---------------+
   ```

## 最後に
CentOS8にPodmanをインストールすることで検証環境用や開発用ののコンテナを作成することができます。また作業中コンテナをイメージファイルに保存することで、同一環境のコンテナを素早く構築することができます。