У самурая нет тестов, только прод
Здрасти. Есть куча способов, как определить, в каком окружении запущен Bash-скрипт: на хостовой машине или внутри Docker-контейнера. Я предпочитаю самый простой.
if [ -f /.dockerenv ]; then
echo "I'm inside docker";
else
echo "I'm living in real world!";
fi
/.dockerenv — и всё! Да, так просто. Способ самый универсальный и используется разработчиками в 99% случаев.И да, файл /.dockerenv можно удалить, и тогда скрипт сломается. Удобно, если хочешь помешать скриптам определять, где они выполняются. Но после перезапуска контейнера файл /.dockerenv снова появится.
А если требуется высший пилотаж, прям УНИВЕРСАЛЬНО прочекать Docker и LXC, идём таким путём:
if [ -n "$(grep 'kthreadd' /proc/2/status 2>/dev/null)" ]; then
echo "I'm living in real world!"
else
echo "I'm inside container";
fi
Тут суть такая: во всех хост-системах PID(2) == kthreadd.
Запускаем на хостовой машине:
ps -p 2
PID TTY TIME CMD
2 ? 00:00:00 kthreadd
Запускаем в контейнере:
ps -p 2
PID TTY TIME CMD
хуй с маслом
Да, кто не знал: как сохранять изменения в Docker-контейнерах — применяется commit. То есть ставишь софт в контейнере, настраиваешь его там под себя. А потом делаешь:
docker commit <ID> <name>
<ID> — ID того контейнера, в котором всё ставил.<name> — да похуй, можешь указать тот же самый.
После перезапуска контейнера все твои настройки сохранятся. Но лучше этим не частить, а собирать контейнеры сразу с нужной тебе хуйнёй.
Ладно, погнали дальше спасать этот прекрасный мир.








Комментарии