Docker HubにDockerイメージをアップロードする(ECR等でも流用可能?)
自作のDockerイメージをDockerHubにアップロードすることができると、簡単に同一の環境を配布できます。DBをイメージ化すればマスタデータやトランザクションデータも含めて共有することもできますし、他システムに対して自システムをモックとしてコンテナで提供することができます。
便利ですので、ぜひアップロードする手順を覚えましょう。
なお、社内で使用しているJFrog Artifactoryでも同様の手順でアップロードすることができました。試してはいませんが、AWSのECR等にもアップロードすることができると思います。
環境
- Docker
- version 20.10.5, build 55c4c88
- Docker Hub
- 2021/06/02 時点
前提
- アップロードするDockerイメージが既にあること
- イチからDockerイメージを作る方法は解説しません
- Dockerはある程度知っていること
この記事でやること
公式のPostgreSQLのDockerイメージを自分のリポジトリにアップロードする
概要
- アップロード対象のリポジトリを作成します
- 1.で作成したリポジトリ名に合わせたタグ名を作成します
- 2.をアップロードします
対応
リポジトリの作成
Docker Hub公式からアカウントを作成して、ログインします。

「Create Repository」ボタンを押す。

好きな名前のリポジトリを作成します。今回はPostgreSQLを自分用にカスタマイズするため、「test-postgres」という名前で作成します。

タグ名を付与する
基本となるPostgreSQLのイメージをpullしてきます。
docker pull postgres
アップロード用に加工するため、イメージのIMAGE IDを控えます。今回は「293e4ed402ba」です。
docker images # 返却値 # REPOSITORY TAG IMAGE ID CREATED SIZE # postgres latest 293e4ed402ba 2 weeks ago 315MB
docker tagにて、今回のアップロード対象のリポジトリ名とタグを付与します。今回は、私のユーザ名「kirimaru」と先ほど作成した「test-postgres」にタグ名「003」を付与します。
# docker tag {IMAGE ID} {リポジトリ名}:{タグ名}
docker tag 293e4ed402ba kirimaru/test-postgres:003
docker images
# 返却値
# REPOSITORY TAG IMAGE ID CREATED SIZE
# kirimaru/test-postgres 003 293e4ed402ba 2 weeks ago 315MB
# postgres latest 293e4ed402ba 2 weeks ago 315MB
Docker Hubへのアップロード
アップロード先のDockerにログインしましょう。今回はDocker Hubですので、docker loginでログインできます。
もし、JFrog ArtifactoryやECR等の自前のレジストリサーバにアップロードしたい場合は、loginの後にサーバを設定します。
docker login
# docker login https://index.docker.io/v1/ # デフォルトのログイン先
# docker login {サーバ名}
# 返却値
# Authenticating with existing credentials...
# Login Succeeded
ログイン後にリポジトリ名とタグ名を付けて、docker pushをするだけでアップロードされます。
docker push kirimaru/test-postgres:003 # 返却値 # ... # 855f2bb415b9: Layer already exists # bdec2b2d7e4a: Layer already exists # 02c055ef67f5: Layer already exists # 003: digest: sha256:4bca01db9119d6003c03e55843ad15c54ab5c3c1b4a374e5550ceed18b2808be size: 3245
これで、先ほど作成したリポジトリのページに行くと、タグ名「003」がアップロードされていることが分かります。

リポジトリ名
リポジトリ Docker Hub
終わりに
リポジトリを作るページにアップロードするコマンドが書かれているので、特に調べなくても簡単にできるのはいいですね。
今回例としてPostgreSQLを挙げることに悩みました。DBでタグ名をつけるときはdocker tagではなく、稼働中のデータごとイメージ化できるdocker commitを使用する方が好みですが、一手間かけないといけないようで面倒なんですよね。(参考リンク参照)
まぁ、これをやってしまうとcommitのたびにイメージが膨らんでしまうので、良し悪しはありますね。会社で管理しているテスト用OracleDBのDockerは元々1GBのイメージだったのに、データ入れずとも15GBまで膨らんでしまった悩みもあります。どこかでリセットしなくては…。
Docker Hubだと毎月の利用制限もあるので無制限には使えませんが、JFrogであれば無料版もあるようなので、ぜひDockerを使いこなしてみてください。
この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。
参考
Docker-docs-ja: login docs.docker.jp
PostgreSQLをデータごとDockerコンテナ化する qiita.com
JFrog Artifactory jfrog.com
