На CoreOS настройте свой собственный реестр Docker

Мы все знаем и любим Docker, платформу для создания, управления и распределения контейнеров приложений на нескольких компьютерах. Docker Inc. предоставляет сервис для размещения контейнеров с открытым исходным кодом, которые можно загружать (или извлекать), как git-репозиторий, известный как «Docker Registry». Думайте об этом как о GitHub для контейнеров Docker.

Но что, если вы хотите разместить свой собственный реестр отдельно от публичного? Что ж, Docker Inc. открыла приложение для реестра на GitHub.

Из этого туториала вы узнаете, как настроить личный реестр Docker с помощью CoreOS на новом VPS.

CoreOS + Docker

Мы не будем тратить кучу времени на то, чтобы точно узнать, что могут делать Docker и CoreOS, поскольку это выходит за рамки этого руководства. По сути, CoreOS предназначена для больших кластеров серверов, она небольшая, быстрая и регулярно получает регулярные обновления безопасности. Его корневая файловая система также доступна только для чтения. Это означает, что вы должны использовать Docker для запуска любого программного обеспечения, которое не входит в базовую установку.

Это делает Core OS идеальной хост-системой для Docker!

Вытащить и запустить последний реестр

Docker Inc. предоставила реестр в качестве образа верхнего уровня, это означает, что мы можем сделать это простым:

docker pull registry

Это может занять несколько минут в зависимости от скорости соединения.

Плюс того, что изображение верхнего уровня также означает, что он получает регулярную поддержку и обновления.

Теперь давайте проверим реестр. Мы можем создать новый контейнер, используя образ реестра:

docker run -p 5000:5000 -d --name=basic_registry registry

Для тех, кто не использовал Docker слишком часто, этот -pфлаг означает PORT, что мы выставляем порт 5000 из контейнера на порт хоста 5000.

Этот -dфлаг означает daemon, что контейнер будет работать в фоновом режиме, а не печатать выходные данные в текущем сеансе SSH. Мы также хотим назвать этот базовый тестовый контейнер, используя --nameопцию, чтобы мы могли легко управлять им позже.

Убедитесь, что ваш основной контейнер реестра работает с помощью docker ps. Вывод должен выглядеть примерно так:

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                    NAMES
edfb54e4a8c4        registry:0.8.1      "/bin/sh -c 'exec do   7 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   basic_registry

Кроме того, зайдите http://YOUR_IP:5000в ваш веб-браузер, и вы должны получить сообщение, подобное следующему:

"docker-registry server (dev) (v0.8.1)"

Обратите внимание на слово devв скобках. Это означает, что на сервере в данный момент выполняется конфигурация dev. Мы рассмотрим больше конфигурации в ближайшее время.

Теперь у вас есть собственный (очень простой) реестр контейнеров! Но мы еще не закончили.

Может быть, вы хотите сохранить это в тайне от посторонних глаз, или можете хранить ваши изображения на Amazon S3 вместо локального хранилища. Давайте рассмотрим различные параметры конфигурации в следующем разделе.

Прежде чем мы продолжим, давайте уничтожим тестовый контейнер, чтобы не столкнуться с конфликтующими портами.

docker kill basic_registry

Конфигурация реестра

Есть два способа передать конфигурацию в реестр Docker. Одним из способов является передача переменных среды в новый контейнер, а другим - добавить файл конфигурации.

Вот несколько общих параметров конфигурации, которые мы будем использовать:

  • loglevel- Минимальный объем информации для входа в консоль. По умолчанию это info.
  • standalone- Должен ли этот реестр действовать самостоятельно? (Никогда не запрашивает публичный реестр.) По умолчанию true.
  • index_endpoint- Если не автономно, какой другой индекс мы будем запрашивать? По умолчанию index.docker.io.
  • cacheи cache_lru- Опции, касающиеся использования кэша Redis для небольших файлов, мы коснемся этого позже.
  • storage- Какой сервер хранения мы должны использовать для этого сервера? (В этом уроке мы будем использовать локальный).
  • storage_path - При использовании локального хранилища, в каком каталоге мы должны хранить файлы?

Прежде чем мы начнем работать с конфигурацией, нам нужен базовый файл для работы. Файл из репозитория Docker Registry на GitHub будет работать нормально:

wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml

Файл должен успешно сохраниться с выводом, таким как:

2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]

Большой! Теперь мы можем изменить этот файл в соответствии с нашими потребностями.

Единственный текстовый редактор, который поставляется с Core OS, - vimно не волнуйтесь, если вы никогда не использовали его раньше, это шаг за шагом объяснит, что редактировать и как это делать.

vim config_sample.yml

Как только вы откроете файл, нажмите Iи в правом нижнем углу должно отобразиться: -- INSERT --для режима вставки. Прокрутите весь путь до конца файла с помощью клавиш со стрелками, вы должны увидеть раздел с надписью prod.

Мы будем менять две строки, изменения ниже

prod:
    <<: *local
    storage_path: _env:STORAGE_PATH:/data

Что мы сделали, так это изменили prodконфигурацию для получения из localраздела вместо s3раздела. Затем мы переписали storage_pathиспользование пути /dataвнутри нового контейнера.

Как только вы подтвердите, что все изменения верны, нажмите, ESCчтобы выйти из режима вставки и ввести :wq(это означает, что вы запишите изменения в файл и выйдите из vim.)

Теперь давайте переименуем файл просто config.yml

mv config_sample.yml config.yml

Redis кеширование (необязательно)

Если вы хотите использовать redis для ускорения работы вашего реестра контейнеров, это так же просто, как вытащить новый контейнер из открытого реестра и добавить еще несколько строк конфигурации.

Сначала перетащите изображение верхнего уровня Redis:

docker pull redis

После успешного извлечения образа мы можем запустить его и назвать его так же, как в тестовом реестре:

docker run -d --name registry-redis redis

Поскольку redis находится в памяти, нам не нужно настраивать его, так как мы свяжем его с контейнером реестра на следующих шагах.

Еще раз, убедитесь, что он работает, используя docker ps:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
54f65641eccf        redis:2.8           "redis-server"      2 seconds ago       Up 1 seconds        6379/tcp            registry-redis

Теперь вновь открыть config.ymlв vimи ввести режим вставки так же , как в первый раз мы редактировали.

Добавьте следующие строки под prodразделом, убедившись в правильности отступа. На этот раз мы только добавляем cacheи cache_lru.

cache:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 0

cache_lru:
    host: _env:REDIS_PORT_6379_TCP_ADDR
    port: _env:REDIS_PORT_6379_TCP_PORT
    db: 1

Переменные среды REDIS_PORT_6379_TCP_ADDRи REDIS_PORT_6379_TCP_PORTпередаются в контейнер реестра после связывания с контейнером Redis.

Теперь вы настроили контейнер Redis, который будет работать рука об руку с вашим контейнером реестра. Теперь на построение реестра!

Сборка контейнера

У нас есть все настройки и все готово, теперь нам нужно собрать реальный контейнер реестра.

Разожгите vim Dockerfileсоздать новый Dockerfile. Войдите в режим вставки и следуйте приведенным ниже правкам.

FROM registry:latest

# Add the custom configuration file we made 
ADD ./config.yml /docker-registry/config/config.yml

# Create the data directory
RUN mkdir /data

# Set the configuration file to config.yml
env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml

# Make sure we use the prod configuration settings 
env SETTINGS_FLAVOR prod

То, что мы сделали выше, это по существу расширение образа реестра, чтобы он использовал наш файл конфигурации и настройки. Dockerfile - это набор инструкций для чтения и сборки Docker. Если вы хотите узнать больше о Dockerfiles и их синтаксисе, посмотрите официальную документацию сайта Docker.

Далее нам нужно собрать контейнер для использования.

docker build -t my_registry .


Sending build context to Docker daemon 13.82 kB
Sending build context to Docker daemon 
Step 0 : FROM registry
 ---> e42d15ec8417
Step 1 : ADD ./config.yml /docker-registry/config/config.yml
 ---> 4339f026d459
Removing intermediate container 2d5138fbcd34
Step 2 : RUN mkdir /data
 ---> Running in a090f0bdbfd1
 ---> 8eb27ba6e12a
Removing intermediate container a090f0bdbfd1
Step 3 : env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml
 ---> Running in 565b5bfb2b22
 ---> 914462e46dc0
Removing intermediate container 565b5bfb2b22
Step 4 : env SETTINGS_FLAVOR prod
 ---> Running in 31a92847b851
 ---> b5949575c374
Removing intermediate container 31a92847b851
Successfully built b5949575c374

Теперь мы готовы к запуску!

Давайте создадим каталог в нашей хост-системе для монтирования в контейнер как /dataтом.

mkdir registry-data

Теперь мы можем раскрутить новый контейнер. Если вы планируете использовать кэш Redis, используйте 2-ю команду ниже.

# For a non-Redis cache registry
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg my_registry

# For a Redis cached registry (Must have followed Redis Caching section above)
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg --link registry-redis:redis my_registry

Чтобы убедиться, что ваш сервер работает правильно, посетите http://YOUR_IP:5000. Вы увидите следующее сообщение:

"docker-registry server (prod) (v0.8.1)"

Обратите внимание, (prod)что наши изменения конфигурации были успешными!

Настройте свой локальный клиент Docker

Теперь, когда у нас есть собственный работающий реестр, мы хотим, чтобы клиент Docker на наших локальных машинах начал его использовать. Обычно вы используете команду:, docker loginно для нашего использования нам нужно добавить еще один аргумент в команду входа в систему:

docker login YOUR_IP:5000

Введите имя пользователя и пароль (подумайте об этом, как о создании новой учетной записи) и проигнорируйте сообщение о том, что вы должны его активировать.

Далее, давайте вытащим изображение и поместим его в наш собственный репозиторий.

# Pull the busybox image from the public registry
docker pull busybox

# Tag it with our IP/URL
docker tag busybox YOUR_IP:5000/busybox

# Push it to our newly made registry
docker push YOUR_IP:5000/busybox

Если все выдвигается правильно, окончательное сообщение должно выглядеть следующим образом:

Pushing tag for rev [a9eb17255234] on 

Поздравляем! Вы настроили свой собственный докерский репозиторий.

Что дальше?

Вот несколько идей о том, как улучшить ваш новый частный реестр:

  • Обратный прокси-сервер с использованием Nginx или Apache для обеспечения дополнительной безопасности, например, простой HTTP-аутентификации.
  • Получите домен для своего сервера и настройте его так, чтобы вы могли получить доступ к своему реестру с помощью чего-то вроде: registry.mysite.com
  • Купите (или самостоятельно подпишите) сертификат SSL, чтобы добавить еще больше защиты, если ваши контейнеры содержат конфиденциальную информацию.


Leave a Comment

Развертывание Kubernetes с помощью Kubeadm на CentOS 7

Развертывание Kubernetes с помощью Kubeadm на CentOS 7

Обзор Эта статья призвана помочь вам в кратчайшие сроки запустить и запустить кластер Kubernetes с помощью kubeadm. Это руководство будет развертывать два сервера, на

Безопасное развертывание и управление контейнерами LXC в Ubuntu 14.04

Безопасное развертывание и управление контейнерами LXC в Ubuntu 14.04

Контейнеры LXC (контейнеры Linux) - это функция операционной системы Linux, которую можно использовать для запуска нескольких изолированных систем Linux на одном хосте. Thes

Создайте Docker Swarm в Alpine Linux 3.9.0

Создайте Docker Swarm в Alpine Linux 3.9.0

Введение Это руководство покажет вам, как создать и настроить рой Docker с использованием нескольких серверов Alpine Linux 3.9.0 и Portainer. Пожалуйста, знайте, что

Развертывание приложения PHP с помощью Docker-compose

Развертывание приложения PHP с помощью Docker-compose

Приложения PHP обычно состоят из веб-сервера, системы реляционных баз данных и самого интерпретатора языка. В этом уроке мы будем leveragin

Начало работы с Kubernetes в CentOS 7

Начало работы с Kubernetes в CentOS 7

Kubernetes - это платформа с открытым исходным кодом, разработанная Google для управления контейнерными приложениями на кластере серверов. Он основан на десятилетии и

Установите Docker CE на Ubuntu 18.04

Установите Docker CE на Ubuntu 18.04

Введение Docker - это приложение, которое позволяет нам развертывать программы, которые запускаются как контейнеры. Он был написан на популярном языке программирования Go

Установите Rancher на Ubuntu 16.04

Установите Rancher на Ubuntu 16.04

Используете другую систему? Введение Rancher - это платформа с открытым исходным кодом для запуска контейнеров и создания частного контейнерного сервиса. Rancher является базой

Установка docker-compose на CoreOS

Установка docker-compose на CoreOS

В этой статье объясняется, как установить docker-compose на CoreOS. В CoreOS папка / usr / является неизменяемой, поэтому стандартный путь / usr / local / bin недоступен для

Установите Rancher на CentOS 7

Установите Rancher на CentOS 7

Используете другую систему? Введение Rancher - это платформа с открытым исходным кодом для запуска контейнеров и создания частного контейнерного сервиса. Rancher является базой

Настройка Sentry через Docker в Ubuntu 16.04

Настройка Sentry через Docker в Ubuntu 16.04

Используете другую систему? Введение Sentry - это решение с открытым исходным кодом для отслеживания ошибок. Sentry отслеживает исключения и другие полезные сообщения для

Как установить Harbour на CentOS 7

Как установить Harbour на CentOS 7

Harbour - это сервер реестра корпоративного класса с открытым исходным кодом, который хранит и распространяет образы Docker. Harbour расширяет с открытым исходным кодом Docker Distribution b

Липкая сессия с Docker Swarm (CE) на CentOS 7

Липкая сессия с Docker Swarm (CE) на CentOS 7

Используете другую систему? Введение Docker Swarm превращает ваши отдельные серверы в кластер компьютеров, облегчая масштабирование, высокую доступность и

Установка Docker на CentOS 7

Установка Docker на CentOS 7

Используете другую систему? Docker - это приложение, которое позволяет развертывать программное обеспечение в виртуальных контейнерах. Это было написано в программе Go

Установите Rancher Server на RancherOS

Установите Rancher Server на RancherOS

Обзор RancherOS - это невероятно легкая операционная система (всего около 60 МБ), которая запускает системный демон Docker в качестве PID 0 для запуска системных служб.

Липкая сессия с Docker Swarm (CE) в Debian 9

Липкая сессия с Docker Swarm (CE) в Debian 9

Используете другую систему? Введение Docker Swarm превращает ваши отдельные серверы в кластер компьютеров; облегчение масштабирования, высокая доступность и

Как использовать Docker: создание вашего первого Docker-контейнера

Как использовать Docker: создание вашего первого Docker-контейнера

Это руководство объясняет основы начала работы с Docker. Я предполагаю, что у вас уже установлен Docker. Шаги в этом уроке будут работать на

Балансировка нагрузки с помощью докера

Балансировка нагрузки с помощью докера

При запуске веб-приложения вы, как правило, хотите максимально эффективно использовать свои ресурсы без необходимости конвертировать программное обеспечение для использования многопоточности.

Начало работы с SQL Server 2017 (MS-SQL) в CentOS 7 с помощью Docker

Начало работы с SQL Server 2017 (MS-SQL) в CentOS 7 с помощью Docker

Предпосылки к движку Docker 1.8+. Минимум 4 ГБ дискового пространства. Минимум 4 ГБ ОЗУ. Шаг 1. Установите Docker Для установки SQL-сервера, Docker mus

Установка Docker CE на Debian 9

Установка Docker CE на Debian 9

Используете другую систему? Введение Docker - это приложение, которое позволяет развертывать программное обеспечение в виртуальных контейнерах. Это было написано в G

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше