Я не знаю, существует ли хорошая практика для управления контейнером от другого, например, запускать и останавливать контейнер.
Практика «достаточно хорошая», и многие люди это делают. 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/
Да он существует практика бога, чтобы достать контейнер из другого. Давайте рассмотрим пример [portainer] (https://github.com/portainer/portainer). Это приложение (или контейнер), которое управляет и управляет другими контейнерами. Вы можете посмотреть исходный код, чтобы узнать, как именно это делается. –