Pull to refresh

Comments 20

Если мы не будем хранить состояние, сможем использовать один и тот же образ в разных сценариях

Один и тот же образ можно использовать в разных сценариях, если по разному монтировать папки с данными.


Можно ли использовать JSON вместо YAML в файле для docker-compose, если да — как?

json — подмножество yaml...


Опишите процесс масштабирования контейнеров Docker

Правильный ответ… зависит от вашего оркестратора. А docker-compose в качестве оркестратора для хоть сколько большого прода — смешно.

А docker-compose в качестве оркестратора для хоть сколько большого прода — смешно.

Почему нет? Если у меня три контейнера, два сервиса и один апач. Тоже не подойдёт? Масштабирования пока не планируется. Нужен ли мне на сервере Kybernetes.


Я просто не специалист. Сейчас на сервере апач и томкат установлены прямо на сервере, хочу запаковать все в контейнеры. Проще обновлять. Ну и решил пока не заморачиваться слишком и использовать compose.

Именно для прода попробуйте ansible и конкретно его https://docs.ansible.com/ansible/2.5/modules/docker_container_module.html
Это выглядит почти как docker-compose, работает стабильнее и имеет огромный запас дополнительных батареек (вроде готовой роли, чтобы поставить 1 строчкой docker на сервер). На простых кейсах вы берете чистый сервер, выполняете ansible-playbook site.yml и проект работает.

json — подмножество yaml...

Возможно наоборот?
Нет, yaml разрабатывался как надмножество json, то есть любой корректный json является корректным yaml. но не наоборот.
YAML can therefore be viewed as a natural superset of JSON, offering improved human readability and a more complete information model. This is also the case in practice; every JSON file is also a valid YAML file. This makes it easy to migrate from JSON to YAML if/when the additional features are required.

Хотя, в документации к yaml написано, что это не совсем так. Например,
JSON's RFC4627 requires that mappings keys merely “SHOULD” be unique, while YAML insists they “MUST” be. Technically, YAML therefore complies with the JSON spec, choosing to treat duplicates as an error.

Поэтому исходный вопрос не лишен смысла. Для ответа на него нужно посмотреть, как отреагирует docker-compose, если ему подсунуть
{
  "version": "3.7",
  "services": {
    "node": {
      "image": "node:12-alpine",
      "image": "node:11-alpine"
    }
  }
}
который корректный как JSON и некорректный как YAML.
Спойлер
Запустит node:11-alpine. Даже если переименовать docker-compose.json в docker-compose.yaml.
Видимо, авторам было не лень проверять, что отступы блоковых элементов должны обязательно быть пробелами, а не табуляцией, а на уникальность ключей, которая точно так же требуется форматом, все забили.
Еще пара вопросов:

Можно ли исключить часть файлов из образа при его построении?
Да, если определить файл .dockerignore. Его синтаксис аналогичен .gitignore.

Чем отличаются команды COPY и ADD?
ADD умеет скачивать файлы и распаковывать архивы. Но если эти фичи не нужны, предпочтительно использовать COPY.
Поржал с картинки «виртуализация vs контейнеризация», как и над многими другими вещами, особенно из чего состоит докер…
Я совсем не спец в теме, поэтому и зашел статью почитать для ликбеза, но когда дошёл до картинки этой, сразу спустился в комменты за ясностью, потому что то ли я запутался, то ли лыжи не едут.

Перепутано местами походу. Тоже спустился в коменты для прояснения.

«A container is the basic unit of software that holds the code and all its dependencies ...»
Не обязательно контейнер должен содержать код программы.
Скорее, скомпилированное приложение.
А ведь ещё есть встроенные в systemd контейнеры, которые могут как докер — контейнером приложения, а могут и как контейнер с полноценным ОС окружением, включая систему инициализации.
Виртуализация и контейнеризация — в иллюстрации названия наоборот, и не хватает «container engine» над Host OS
Картинку походу и не собираются исправлять…
Возможен ли запуск нескольких копий одного и того же compose файла на одном и том же сервере? Как именно?
Это можно сделать с помощью docker-compose, использующего файл YAML для настройки сервисов приложения. После его создания вы можете в одну команду создать и запустить все сервисы.

Это не овечает на вопрос, да и вообще вопрос сформулирован некорректно. Запускаются не копии compose файлов, а связка контейнеров (docker-compose) или сервисов (docker stack) определенных в compose файле. Несколько запустить можно при задании разного COMPOSE_PROJECT_NAME (docker-compose) или имени стека (docker stack) и отсутствия конфликтов в публикуемых портах.

Тут многоотносительно трешевых вопросов и сомнительных ответов, но больше всего позабавил этот:


Можно ли использовать JSON вместо YAML в файле для docker-compose, если да — как?

YAML это суперсет JSON :-)

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

Вызубрю наизусть. После этого ответа меня точно возьмут докер-девопсом!
(ирония)

YAML девелопером! ;-)
Sign up to leave a comment.