Skip to main content

Архивация образов и Хранилище образов (hub)

Терминология

реестр (registry или hub) – сервис, отвечающий за хранение и распространение образов.
репозиторий (repository) – набор взаимосвязанных образов, обычно различные версии приложения
тег (tag) – алфавитно-цифровой идентификатор, присваиваемый образам внутри репозитория (например, 14.04 или stable). Тегов может быть много.
Пространства имен:

  • начинающиеся с текстовой строки и слеша (/), такие как amouat/revealjs В репозитории Docker Hub это образы, выгруженные конкретным пользователем.
  • имена без префиксов и слешей, принадлежат пространству имен «root», управляемому компанией Docker Inc.
  • имена с префиксами в виде имени хоста или IP-адреса представляют образы, хранящиеся в сторонних реестрах (не в Docker Hub). Например, localhost:5000/wordpress

Docker сохраняет аутентификационную информацию в файле .dockercfg, расположенном в вашем домашнем каталоге.

Создание архива образа из существующего образа

Создаем Dockerfile 

FROM alpine:latest
ARG NODE_ENV=production2
ENV NODE_ENV=${NODE_ENV}
RUN mkdir /var/www
RUN echo $NODE_ENV > /var/www/first.txt
CMD ["cat", "/var/www/first.txt"]

Собираем образ 

docker build -t bobrobot:1.0 .

 Сохраняем образ, копируем и устанавливаем на нужной системе, и запускаем

docker save bobrobot:1.0 > bobrobot:1.0.tar
docker load -i bobrobot\:1.0.tar
docker run bobrobot:1.0

Команды

Команда Доп. пар. Описание
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

Практический запуск собственного хаба

Поскольку это пока что тестовый хаб, решил сделать сертификат LetsEncrypt. На dns сервере сделал запись сайта hub.bobrobotirk.ru. Прокинул порты 443 и 8090 до виртуальной машины. 

Примеры

Загрузка образа с тегом 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"

Ссылки

Настройка локального hub