Docker Hubにイメージをプッシュする

こんにちは。
プログラミング初学者です。
ローカル環境でdockerの構築が終わり、railsでのアプリ作成を行っている最中です。
今更ながらDockerHubにイメージをプッシュしたので、備忘録的にまとめてみました。
また、色々参考記事とかみたのですが、私がみたものと今のDockerHubではUIが若干異なっているので、画像付きでまとめてみました。

## 概要
目的：DockerHubに自作のイメージをプッシュする。

##### DockerHubとは？
>> ユーザーが作成したコンテナをアップロードして公開・共有できるサービスで、ここで公開されているコンテナは自由にダウンロードして自分のサーバーに簡単にデプロイできる。公開されているコンテナは「リポジトリ」という単位で管理され、タグを使ったバージョン管理も可能だ。

参考記事：　[Dockerコンテナをクラウドサービス上で共有できる「Docker Hub」を使ってみる](https://knowledge.sakura.ad.jp/2210/)

##### 前提条件
・[DockerHub](https://hub.docker.com/)のアカウント作成済み
・GitHubにリポジトリのプッシュ済み

## 実行

#### DockerHubとGitHubの連携。（実施済みは飛ばしてヨシ）
##### ①トップページより自分のアカウントタブをクリックし、「Account Settings」へ遷移する。
[![Image from Gyazo](https://i.gyazo.com/c48d172aafa98f1d3406b75c90f22cfa.png)](https://gyazo.com/c48d172aafa98f1d3406b75c90f22cfa)

##### ②左のメニューより「Linked Accounts」のタブをクリック。画面中央やや下に「GitHub」があり、その右の方にある「Connect」をクリック。
[![Image from Gyazo](https://i.gyazo.com/1610e21a7878f84888f9db5bdd4314fd.png)](https://gyazo.com/1610e21a7878f84888f9db5bdd4314fd)

##### ③GitHubの画面へ遷移するので、パスワードを入力し、ログインする。

##### ④再度DockerHubの先程の画面にリダイレクトされる。画像のように、コンセントマークの斜線と「Connect」の文字が消えていれば連携完了。
[![Image from Gyazo](https://i.gyazo.com/bfaceb852af322fd195d510f241b6a02.png)](https://gyazo.com/bfaceb852af322fd195d510f241b6a02)

#### DockerHubへイメージをプッシュ！
##### ①トップページより青色背景に白文字の「Create Repository」をクリック
[![Image from Gyazo](https://i.gyazo.com/980c384327d7d32b6d5d9881b8747a04.png)](https://gyazo.com/980c384327d7d32b6d5d9881b8747a04)

##### ②自分のDockerHubIDであることを確認の上、NameやDescriptionにイメージの名前、説明などを簡単に記載する。「Visibility」はお好みに合わせて、プライベートかパブリックを選択する。（DockerHub無料枠ではプライベートリポジトリの数に制限があるみたいなので注意。）
[![Image from Gyazo](https://i.gyazo.com/8f5fb6650baaca186e8efe9a5933ad5d.png)](https://gyazo.com/8f5fb6650baaca186e8efe9a5933ad5d)

##### ③「Build Settings」にてGitHubを選択すると、自分のGitHubIDを選べ、その後自分がGitHubにプッシュしたリポジトリたちの中から、DockerHubにプッシュしたいリポジトリを選択することができる。
[![Image from Gyazo](https://i.gyazo.com/16691480874b16c85b7aa96a0e07003a.png)](https://gyazo.com/16691480874b16c85b7aa96a0e07003a)

##### ④さらに「BUILD RULES　＋」をクリックすることで詳細の設定が可能。
デフォルトでは「Source Type」が`Branch`で、「Source」が`master`、「Docker Tag」が`latest`で「Dockerfile location」が`Dockerfile`となっています
ここでは「Docker Tag」の`latest`を`1.0`に変更し、バージョンを番号で管理することとします。
また、「Dockerfile location」はGitHubにプッシュしているリポジトリの中に、ルートディレクトリにしっかりと`Dockerfile`という名前でファイルを保存してあれば、変更しなくても大丈夫です。
[![Image from Gyazo](https://i.gyazo.com/74d8d02d46ce8fcf1673d42c541c8f11.png)](https://gyazo.com/74d8d02d46ce8fcf1673d42c541c8f11)

##### ⑤では、「Create & Build」で実行しましょう！！
するとプッシュしたリポジトリのメイン画面へ遷移します。
その裏側ではBUILDが実行されています。（これには数分〜数十分の時間がかかる場合があります。）
「Builds」のタブに遷移し、下の方にAutomated Buildsの欄において、「Latest Build Status」が`PENDING`とか`IN PROGRESS`であればビルド中です。
[![Image from Gyazo](https://i.gyazo.com/ca37b691a044ddd124173e48f963a16d.png)](https://gyazo.com/ca37b691a044ddd124173e48f963a16d)

`SUCCESS`になれば完了ですね！

##### ⑤ビルドが完了すると、「General」タブよりプッシュしたものの詳細が閲覧できます。
「Tags and Scans」の`Tag`の`1.0(これは先程指定したDocker Tagですね)`を選択するとイメージレイヤーなどが閲覧できます。
[![Image from Gyazo](https://i.gyazo.com/73f7de645313acf5b4935ff4cbb4e71f.png)](https://gyazo.com/73f7de645313acf5b4935ff4cbb4e71f)

また、使用したGitHubのリポジトリ内にREADMEがあれば、それもこの「General」タブの下の方で閲覧ができます。すごい！
[![Image from Gyazo](https://i.gyazo.com/77fee2e0f0a81f36808b0bd6e1dd6a31.png)](https://gyazo.com/77fee2e0f0a81f36808b0bd6e1dd6a31)

#### これでプッシュ完了です。パブリックにしたことで全世界のユーザーが`docker pull`コマンドであなたのプッシュしたdocker imageを入手することができちゃいます。
また、Dockerfileを変更するたびにプッシュしておくことで、バージョン管理ができ、GitHubのように万が一エラーが生じた時に戻したりするときに使えますね。ありがたや。

## まとめ

ビルドに時間がかかって、「なぜかプッシュできてない？？」とテンパってしまったので、備忘録的にまとめてみましたが、なんら難しい手順はありませんね。。。
ターミナルからでも`docker push`コマンドでプッシュしていけるので、これも簡単で良いですね。

ご覧いただきありがとうございました。