BLOG

最終更新日:
公開日:

WEB制作

コンテナイメージをDockerHubにpushして共有する

DockerHubにコンテナイメージをpushしてリポジトリにアップロードし、共有する方法について解説します。

この記事のポイント

  • DockerHubにコンテナイメージをpushするにはDockerアカウントのユーザー名と同じイメージ名をつける
  • タグは何も設定しなければ「latest」になる
  • pushするとリポジトリにすぐ反映される

目次

コンテナイメージをpushする

前回まで、コンテナイメージをビルドして実際にコンテナを起動し、動作を確認してきました。
今回は作成したコンテナイメージをDockerHubの自分のリポジトリにpushして、コンテナイメージを共有できる状態にしていきます。

前回までにコンテナイメージの作成はPHP、Pythonに分けて進めてきましたが、解説ではphpのコンテナイメージを使って進めていきます。
他の言語であっても手順は同じなので、置き換えて進めてください。

全体の流れとして、次の手順で進めていきます。

  1. コンテナイメージにリポジトリ用イメージ名とタグを設定する
  2. Dockerアカウントでログイン
  3. コンテナイメージをpush(アップロード)

それでは1つずつ進めていきましょう。

コンテナイメージにリポジトリ用イメージ名とタグを設定する

まずは、コンテナイメージにリポジトリ用のコンテナイメージ名とタグを設定します。

コンテナイメージ名はビルドした際にすでに「hellophp」などと設定をしていますが、実はこのままではDockerHubのリポジトリにpushできません。
自分のリポジトリにpushする際は、「ユーザー名/コンテナイメージ名:タグ」の3つを設定する必要があります。

例えば、Dockerアカウントのユーザー名が「taro」だとして、コンテナイメージ名を「hellophp」、タグは最新版という意味で「latest」とします。
この場合、リポジトリ用のイメージ名は「taro/hellophp:latest」となります。

先頭のユーザー名は、次の手順でログインするDockerアカウントと必ず等しい必要があります。
もしユーザー名が異なるコンテナイメージをpushしようとすると、権限のないリポジトリにpushすることになるためエラーが起こります。

すでに元となるコンテナイメージがあるため、tagコマンドを使ってコンテナイメージの別名を設定します。

Dockerアカウントでログインする

# docker tag hellophp taro/hellophp:latest

docker tag」のすぐ後ろにある「hellophp」は元々ビルドされたコンテナイメージ名を指定します。
続く「taro/hellophp:latest」では、上記のルールに沿ったリポジトリ用のイメージ名とタグを指定します。

imageコマンドlsを使って、リポジトリ用のコンテナイメージがちゃんと作成されているか確認してみましょう。

Dockerアカウントでログインする

# docker image ls
REPOSITORY			TAG		IMAGE ID		CREATED	SIZE
taro/hellophp		latest		731c760de792	2 weeks ago		378MB
hellophp			latest		731c760de792	2 weeks ago		378MB

イメージ名は異なりますが、コンテナイメージは同じものを指すためイメージID(IMAGE ID)は同じになります。
以上で、リポジトリにpushするコンテナイメージを用意できました。

Dockerアカウントでログイン

続いて、Dockerアカウントのログインを行います。
DockerHubにコンテナイメージをpushするには、予めDockerアカウントでログインをしておく必要があります。
PowerShellかターミナルを開いて、loginコマンドを実行してください。

Dockerアカウントでログインする

# docker login

次のようにメッセージが表示されたら、ユーザー名とパスワードを入力してください。
すでにログイン状態の場合は「Login Succeeded」と表示されます。

Dockerアカウントでログインする

# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: taro
Password: 
Login Succeeded

以上でログイン完了です。

コンテナイメージをpush(アップロード)

いよいよDockerHubのリポジトリにコンテナイメージをpushしていきましょう。

PowerShellかターミナルで、次のpushコマンドを入力してください。

Dockerアカウントでログインする

# docker push taro/hellophp:latest

docker push」のすぐ後ろに、先ほどつけたリポジトリ用のイメージ名を指定します。

コンテナイメージを無事pushすると、次のように表示されます。

Dockerアカウントでログインする

# docker push taro/hellophp:latest
The push refers to repository [docker.io/taro/hellophp]
4892afbe326c: Pushed 
4511875f5a23: Pushed 
cdb018faf2de: Pushed 
cacc5b7aee7d: Pushed 
c2346c659df7: Pushed 
2b7b9c6931ec: Pushed 
0bd858268038: Pushed 
00bdf648ad3c: Pushed 
778c22283a6d: Pushed 
0318b3b010ef: Pushed 
d7b30b215a88: Pushed 
9717e52dd7bd: Pushed 
cf5b3c6798f7: Pushed 
latest: digest: sha256:5c15d4fc32ba5f94133b6e8bd404f0f560545647cec0572ce5d23a5d6b106fff size: 3035

もしpushの途中でうまくいかず、「denied: requested access to the resource is denied」と表示された場合は、Dockerアカウントのログインに失敗しているか、コンテナイメージ名につけたユーザー名がDockerアカウントと異なっている可能性があります。

正常に完了すると、DockerHubの自分のリポジトリにpushしたコンテナイメージが表示されます。

pushしたコンテナイメージが表示されたら成功です。

今回はここまでとなります。
次回はリポジトリにあるコンテナイメージをpull(ダウンロード)して、他の環境でも全く同じコンテナが起動できることを確認していきます。

前のページへ 一覧に戻る 次のページへ