きり丸の技術日記

技術・エンジニアのイベント・資格等はこちらにまとめる予定です

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. 1.で作成したリポジトリ名に合わせたタグ名を作成します
  3. 2.をアップロードします

対応

リポジトリの作成

Docker Hub公式からアカウントを作成して、ログインします。

f:id:nainaistar:20210602233740p:plain

「Create Repository」ボタンを押す。

f:id:nainaistar:20210602233756p:plain

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

f:id:nainaistar:20210602233816p:plain

タグ名を付与する

基本となる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」がアップロードされていることが分かります。

f:id:nainaistar:20210602233833p:plain

リポジトリ名

リポジトリ 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

f:id:nainaistar:20210602234027p:plain