Your Docker ID
You can search for Docker images and pull them from Docker Hub without signing in or even having an account. However, to push images, leave comments, or to star a repository, you need a free Docker ID to log in to Docker Hub.
Once you have a personal Docker ID, you can also create or join Docker Hub Organizations and Teams.
Register for a Docker ID
If you’re not already logged in, go to Docker Hub to use the sign up page. A valid email address is required to register. A verification email is sent to this address to activate your account.
You cannot log in to your Docker ID until you verify the email address.
Confirm your email
Once you’ve filled in the registration form, check your email for a welcome message asking for confirmation so we can activate your account.
Login
After you complete the account creation process, you can log in any time using the web console with your Docker ID:

Or via the command line with the docker login command:
$ docker login
Your Docker ID is now active and ready to use.
Note: Your authentication credentials will be stored in the .dockercfg authentication file in your home directory.
Upgrading your account
Free Hub accounts include one private registry. If you need more private registries, you can upgrade your account to a paid plan directly from the Hub.
Password reset process
If you can’t access your account for some reason, you can reset your password from the Password Reset page.

Feedback? Questions? Suggestions?
Edit this page, file a ticket, or rate this page:
docker Узнать имя и/или ID контейнера (+ docker-compose)
![]()
Используя основную команду докера можно глянуть запущенные процессы:
docker ps
Или все когда-либо запускавшиеся:
docker ps -a
docker-compose Имена контейнеров
Перейдите в папку с манифестом docker-compose.yml и выполните команду:
Настройка локального хранилища Docker Registry

14.07.2021

Ivan

DevOps, Docker, Linux

комментариев 10
В этой статье мы покажем, как настроить Docker Registry в качестве своего приватного репозиторий Docker. Docker Registry можно использовать для хранения и обмена образами docker. Отдельно мы покажем, как настроить аутентификацию для доступа к docker registry.
Давайте для начала разберем, из чего состоят docker image. Образ или image состоит из слоев, которые накладываются друг на друга. Когда мы собираем контейнер из образа, каждая команда создает новый слой, который накладывается на предыдущий. При запуске контейнера, все слои образа, на основе которого собран контейнер доступны на чтение, а сам слой контейнера на запись. На основе контейнера можно также создать новый image.
Для этого можно выполнить команду:
sudo docker commit
Данной командой мы берем верхний уровень контейнера, тот, что доступен для записи и превращает его в слой для чтения.
Давайте попробуем запустить контейнер busybox, создать там файл и сделаем новый образ на основании данного контейнера.

- Запустите контейнер на базе стандартного образа busybox и подключитесь в виртуальную консоль. Подробнее, основные команды, для работы с docker описаны в предыдущей статье: # sudo docker run -it busybox sh
- Создайте файл внутри контейнера и выйдите из виртуальной консоли контейнера: # echo “test” >> 1.txt
# exit - Чтобы узнать id запущенного контейнера нужно выполнить: # sudo docker ps -a Вывод будет примерно такой: На основе вывода можно получить id контейнера 4fe2a4798dd0.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4fe2a4798dd0 busybox "zsh" 11 minutes ago Created 0c58c418bc01 busybox "bash" 11 minutes ago Created 5123105938c0 busybox "/bin/bash" 11 minutes ago Created
sha256:83ca3512880377a9fd03fd5cc80cbfd441b10ea71671ace0a72eeaa645128425
В ответ команда вернет вам хеш созданного образа. Чтобы посмотреть информацию о образе, выполните команду:
# sudo docker image inspect 83ca3512880377a9fd03fd5cc80cbfd441b10ea71671ace0a72eeaa645128425
В выводе мы получим информацию о созданном образе.
[ "Container": "4fe2a4798dd0dc3d9ae54f11db18dc8db9bf84f5d0ed3bdffc2a73eae9515186", --------------
Вы можете просмотреть, какие команды были выполнены при сборке образа. Для это в консоли выполните команду:
sudo docker history mybusybox:v1
Вывод будет такой. На данном скриншоте видно, какие команды привели к созданию новых слоев в образе.

IMAGE CREATED CREATED BY SIZE 83ca35128803 3 days ago zsh 0B 22667f53682a 2 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0B 2 weeks ago /bin/sh -c #(nop) ADD file:d1deae83af20a7959… 1.23MB
Мы вкратце рассмотрели устройство образа docker. Данная информация будет полезна, для понимания механизмов работы docker registry.
Настройка и запуск Docker Registry
Docker Registry — это инструмент, хранения и обмена docker образами. Его образ можно скачать и запустить с официального репозитория Docker Hub.
Для запуска docker registry выполните в консоли:
# sudo docker run -d -p 5000:5000 —restart=always —name registry registry:2
Эта команда скачает registry и запустит контейнер на порту 5000 (ключ -p 5000:5000). Данный контейнер будет запускаться автоматически при старте docker.
В минимальной конфигурации мы запустили наш частный аналог docker hub. Давайте попробуем отправить свой образ в только что созданный репозиторий. Для это нам нужно протегировать образ. Возьмем для примера, образ, который мы создали в прошлой статье. Либо можете использовать любой другой образ:
# sudo docker tag microsevice_v1 :5000/microsevice_v1
Данной командой мы добавили тег для локального образа. Формат тега:
В моем случае это будет:
# sudo docker tag microsevice_v1 192.168.0.19:5000/microsevice_v1
Можно указать localhost:5000, но тогда вы не сможем выполнить pull данного образа с другого компьютера в сети. Также можно указать hostname, если у вас настроен DNS.
# sudo docker push 192.168.0.19:5000/microsevice_v1
Вывод консоли будет примерно таким:
The push refers to repository [192.168.0.19:5000/microsevice_v1] Get https://192.168.0.19:5000/v2/: http: server gave HTTP response to HTTPS client
Утилита docker ожидает, что registry работает по защищенному соединению HTTPS. Можно разрешить подключение по незащищенному протоколу, для в конфигурационный файл демона docker нужно добавить следующую строку:
# sudo nano /etc/docker/daemon.json
После чего перезапустить демон docker.
# sudo systemctl restart docker
Еще раз попробуйте команду push.
Вывод будет примерно такой:

The push refers to repository [192.168.0.19:5000/microsevice_v1] e547e1a2483f: Layer already exists efda78b6f2ad: Layer already exists 8c41c444e844: Layer already exists 042a80566ff4: Layer already exists 151a914ab9a4: Layer already exists be340e26398b: Layer already exists d7994f7c0aa0: Layer already exists 0bd71a837902: Layer already exists 13cb14c2acd3: Layer already exists latest: digest: sha256:0ae5b4cf9e0f6891b6b83ef62beeb6a97247fc9bd1057fba91476fea834b781e size: 2203
Ваш образ должен успешно отправился в ваш приватный репозиторий.
Чтобы посмотреть список images в репозитории можно воспользоваться curl или браузером:
# curl -X GET http://192.168.0.19:5000/v2/_catalog

Теперь можно создать Dockefile и указать в качестве источника образа свой приватный репозиторий.
Dockefile
FROM 192.168.0.19:5000/microsevice_v1 CMD ["uvicorn", "--host", "0.0.0.0", "main:app"]
Запустите сборку образа:
# sudo docker build .

Sending build context to Docker daemon 794.6kB Step 1/2 : FROM 192.168.0.19:5000/microsevice_v1 ---> de81735cd2c9 Step 2/2 : CMD ["uvicorn", "--host", "0.0.0.0", "main:app"] ---> Running in 126edf70fb82 Removing intermediate container 126edf70fb82 ---> 906f2df00d0c Successfully built 906f2df00d0c
Видно, что образ подтянулся с локального репозитория и собрался контейнер.
То же самое можно сделать командой run, если вам нужно просто запустить контейнер, а не использовать его за основу.
sudo docker run -d 192.168.0.19:5000/microsevice_v1
Данную команду можно выполнить на любом другом компьютере в сети, и тем самым мы обеспечили простой механизм переноса образов docker внутри сети. Docker Registry позволяет автоматизировать процесс deploy сервисов и их обмен при командной разработке.
Настройка авторизации в Docker Registry
Docker Registry поддерживает несколько способов аутентфикации, но в этой статье мы рассмотрим простую basic authentication.
Для начала установите утилиту, для генерации пароля:
sudo apt install apache2-utils
Затем создайте папку, для хранения настроек и Dockerfile.
# mkdir -p ~/docker-registry/auth/
# cd ~/docker-registry/auth/
Для генерации пароля выполните:
# htpasswd -Bc registry.password docker-adm
Где docker-adm — это имя пользователя (его можно изменить на произвольное), ключ -B это принудительное шифрование пароля bcrypt, -с путь и имя создаваемого файла.

New password: Re-type new password: Adding password for user docker-adm
Утилита запросит пароль и подтверждение, после чего создаст файл
registry.password.
Перейдите на уровень выше в папку ~/docker-registry/
Запустите docker-registry со следующими переменными окружения:
docker run -d -p 5000:5000 -e REGISTRY_AUTH=htpasswd -e REGISTRY_AUTH_HTPASSWD_REALM=Registry -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data -v «$PWD/data:/data» -v «$PWD/auth:/auth» —name registry registry:2
Ключи -e позволяют передать в контейнер переменные окружения(environment).
- REGISTRY_AUTH — тип аутентификации, htpasswd;
- REGISTRY_AUTH_HTPASSWD_REALM — это заголовок realm описанный в RFC 7235;
- REGISTRY_AUTH_HTPASSWD_PATH — это путь до файла registry.password внутри контейнера, его не следует менять;
- REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY — это путь до директории, где будет храниться образы внутри контейнера.
Команда длинная, лучше ее скопировать в текстовый файл, или в sh скрипт. Пример скрипта, можно взять здесь
Ключ -v нужен, чтобы пробросить директории с host машины в контейнер. В нашем примере указано, что директория «$PWD/auth» — где $PWD это текущая директория, из которой производится запуск + auth будет смонтирована в контейнер в директорию /auth. Аналогично и второй ключ -v.
Вывод в консоль после выполнения команды:

Создался конейнер с hash: 6f430176572dfeca6e81be763206ea35d182facacd27ca9e732822b523d8906a
Если вы видите следующую ошибку:

docker: Error response from daemon: Conflict. The container name "/registry" is already in use by container "6f430176572dfeca6e81be763206ea35d182facacd27ca9e732822b523d8906a". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.
В данном случае контейнер уже запущен (мы его запустили в самом начале работы с docker registry). Можно остановить его и удалить контейнер командой:
# sudo docker stop registry && sudo docker rm registry
Теперь можно повторить запуск registry.
Для проверки аутентфикации, перейдите по адресу:
http://192.168.0.19:5000/v2/_catalog
В окне нужно указать логин и пароль, который был указан при генерации файла registry.password.

Если вы выполните аутентификацию, в окне браузера отобразится содержимое docker репозитория.

Наш репозиторий пуст.
Если выполнить команду push , указанную ранее, в registry появится один образ:

Но важно, теперь чтобы выполнить push в репозиторий, нужно сначала авторизоваться через консоль. Для этого нужно выполнить:
# sudo docker login login http://192.168.0.19:5000
# sudo docker push 192.168.0.19:5000/microsevice_v1

Username: docker-adm Password: WARNING! Your password will be stored unencrypted in /home/devel/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
В дальнейшем, мы будем использовать registry для автоматизации развертывания сервисов в kubernetes.
Предыдущая статья Следующая статья
Читайте далее в разделе DevOps Docker Linux

Настройка аутентификации в Nginx через Active Directory (LDAP)
Создаем и публикуем простой микросервис в Docker
Установка и настройка Kubernetes, запуск приложения в кластере K8s
Работа с образами — Docker: Основы
Docker — больше, чем просто программа. Это целая экосистема со множеством проектов и сервисов.
В работе с Docker часто приходится иметь дело с Registry. Это хранилище образов, которое работает как репозиторий пакетов любого пакетного менеджера. Именно здесь хранятся образы, которые Docker скачивает во время выполнения команды docker run . Посмотреть список образов хранилища можно на сайте https://hub.docker.com/ .
docker images
Список образов, скачанных на компьютер, можно посмотреть командой docker images :
# В вашем случае вывод будет отличаться docker images REPOSITORY TAG IMAGE ID CREATED SIZE workshopdevops*web latest cfd7771b4b3a 2 days ago 817MB hexletbasics*app latest 8e34a5f631ea 2 days ago 1.3GB mokevnin/rails latest 96487c602a9b 2 days ago 743MB ubuntu latest 2a4cca5ac898 3 days ago 111MB ruby 2.4 713da53688a6 3 weeks ago 687MB ruby 2.5 4c7885e3f2bb 3 weeks ago 881MB nginx latest 3f8a4339aadd 3 weeks ago 108MB elixir latest 93617745963c 4 weeks ago 889MB postgres latest ec61d13c8566 5 weeks ago 287MB
Вторая колонка в выводе выше называется TAG. Когда мы выполняли команду docker run nginx , то на самом деле выполнялась команда docker run nginx:latest . То есть мы не просто скачиваем образ nginx, а скачиваем его конкретный тег. latest — тег по умолчанию. По задумке он обозначает последнюю версию образа.
Такая работа с тегами не является строгим правилом. Конкретный образ вообще может не иметь тега latest, либо иметь, но он не будет содержать последние изменения, просто потому, что никто их не публикует. Впрочем, популярные образы следуют соглашению.
Теги в Docker изменяемы. Другими словами, создатель образа может перезаписать образ, связанный с любым тегом. Такой подход может показаться странным и ненадежным, ведь нет гарантий. К счастью, на практике, есть определенные соглашения, которым стараются следовать все популярные образы. Тег latest действительно содержит последнюю версию и постоянно обновляется, но кроме этого тега активно используется семантическое версионирование . Рассмотрим теги https://hub.docker.com/_/nginx
Теги с полной семантической версией (x.x.x) делают неизменяемыми, даже если в них встречается что-то еще — например, 1.12.2-alpine. Такую версию смело можно брать для продакшен-окружения, так как создатели образа гарантируют, что они будут следовать общим правилам. Теги, подобные такому 1.12, обновляются при изменении patch версии. То есть внутри образа может оказаться и версия 1.12.2 и в будущем 1.12.8. Точно такая же схема и с версиями, в которых указана только мажорная версия, например, 1. Только в данном случае обновление идет не только по патчу, но и по минорной версии.
docker pull
Как влияют теги на работу команды docker run во время скачивания образа? docker run скачивает образ если его нет, но эта проверка не связана с обновлением содержимого. Если nginx:latest обновился, то docker run его не будет скачивать, он использует тот latest, который прямо сейчас уже загружен. Для гарантированного обновления образа существует другая команда: docker pull . Вот она всегда проверяет, обновился ли образ для определенного тега.
# Пытается скачать обновления в образе # даже если он присутствует в локальной системе docker pull nginx
Кроме тегов имя образа может содержать префикс, например, etsy/chef . Этот префикс является именем аккаунта на сайте, через который создаются образы, попадающие в Registry. Большинство образов как раз такие, с префиксом. И есть небольшой набор, буквально сотня образов, которые не имеют префикса. Их особенность в том, что эти образы поддерживает сам Docker. Поэтому если вы видите, что в имени образа нет префикса, значит это официальный образ. Список таких образов можно увидеть здесь .
docker rmi
Удаляются образы командой docker rmi .
Удаление иногда бывает нужно, когда заканчивается место. Образы могут быть тяжелыми и в случае ограниченных ресурсов их регулярно удаляют.
Если в Docker присутствует хоть один контейнер из удаляемого образа, то Docker не даст его удалить, так как это автоматически бы привело к исчезновению всех контейнеров, что может быть нежелательным поведением. Если вы все же хотите удалить и образ, и все контейнеры, связанные с ним, используйте флаг -f .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: