最終更新日:
公開日:
WEB制作
コンテナイメージをDockerHubにpushして共有する
DockerHubにコンテナイメージをpushしてリポジトリにアップロードし、共有する方法について解説します。
この記事のポイント
- DockerHubにコンテナイメージをpushするにはDockerアカウントのユーザー名と同じイメージ名をつける
- タグは何も設定しなければ「latest」になる
- pushするとリポジトリにすぐ反映される
目次
コンテナイメージをpushする
前回まで、コンテナイメージをビルドして実際にコンテナを起動し、動作を確認してきました。
今回は作成したコンテナイメージをDockerHubの自分のリポジトリにpushして、コンテナイメージを共有できる状態にしていきます。
前回までにコンテナイメージの作成はPHP、Pythonに分けて進めてきましたが、解説ではphpのコンテナイメージを使って進めていきます。
他の言語であっても手順は同じなので、置き換えて進めてください。
全体の流れとして、次の手順で進めていきます。
- コンテナイメージにリポジトリ用イメージ名とタグを設定する
- Dockerアカウントでログイン
- コンテナイメージを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(ダウンロード)して、他の環境でも全く同じコンテナが起動できることを確認していきます。