Podman(Docker互換のコンテナエンジン)で作成したDockerFileをDockerHubのDockerイメージとして保存する

# 概要
本書ではDocker互換のコンテナエンジンであるPodmanを使用し、DockerFileを作成します。その後、Github経由でPodmanからDockerHubにDockerイメージとして保存します。

## 前提条件
* DockerHub,GitHubのアカウントを作成していること。
* CentOS8をインストールしていること。
* 本書ではWindows 10 Pro (Hyper-V)を使用します。
* 本書では podman-docker パッケージをインストールします。
* Podmanのインストールについてはこちらをご覧ください。[リンク先](https://qiita.com/yuichi1992_west/items/4a96e12fa41f9e0c5e19)

## 0.主な流れ

1. PodmanでDockerFileを作成する。
2. PodmanでDockerFileを検証する。
3. GitHubにDockerFileを上げる。
4. DockerHubにてGitHub上のDocerFileからDockerイメージを作成する。

## 1. GitHubの設定

0章の3,4のように、3章で作成するDockerFileをGitHubに上げる必要があります。その為、GitHub上でリポジトリ(repository)を作成してください。

## 2. DockerHubの設定

1. ブラウザからDockerHubに移動し、ログインする。
![dockerhub_001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/595c8b9a-6042-0f1a-5e1f-9b39d81cf2b8.jpeg)

2. 上部メニューから「Repositories」をクリックする。
![dockerhub_002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/0450d3b5-45b3-519a-06ef-1184a9234bd3.jpeg)

3. 「Create Repository」をクリックする。
![dockerhub_003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/07a3c345-3076-1adf-7eef-25ccb8593a32.jpeg)

4. 下記の内容を入力し、「Create」をクリックする。
 * リポジトリ名
 * 説明
 * Visibillity : PublicかPrivateのどちらかを選択
 * Build Setting : GitHubを「Connected」にする。(GitHubの認証画面が表示されます)
![dockerhub_004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c6c50fa3-8b41-42c9-c79b-a3e901761729.jpeg)

5. リポジトリが作成されたことを確認する。
![dockerhub_005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/f13e5ea0-91dc-ad16-d8bc-3961d8315136.jpeg)

6. 上部メニューの「Builds」をクリックする。
![dockerhub_007 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c3c56245-9bf6-3658-a35f-8510244c4ed8.jpeg)

7. 「Link to GitHub」をクリックする。
![dockerhub_007.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/68db42da-3fd6-e794-8d1d-84a30bb92bf8.jpeg)

8. 下記の内容をクリックし、「Save」をクリックする。
 * SOURCE REPOSITORY : リポジトリ名
 * AUTOTEST : Internal and External Pull Requests
 * Autobulid : ON
 * Build Caching : ON
![dockerhub_008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/007c1f70-2585-cd42-cd94-f35838529af4.jpeg)

9. 「Build Activity」の画面が表示されたことを確認する。
![dockerhub_009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/47277417-3a25-62aa-bc0e-5843bf90194a.jpeg)

## 3. DockerFileの作成

1. 5章でGitHubに上げるために、リポジトリ専用のディレクトリを作成する。

    ```
    $ mkdir [ディレクトリ名]
    $ cd [ディレクトリ名]
    ```

2. DockerFileをエディターにて作成する。例として本書ではviで作成する。

    ```
    $ vi DockerFile
    ```

3. エディターにてDockerFileを作成する。例として本書では下記のようにDockerFileを作成した。

    ```
    FROM centos:8
    LABEL maintainer="yuichi1992"
    RUN dnf -y install mariadb mariadb-server
    RUN dnf -y install httpd
    RUN echo "test-page" > /var/www/html/index.html
    RUN systemctl enable mariadb
    RUN systemctl enable httpd
    ```

4. 作成したDockerFileを保存する。(viではコマンドモードで`:wq`)

## 4. DockerFileの検証

1. DockerFileをDockerImageに変換する。

    ```
    $ docker build ./ -t [名前]
    ```

2. エラーが発生せずにコマンドが実行できたことを確認する。

3. DockerFileから生成したDockerImageを確認・使用する。

    ```
    $ docker images
    $ docker run -t -i [イメージID] /bin/bash
    
    コンテナ内にてmariadb,httpdがインストールされているか確認
    $ rpm -qa | grep maria
    $ rpm -qa | grep httpd
    $ cat /var/www/html/index.html
    ```

## 5. GitHubにDockerFileを上げる

1. 下記のコマンドを実行し、DockerFileをGitHubに上げる。

    ```
    $ git init
    $ git add .
    $ git commit -m "First Commit"
    $ git remote origin [リモートリポジトリ名]
    $ git push -f origin master
    ```

2. GitHubに移動し、DockerFileが上がっていることを確認する。
![dockerhub_010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/6dc0777b-906c-821e-56fa-4f796dd68cae.jpeg)

## 6. DockerHubの確認

1. ブラウザにてDockerHubに移動し、リポジトリのメニューから「Builds」をクリックする。
![dockerhub_007 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/1c77b455-313d-2c55-4c70-b22bfc547d8a.jpeg)

2. 「Automated Builds」にてGitHubのDockerFileが認識されていることを確認する。その後、「Trigger」をクリックする。
![dockerhub_011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/81fa73bd-95a7-be00-d9c4-c285ea9117f7.jpeg)

3. 「PENDING」と表示されるので待機する。
![dockerhub_013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/c5ba2913-17d9-08ea-f5c3-5d31c85414a6.jpeg)

4. 「SUCCESS」と表示されたことを確認する。
![dockerhub_015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/363c3d1d-a868-0019-d367-b01528f6122a.jpeg)

5. 上部メニューの「Tags」をクリックする。
![dockerhub_018 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/6eb194f5-592e-7ae9-e8cb-3117b288468d.jpeg)

6. Dockerイメージが生成されたことを確認する。
![dockerhub_018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307261/a205df33-a370-0d6a-c8e1-b464d97dedbe.jpeg)

## 最後に

Podmanを使用しDockerHubにDockerFileを上げることで、DockerHubにDockerイメージが保存されます。これによって他端末にDockerをインストールすることで、DockerHubで保存したDockerイメージを使用することができます。保存したDockerイメージは同一の環境なので、検証用の使い捨て環境などとして利用することができます。