1

Я нашел много статей, которые говорят о связи между контейнерами докеров (докерная сеть, докерная ссылка). Но я не знаю, существует ли хорошая практика для управления контейнером из другого, например, запустить и остановить контейнер. Если единственный способ использовать остальные api на хосте, есть ли у вас хорошая статья, которая объясняет это? О остальном api я нашел слишком много статей, которые объясняют, что большинство из них устарели.Управление контейнером из другого

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

Спасибо за помощь.

+0

Да он существует практика бога, чтобы достать контейнер из другого. Давайте рассмотрим пример [portainer] (https://github.com/portainer/portainer). Это приложение (или контейнер), которое управляет и управляет другими контейнерами. Вы можете посмотреть исходный код, чтобы узнать, как именно это делается. –

ответ

3

Я не знаю, существует ли хорошая практика для управления контейнером от другого, например, запускать и останавливать контейнер.

Практика «достаточно хорошая», и многие люди это делают. CoreOS's /usr/bin/toolbox в основном это, некоторые другие, такие как RancherOS, тоже делают это.

Если единственный способ использовать остальную часть api на хосте, у вас есть хорошая статья, которая объясняет это?

Нет, это не так. Вы можете подключить гнездо докера в другой контейнер докеров, а затем запустить команды докеров на хосте непосредственно из контейнера. Эта практика называется «докер в докер», «dind», «вложенные контейнеры» и т. Д. Существует вариация этого, когда люди запускают полноценные версии докеров (docker engine/daemon + client) в существующем контейнере, но это не то, что вы хотите сделать здесь.

Суть его, как правило, такая же, разъем док-станции unix - /var/run/docker.sock выставлен/установлен в «контрольном контейнере», то есть в контейнере, который вы хотите использовать для управления демоном докеров. Затем вы устанавливаете клиент командной строки docker и обычно выполняете команды докеров; docker ps, docker start/stop/run должны работать должным образом.

Это не так, чтобы установить его [1], и есть связанные проблемы безопасности [2] [3], но есть много людей, которые это делают.

Вот ваши ссылки:

[1] https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/, смотрите раздел под Solution, все до того, что вы должны не делать.

[2] https://www.lvh.io/posts/dont-expose-the-docker-socket-not-even-to-a-container.html

[3] https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/

+0

Хорошо спасибо за это хорошее объяснение. Это POC, чтобы изучить докер самостоятельно. Поэтому я буду уважать безопасность в качестве рекомендации. Спасибо за помощь. При этом я буду использовать плагин docker jenkins напрямую, а не Shell. – Pred05

Смежные вопросы