Что нужно сделать, чтобы доставить на Docker и избежать накопления изображений? - PullRequest
1 голос
/ 07 мая 2019

Я использую Docker для запуска созданного мной сайта.Когда необходимо доставить релиз, мне нужно создать новый образ Docker и запустить из него новый контейнер.

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

Мне не нужны командные строки Docker, а есть контрольный список или процесс, чтобы ничего не забыть.

Например: -Остановить запущенный контейнер -Удалить остановленный контейнер -Удалить старое изображение -Создать новое изображение -Запустить новый контейнер

Я что-то упустил?Я не привык к Docker, может быть, есть лучшие практики для этого довольно классического варианта использования?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Локальный рабочий процесс, который работает для меня:

  1. Локальная разработка ядра, без Docker .Такие вещи, как интерактивные отладчики и перезагрузка в реальном времени, прекрасно работают в среде, отличной от Docker, без каких-либо странных хаков или корневого доступа, а для установки необходимых мне инструментов обычно требуется один шаг brew или apt-get.Сделайте все мои тесты pytest / junit / rspec / jest / ... успешными.

  2. docker build новое изображение.

  3. docker stop && docker rm старый контейнер.

  4. docker run новый контейнер.

  5. Когда количество старых изображений начинает меня беспокоить, docker system prune.

Если вы используете Docker Compose, вы можете заменить средний набор шагов на docker-compose up --build.

В производственной средепоследовательность немного отличается:

  1. Когда ваша система CI видит новый коммит, после запуска локальных тестов репозитория, он docker build && docker push создает новый образ.Образ имеет уникальный тег, который может быть меткой времени или идентификатором фиксации контроля источника или тегом версии.

  2. Ваша система развертывания (может быть системой CI или отдельной системой CD) сообщает обо всемменеджер кластера, который вы используете (Kubernetes, файл Compose с Docker Swarm, Nomad, Ansible playbook, ...) о теге новой версии.Система развертывания заботится об остановке, запуске и удалении контейнеров.

  3. Если менеджер кластера не справился с этим, запустите задание cron на docker system prune.

0 голосов
/ 07 мая 2019

Вы должны использовать:

docker system df

для исследования пространства, используемого докером.

После этого вы можете использовать

docker system prune -a --volumes

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

...