Для того чтобы загрузить свой образ в репозиторий необходимо иметь логин и пароль на репозиторий. В этой статье я буду рассматривать Docker Hub в качестве репозитория. Первым делом необходимо зарегистрироваться на сайте Docker Hub.

После регистрации необходимо залогиниться на Docker Hub со своего устройства, используя docker login.

docker login
Username: jadqvmirmitclcmwwm
Password:
Login Succeeded

Выполняя команду выше, я не указывал web-адрес репозитория, потому что по умолчанию используется Docker Hub. Если вдруг нужно залогиниться на другом репозитории к самой команде добавляем url репозитория, например, docker login registry.example.com.

После удачной авторизации в системе создаётся файл с вашим логином и токеном для доступа к репозиторию.

sudo cat /home/admin/.docker/config.json
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "amFkcXZtaXJtaXRjbGNtd3dtOmphZHbUBrdmhydy5jb20="
                }
        }

Поэтому после того как вы выполнили загрузки образа в репозиторий лучше выполнить docker logout.

ЗАГРУЗКА ОБРАЗА В DOCKER HUB

Одинаковый NAMESPACE

В этой статье я расписывал как происходит наименование образов в Docker. И очень важно знать, что образ, который вы собираетесь отправить в репозиторий должен иметь такой же NAMESPACE, как и ваше имя пользователя в репозитории. Но это не всегда так, некоторые репозитории не привязаны к этому, но Docker Hub требует именно этого.

docker image ls
ynwasg/build12                      1.2               d2a2ec50e235   14 hours ago   124MB
docker push ynwasg/build12
The push refers to repository [docker.io/ynwasg/build12]
tag does not exist: ynwasg/build12:latest

Теперь же я добавлю новый тэг для этого образа и NAMESPACE задам такой же как имя моего пользователя на Docker Hub, после чего попробую еще раз сделать docker push.

docker image tag ynwasg/build12:1.2 jadqvmirmitclcmwwm/build12:1.1
docker image ls
jadqvmirmitclcmwwm/build12          1.1               d2a2ec50e235   15 hours ago   124MB
docker push jadqvmirmitclcmwwm/build12:1.1
The push refers to repository [docker.io/jadqvmirmitclcmwwm/build12]
5b7bc18f2b9b: Pushed
755f21c870f5: Pushed
235e81929876: Mounted from library/python
9ba402f61141: Mounted from library/python
15eb6aec49b3: Mounted from library/python
d7c97cb6f1fe: Mounted from library/python
1.1: digest: sha256:c768e2220b5b0f8e11ab4934577d192776c7e3728e5824b31c06e5cf2bd1979d size: 1573

Теперь, когда имя моего пользователя на Docker Hub и NAMESPACE образа совпадают образ удачно загрузился в репозиторий.

Как работает docker push

При вызове команды docker push происходит следующее:

  1. Проверка залогинен ли пользователь в репозитории
  2. Проверка существующих слоёв в репозитории
  3. Отправка только новых слоёв в репозиторий
  4. Добавление или обновление тэга образа

ПРОЦЕСС DOCKER PUSH