メモ > サーバ > 各論: Docker > イメージを Docker Hub に保存
イメージを Docker Hub に保存
Docker Hub は、Docker社が管理する公開レジストリ
■Docker Hubに登録
https://hub.docker.com/ にアクセスし、以下を登録
(Docker IDにハイフンは使えなかった)
Docker ID: refirio
Email: refirio@example.com
Password: **********
「Choose a Plan」画面になるので、「Continue with Free」をクリック
「Please verify your email address」画面になるので、メールを確認して認証する
認証後、Docker Hubにログインできることを確認する
Docker Hub Container Image Library | App Containerization
https://hub.docker.com/
Docker Hub にイメージを保管する - Docker-docs-ja 1.9.0b ドキュメント
https://docs.docker.jp/engine/userguide/dockerrepos.html
【docker】DockerHubへの登録 - 自由気ままに書いちゃおう
https://www.guri2o1667.work/entry/2020/11/02/%E3%80%90docker%E3%80%91DockerHub%E3%81%B8%E3%81%AE%E7%...
■リポジトリの作成
Repositories → Create Repository にアクセスし、以下でリポジトリを作成
Name: test
Description: (空欄)
Visibility: Public
以下にリポジトリが作成された
https://hub.docker.com/repository/docker/refirio/test
リポジトリ作成直後は、「Last pushed」が「never」となっている
■イメージを作成
ローカル環境でイメージを作成
「php:8.1-apache」をもとに、追加でファイルを作成するだけのイメージを作成する
docker\php_create_file\Dockerfile … Dockerfileを作成
FROM php:8.1-apache
RUN touch /root/test1.txt
$ docker image build -t php:create_file docker/php_create_file … Dockerfileをもとに、新しいイメージをビルド
$ docker image ls … 作成されたイメージを確認
$ docker container run --name php_create_file -v $PWD/docker/php_create_file/code:/var/www/html -p 80:80 -d php:create_file
… 作成したイメージから起動
$ docker container exec -it php_create_file bash … phpコンテナのターミナルに接続
# ls /root … テストファイルを確認する
確認できたら、起動したコンテナは終了しておく
$ docker container ls
$ docker container rm -f aac2e02145eb
■イメージを登録
ローカル環境でDocker Hubにログイン
$ 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: refirio
Password:
WARNING! Your password will be stored unencrypted in /home/refirio/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
※ログイン情報は /home/refirio/.docker/config.json に保存されるみたい
暗号化されていないらしいが、生のままというわけでも無い
ログアウトすると削除されるみたい
いきなりプッシュしようとしても、以下のようなエラーになる
$ docker image push refirio/php_create_file:0.1
The push refers to repository [docker.io/refirio/php_create_file]
An image does not exist locally with the tag: refirio/php_create_file
プッシュしたいイメージを確認し、まずはタグ(別名)をつける
別名は「ユーザ名/イメージ名:タグ名」とする。タグ名は通常はバージョン情報を指定する
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php create_file 2f5eeeeb3991 15 minutes ago 414MB
$ docker image tag php:create_file refirio/test:0.1
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php create_file 2f5eeeeb3991 20 minutes ago 414MB
refirio/test 0.1 2f5eeeeb3991 20 minutes ago 414MB
$ docker image push refirio/test:0.1
The push refers to repository [docker.io/refirio/test]
682dac57ee22: Pushed
e91015d98cd4: Pushed
a8ada76173c3: Mounted from library/php
46a0f0111934: Mounted from library/php
d6da32e9bff2: Mounted from library/php
400f5ced50ab: Mounted from library/php
7485c1ee99c3: Mounted from library/php
b98c6acdec28: Mounted from library/php
86b5e34374f3: Mounted from library/php
c52f69d9a297: Mounted from library/php
c24f05541085: Mounted from library/php
82f581b09510: Mounted from library/php
3b7e206db54c: Mounted from library/php
575b147c7c31: Mounted from library/php
814bff734324: Mounted from library/php
0.1: digest: sha256:4ff22738d7b3a4fc343fb9d498f9c9e2d7d4d3f10086855f1db2daee8e957d80 size: 3449
以下などで確認すると、「Last pushed」が「2 minutes ago」などとなっている
https://hub.docker.com/repository/docker/refirio/test
https://hub.docker.com/r/refirio/test
Docker Hubからログアウト
$ docker logout
■イメージを利用
Docker Hubからの取得を確認できるようにするため、
「イメージを登録」でタグ付けしたイメージを以下で削除しておく
$ docker image ls
$ docker image rm refirio/test:0.1
イメージを再取得
$ docker container run --name dockerhub_test -v $PWD/docker/php_create_file/code:/var/www/html -p 80:80 -d refirio/test:0.1
… プッシュしたイメージから起動
$ docker container exec -it dockerhub_test bash phpコンテナのターミナルに接続
# ls /root … テストファイルを確認する
確認できたら、起動したコンテナは終了しておく
$ docker container ls
$ docker container rm -f 6d668f84cbad
■削除
以下からタグごとにイメージを削除できる
https://hub.docker.com/repository/docker/refirio/test/tags
■制限
Docker HubからのPullには回数制限が設けられているので注意
制限は徐々に強化されているみたい?
Docker HubのPull回数制限はすでに始まっている - Qiita
https://qiita.com/zizi4n5/items/7b9676aa2cfc9c5679ae
Docker Hub の pull 回数制限について - Qiita
https://qiita.com/zettaittenani/items/8693c600b24baa426fa7
仕事用にプライベートリポジトリを作成するなら、今はAWSのECRを使う方がいいかも
ECRを検証した時の内容は、AWS.txt の「Amazon Elastic Container Registry(Amazon ECR)」を参照
[速報]AWS、Docker Hubの代替を狙う「Amazon Elastic Container Registry Public」提供開始。AWS re:Invent 2020 − Publickey
https://www.publickey1.jp/blog/20/awsdocker_hubamazon_elastic_container_registry_publicaws_reinvent_...