У меня два сервера:
Я хочу создать образ Docker на сервере A, а затем запустить соответствующий контейнер на сервере B. Тогда возникает вопрос:
Каков рекомендуемый способ запуска контейнера на сервере B с сервера A после того, как Jenkins завершит сборку докеров? Нужно ли мне отправлять образ в концентратор Docker, чтобы вывести его на сервер B, или я могу каким-то образом передать образ напрямую?
Я действительно не ищу конкретные плагины Jenkins или что-то в этом роде, а, скорее, с точки зрения безопасности и архитектуры, какой лучший подход для этого?
Я прочитал тонну сообщений и ТАК ответов по этому поводу и понял, что есть много способов сделать это, но я все еще не уверен, каков наиболее распространенный способ сделать это. Я видел эти альтернативы:
docker-machinessh [email protected] "docker run ..."Редактировать:
Я использую серверы A и B в Digital Ocean.


Образ Docker можно сохранить в обычный tar-архив:
docker image save -o <FILE> <IMAGE>
Документы здесь: https://docs.docker.com/engine/reference/commandline/image_save/
Затем scp с этим tar-архивом на другой хост и запустите docker load для загрузки образа:
docker image load -i <FILE>
Документы здесь: https://docs.docker.com/engine/reference/commandline/image_load/
Этот метод save-scp-load используется редко. Обычный подход - настроить частный реестр Docker за вашим брандмауэром. И отправлять изображения в этот частный реестр или извлекать из него. Этот документ описывает как развернуть реестр контейнеров. Или вы можете выбрать услугу реестра, предоставляемую третьей стороной, например Реестр контейнеров Gitlab.
Обычный подход - настроить частный реестр Docker за вашим брандмауэром. И отправлять изображения в этот частный реестр или извлекать из него.
Отлично, спасибо большое, чувак. Не могли бы вы дополнить свой ответ этим последним замечанием? Тогда я отмечу его как принятый.
Обновил мой исходный ответ.
При использовании репозиториев Docker вы нажимаете / вытягиваете только те слои, которые были изменены. Вы можете использовать Докер REST API. Плагин Jenkins HTTP Request можно использовать для выполнения HTTP-запросов. Вы можете запускать команды Docker непосредственно на удаленном хосте Docker, задав переменную среды DOCKER_HOST. Чтобы экспортировать переменную среды в текущую оболочку:
export DOCKER_HOST = "tcp://your-remote-server.org:2375"
Помните о проблемах безопасности при разрешении TCP-трафика. Больше информации. Другой способ - использовать подключаемый модуль агента SSH в Jenkins.
Спасибо, это полезно. Интересно, какой общий подход используется в отрасли? Чтобы запихнуть образ в реестр и вытащить его в докер-хост? или передавать образы со сборки на прод-серверы через scp?