Хранилище образов (hub)
Терминология
реестр (registry или hub) – сервис, отвечающий за хранение и распространение образов.
репозиторий (repository) – набор взаимосвязанных образов, обычно различные версии приложения
тег (tag) – алфавитно-цифровой идентификатор, присваиваемый образам внутри репозитория (например, 14.04 или stable). Тегов может быть много.
Пространства имен:
- начинающиеся с текстовой строки и слеша (/), такие как amouat/revealjs В репозитории Docker Hub это образы, выгруженные конкретным пользователем.
- имена без префиксов и слешей, принадлежат пространству имен «root», управляемому компанией Docker Inc.
- имена с префиксами в виде имени хоста или IP-адреса представляют образы, хранящиеся в сторонних реестрах (не в Docker Hub). Например, localhost:5000/wordpress
Docker сохраняет аутентификационную информацию в файле .dockercfg, расположенном в вашем домашнем каталоге.
Команды
Команда | Доп. пар. | Описание |
docker login | Регистрация/вход на сервер реестра. По умолчанию Docker Hub. | |
docker logout | Выход из реестра Docker. По умолчанию Docker Hub. | |
docker pull | Загружает заданный образ из реестра. Реестр определяется по имени образа, по умолчанию принимается Docker Hub. | |
docker push | Выгружает образ или репозиторий в заданный реестр. При отсутствии тега выгружаются все образы указанного репозитория в заданный реестр. | |
docker search | Выводит список общедоступных репозиториев из реестра Docker Hub | |
docker build . | ||
-t | Определение имени репозитория и тега | |
docker tag <new> <in hub> | Устанавливается соответствие имени с образом, который ссылается на образ в репозитории Docker Hub. |
Локальный hub
На серверной стороне:
mkdir dockertest_certs
openssl req -newkey rsa:4096 -nodes -sha256 -subj "/CN=dockertest" -addext "subjectAltName = DNS:dockertest" -keyout dockertest_certs/domain.key -x509 -days 365 -out dockertest_certs/domain.crt
docker run -d -p 5000:5000 -v $(pwd)/dockertest_certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key --restart=always --name registry registry
docker run --entrypoint htpasswd httpd:2 -Bbn testuser testpassword >> auth/htpasswd #добавить пользователя
На клиентской стороне (из-под root):
mkdir -p /etc/docker/certs.d/dockertest:5000
#добавить в /etc/hosts запись о сервере dockertest
scp sergey@dockertest:/home/sergey/dockertest_certs/domain.crt /etc/docker/certs.d/dockertest:5000/ca.crt
service docker restart
Перелинковать на клиенте образ на новый хаб и загрузить его
docker tag amouat/identidock:0.1 dockertest:5000/identidock:0.1
docker push dockertest:5000/identidock:0.1
Пример docker-compose.yml для запуска локального реестра
services:
registry:
restart: always
image: registry
ports:
- "5000:5000"
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- ./dockertest_certs:/certs
- ./auth:/auth
Примеры
Загрузка образа с тегом latest в репозиторий amouat/revealjs из реестра Docker Hub.
docker pull amouat/revealjs:latest
Загрузка образа из неофициального реестра.
docker pull gcr.io/google-containers/git-sync:v3.1.5
Определение имени репозитория identidock и тега 0.1 для образа, собранного из локального dockerfile.
docker build -t "identidock:0.1" .
Устанавливается соответствие имени amouat/identidock с образом, который ссылается на имя пользователя amouat в репозитории Docker Hub.
docker tag "identidock:0.1" "amouat/identidock:0.1"
Ссылки