Как стать автором
Обновить

Комментарии 16

The default Docker setup on Windows and OS X uses a VirtualBox VM to host the Docker daemon.
Это было актуально во времена Docker Toolbox и уже давно не соответствует действительности: docs.docker.com/docker-for-mac/docker-toolbox.

С выходом нативного Docker for Mac на HyperKit никаких проблем не возникает.

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

Здравствуйте) Можно глупый вопрос, который меня давно гложит?


Вот подняли мы всё это чудо из нескольких связанных образов на продакшене. А потом у нас возникла необходимость обновить какой-то из образов. Как сделать всё это без остановки всего продакшена?

Сразу пришло в голову haproxy и скрипт, который будет аккуратно перезапускать контейнеры.
В случае с compose можно делать так (решение не сильно отличается): github.com/docker/compose/issues/734#issuecomment-167392770
Для себя закинул еще одно очко в копилку «docker — для удобной/быстрой разработки/тестирования, но не для продакшена»

нормально крутил докер на продакшне, не надо страшилок


ну да, наш админ немного патчей там накатил, чтоб оно с Macvlan работало нормально, но это уже подробности =)

обычно на продакшне это все обмазано docker-swarm либо чем-то подобным (kubernetes и т.д.). В этом случае после обновления образа и пуша его в registry, на swarm-ноде делается update — и оно заменяет контейнеры один за другим с zero downtime

Потому, если вы попали сюда в поиске рецептов, как работать с Docker под Windows, то у меня плохие новости, здесь вы их не найдете.

А у меня плохие новости для вас, — нельзя так долго мариновать статью. Никакие рецепты давно не нужны. Docker на Windows в Hyper-V работает отлично.
Хотелось бы услышать мнение чем Docker лучше чем Vagrant?
не утверждал что Docker лучше Vagrant, но решил подчеркнуть, что они имеют совершенно разные механизмы и предназначения
Pitfails

Может Pitfalls?
спасибо, исправил
Забыли в Pitfails добавить, что на маке скорость записи из контейнера на диск хоста (добавленный как VOLUME) очень медленная, для понимания масштабов — примерно в 50-100 раз.
Вот пример записи данных на 102MB (на диск контейнера — 0.3сек, на диск хоста — 44сек.):

root@cdb2179ff:/var/www/temp# time dd if=/dev/zero of=test.dat bs=1024 count=100000
102400000 bytes (102 MB, 98 MiB) copied, 44.3007 s, 2.3 MB/s
real	0m44.310s
user	0m0.080s
sys	0m3.060s

root@cdb2179ff:/tmp# time dd if=/dev/zero of=test.dat bs=1024 count=100000
102400000 bytes (102 MB, 98 MiB) copied, 0.375994 s, 272 MB/s
real	0m0.381s
user	0m0.030s
sys	0m0.340s

На официальном форуме развернулась огромная дискуссия на эту тему и судя по ней прогнозы так себе.
Поэтому разработка может стать неприятной когда работа идет с процессом связанным с записью данных из контейнера на диск хоста.
У меня, например, на одном проекте обновление страницы сайта запущенного в docker занимает около 1.5 секунды (из-за записи данных в mysql базу, которая лежит на хосте и монтируется через VOLUME), если тот же сайт запускать на локальном сервере, обновление страницы происходит моментально. Все это очень мешает при отладке когда часто приходится обновлять страницу в браузере.
спасибо за дополнение, добавил в список
Кстати использование && еще и неплохо уменьшает размер докерфайла.
Согласен с автором во всем, сам въезжал в docker примерно 3 дня с параллельными попытками написания Dockerfile для сборки нужного мне image. Однако советую сразу пристальное внимание обратить на инструкцию CMD, без правильного написания которой запущенный контейнер будет сразу останавливаться, а вместо deprecated MAINTAINER использовать все разнообразие инструкции LABEL.
Вторую часть дождёмся?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории