こんにちは。
プログラミング初学者です。
ローカル環境でdockerの構築が終わり、railsでのアプリ作成を行っている最中です。
今更ながらDockerHubにイメージをプッシュしたので、備忘録的にまとめてみました。
また、色々参考記事とかみたのですが、私がみたものと今のDockerHubではUIが若干異なっているので、画像付きでまとめてみました。
概要
目的:DockerHubに自作のイメージをプッシュする。
DockerHubとは?
ユーザーが作成したコンテナをアップロードして公開・共有できるサービスで、ここで公開されているコンテナは自由にダウンロードして自分のサーバーに簡単にデプロイできる。公開されているコンテナは「リポジトリ」という単位で管理され、タグを使ったバージョン管理も可能だ。
参考記事: Dockerコンテナをクラウドサービス上で共有できる「Docker Hub」を使ってみる
前提条件
・DockerHubのアカウント作成済み
・GitHubにリポジトリのプッシュ済み
実行
DockerHubとGitHubの連携。(実施済みは飛ばしてヨシ)
①トップページより自分のアカウントタブをクリックし、「Account Settings」へ遷移する。
②左のメニューより「Linked Accounts」のタブをクリック。画面中央やや下に「GitHub」があり、その右の方にある「Connect」をクリック。
③GitHubの画面へ遷移するので、パスワードを入力し、ログインする。
④再度DockerHubの先程の画面にリダイレクトされる。画像のように、コンセントマークの斜線と「Connect」の文字が消えていれば連携完了。
DockerHubへイメージをプッシュ!
①トップページより青色背景に白文字の「Create Repository」をクリック
②自分のDockerHubIDであることを確認の上、NameやDescriptionにイメージの名前、説明などを簡単に記載する。「Visibility」はお好みに合わせて、プライベートかパブリックを選択する。(DockerHub無料枠ではプライベートリポジトリの数に制限があるみたいなので注意。)
③「Build Settings」にてGitHubを選択すると、自分のGitHubIDを選べ、その後自分がGitHubにプッシュしたリポジトリたちの中から、DockerHubにプッシュしたいリポジトリを選択することができる。
④さらに「BUILD RULES +」をクリックすることで詳細の設定が可能。
デフォルトでは「Source Type」がBranch
で、「Source」がmaster
、「Docker Tag」がlatest
で「Dockerfile location」がDockerfile
となっています
ここでは「Docker Tag」のlatest
を1.0
に変更し、バージョンを番号で管理することとします。
また、「Dockerfile location」はGitHubにプッシュしているリポジトリの中に、ルートディレクトリにしっかりとDockerfile
という名前でファイルを保存してあれば、変更しなくても大丈夫です。
⑤では、「Create & Build」で実行しましょう!!
するとプッシュしたリポジトリのメイン画面へ遷移します。
その裏側ではBUILDが実行されています。(これには数分〜数十分の時間がかかる場合があります。)
「Builds」のタブに遷移し、下の方にAutomated Buildsの欄において、「Latest Build Status」がPENDING
とかIN PROGRESS
であればビルド中です。
SUCCESS
になれば完了ですね!
⑤ビルドが完了すると、「General」タブよりプッシュしたものの詳細が閲覧できます。
「Tags and Scans」のTag
の1.0(これは先程指定したDocker Tagですね)
を選択するとイメージレイヤーなどが閲覧できます。
また、使用したGitHubのリポジトリ内にREADMEがあれば、それもこの「General」タブの下の方で閲覧ができます。すごい!
これでプッシュ完了です。パブリックにしたことで全世界のユーザーがdocker pull
コマンドであなたのプッシュしたdocker imageを入手することができちゃいます。
また、Dockerfileを変更するたびにプッシュしておくことで、バージョン管理ができ、GitHubのように万が一エラーが生じた時に戻したりするときに使えますね。ありがたや。
まとめ
ビルドに時間がかかって、「なぜかプッシュできてない??」とテンパってしまったので、備忘録的にまとめてみましたが、なんら難しい手順はありませんね。。。
ターミナルからでもdocker push
コマンドでプッシュしていけるので、これも簡単で良いですね。
ご覧いただきありがとうございました。