Dockerfile или реестр? Что является предпочтительной стратегией распространения?
Если вы выполняете сервис с Dockerfile, вам предпочтительнее создавать изображение с помощью файла Docker и вставлять его в реестр, а не распространять Dockerfile (и репо) для людей, чтобы создавать их изображения?
Какие варианты использования предпочитают дистрибутив Dockerfile + repo и какой вариант использования использует реестр?
Ответы
Ответ 1
Я бы предположил, что один и тот же вопрос может быть применен к установкам исходного кода и бинарного пакета.
Нажатие на центральный общий реестр позволяет вам заморозить и сертифицировать определенную конфигурацию, а затем сделать ее доступной для других в вашей организации.
Ответ 2
В DevTable мы изначально использовали файл Docker, который запускался при развертывании наших серверов для создания наших изображений Docker. Поскольку наше изображение докеры становится более сложным и имеет больше зависимостей, для создания изображения из файла Docker требуется больше времени и дольше. Нам действительно нужен способ генерации изображения один раз, а затем вывести готовый продукт на наши серверы.
Как правило, это можно было бы сделать, нажав их образ на index.docker.io, однако у нас есть собственный код, который мы не могли бы опубликовать в Мир. Вы также можете оказаться в такой ситуации, если планируете создать размещенный продукт вокруг Docker.
Чтобы решить эту проблему в сообществе, мы построили Quay, целью которого является Github изображений Docker. Проверьте это и сообщите нам, если это решает необходимость для вас.
Ответ 3
Частные репозитории на вашем собственном сервере также являются опцией.
Чтобы запустить сервер, клонируйте https://github.com/dotcloud/docker-registry на свой собственный сервер.
Чтобы использовать свой собственный сервер, прикрепите тег к адресу узла реестра. Например:
# Tag to create a repository with the full registry location.
# The location (e.g. localhost.localdomain:5000) becomes
# a permanent part of the repository name
$ sudo docker tag 0u812deadbeef your_server.example.com:5000/repo_name
# Push the new repository to its home location on your server
$ sudo docker push your_server.example.com:5000/repo_name
(см. http://docs.docker.io.s3-website-us-west-2.amazonaws.com/use/workingwithrepository/#private-registry)
Ответ 4
Я думаю, что это немного зависит от вашего приложения, но я бы предпочел Dockerfile:
Файл Docker...
- ... в корне проекта делает его очень легко создавать и запускать, это всего лишь одна команда.
- ... может быть изменен разработчиком при необходимости.
- ... это документация о том, как создать проект
- ... очень мало по сравнению с изображением, которое может быть полезно для людей с медленным подключением к Интернету.
- ... находится в том же месте, что и код, поэтому, когда люди проверяют код, они найдут его.
Изображение в реестре...
- ... уже построена и готова!
- ... необходимо сохранить. Если вы установите новый код или обновите приложение, вы также должны обновить изображение.
- ... необходимо тщательно обработать: можно ли изменить конфигурацию? Как вы обрабатываете журналы? Насколько оно большое? Вы упаковываете NGINX в изображение или это часть внешнего мира? Как сказал @Mark O'Connor, вы заморозите определенную конфигурацию, но это может быть не конфигурация, которую кто-то хочет использовать.
Вот почему я бы предпочел Dockerfile. То же самое с Vagrantfile - он предпочел бы Vagrantfile вместо образа VM. И то же самое с ANT или Maven script - он предпочел бы сборку script вместо упакованного артефакта (по крайней мере, если я хочу внести код в проект).