docker guru ищется

Все, что вы хотели знать о программизме, но боялись спросить.
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

example - traefik
[root@1022 ~]# docker exec -it e3a01643c1f8 /bin/bash
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory"

[root@1022 ~]# docker exec -it e3a01643c1f8 /bin/sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"

[root@1022 ~]# docker exec -it e3a01643c1f8 /bin/sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"/bin/sh\": stat /bin/sh: no such file or directory"

[root@1022 ~]# docker exec -it e3a01643c1f8 sh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH"

[root@1022 ~]# docker exec -it e3a01643c1f8 zsh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"zsh\": executable file not found in $PATH"

[root@1022 ~]# docker exec -it e3a01643c1f8 csh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"csh\": executable file not found in $PATH"

[root@1022 ~]# docker exec -it e3a01643c1f8 ksh
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"ksh\": executable file not found in $PATH"
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

Stanislav писал(а):
borei писал(а):
Stanislav писал(а):
borei писал(а):
Stanislav писал(а): Это как? А имаж они как делают? Минимум sh должен быть :roll:
Не факт совершенно.
Почему?
А зачем он ? Докер должен запустить апликуху и все. Если нужно ковыряются в рабочем имидже - ну да тогда да. Но все изменения сгорят после рестарта. Так что надобность шелла под вопросом.
Запуск апликухи - часто команда шелла.
Изменения не сгорят после стоп/старт контейнера.
Изменения не сгорят, если вы сделаете коммит.
Изменения не сгорят, если вы прокидываете вольюм.
Когда вы делаете имаж, вы выполняете некоторые команды (посмотрите какой-нить докер-файл) - каждая строка выполняются так: запускается временный контейнер, в нем запускается шелл, выполняющий ваши команды, после выполнения команды делается коммит, и т.д. построчно.
Каким образом обеспечить перзистенс данных при стопе/старте ? Два других случая я не рассматриваю - они специально сделаны чтобы сбросить данные на диск.
По поводу шелла. См мои примеры выше - я других шелла не знаю. Апликуха под докером работает в окружение cgroup, а это фактически хост система. Ни какой изоляции там и близко нет. Так что дернуть шелл из хоста не должно быть проблемой. Даже если это и не возможно не почему докер сам не может вызвать команды при генерации имиджа - там ведь только fork/exec системные вызовы и все.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 43378
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav »

borei писал(а):
Stanislav писал(а):
borei писал(а):
Stanislav писал(а):
borei писал(а): Не факт совершенно.
Почему?
А зачем он ? Докер должен запустить апликуху и все. Если нужно ковыряются в рабочем имидже - ну да тогда да. Но все изменения сгорят после рестарта. Так что надобность шелла под вопросом.
Запуск апликухи - часто команда шелла.
Изменения не сгорят после стоп/старт контейнера.
Изменения не сгорят, если вы сделаете коммит.
Изменения не сгорят, если вы прокидываете вольюм.
Когда вы делаете имаж, вы выполняете некоторые команды (посмотрите какой-нить докер-файл) - каждая строка выполняются так: запускается временный контейнер, в нем запускается шелл, выполняющий ваши команды, после выполнения команды делается коммит, и т.д. построчно.
Каким образом обеспечить перзистенс данных при стопе/старте ? Два других случая я не рассматриваю - они специально сделаны чтобы сбросить данные на диск.
По поводу шелла. См мои примеры выше - я других шелла не знаю. Апликуха под докером работает в окружение cgroup, а это фактически хост система. Ни какой изоляции там и близко нет. Так что дернуть шелл из хоста не должно быть проблемой. Даже если это и не возможно не почему докер сам не может вызвать команды при генерации имиджа - там ведь только fork/exec системные вызовы и все.
Ну остановили контейнер - ну и что? Почему что-то должно потеряться? Вы ведь можете заребутить хост и контейнеры после ребута будут работать :-)
Команды в докер-файле могут быть разные... докер не хочет ничего о них знать :-)
Дернуть из хоста? Хм... очень популярна команда при создании имажа - yum или apt-get, а если вы на хосте РедХат билдите Убунту имаж? Где вы на хосте возьмете apt-get? :roll:
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

Хорошо оставим дернут с хоста, там действительно много вопросов всплывает.
Но
Почему докер не может запустить команду при построении имиджа?
Чего делать с примером который я привёл - шелл я так и не нашёл.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 43378
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav »

borei писал(а):Хорошо оставим дернут с хоста, там действительно много вопросов всплывает.
Но
Почему докер не может запустить команду при построении имиджа?
Чего делать с примером который я привёл - шелл я так и не нашёл.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?
Может это к разработчикам докера вопрос? Но я их понимаю - они делают проще и надежнее.
Ну... если задаться такой целью, то, разумеется, можно по каким-то причинаm убить шелл
Прихлопнуть контейнер (docker rm) и стоп/старт (docker stop / docker start) - это разные вещи - не так ли?
winamp
Зритель
Сообщения: 9
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp »

borei писал(а):Чего делать с примером который я привёл - шелл я так и не нашёл.
Образ контейнера из вашего примера создан на базе scratch (https://hub.docker.com/_/scratch/). Там вообще практически ничего нет:

Код: Выделить всё

drwxr-xr-x   4 root root     4096 Mar 16 16:13 dev
-rwxr-xr-x   1 root root        0 Mar 16 16:13 .dockerenv
drwxr-xr-x   3 root root     4096 Mar 16 16:13 etc
drwxr-xr-x   2 root root     4096 Mar 16 16:13 proc
drwxr-xr-x   2 root root     4096 Mar 16 16:13 sys
-rwxrwxr-x   1 root root 49461760 Mar 16 00:18 traefik
Если же сильно хочется шелл, то можно туда скопировать статически собраный какой-нибудь busybox через docker cp и затем docker exec.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?
Файл не останется, если он не создан на внешнем volume. Таков принцип работы системы хранения в докере - изначально используется образ файловой системы из образа + дополнительный слой для изменений. Как только контейнер удаляется, то слой для изменений удаляется тоже.
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

winamp писал(а):
borei писал(а):Чего делать с примером который я привёл - шелл я так и не нашёл.
Образ контейнера из вашего примера создан на базе scratch (https://hub.docker.com/_/scratch/). Там вообще практически ничего нет:

Код: Выделить всё

drwxr-xr-x   4 root root     4096 Mar 16 16:13 dev
-rwxr-xr-x   1 root root        0 Mar 16 16:13 .dockerenv
drwxr-xr-x   3 root root     4096 Mar 16 16:13 etc
drwxr-xr-x   2 root root     4096 Mar 16 16:13 proc
drwxr-xr-x   2 root root     4096 Mar 16 16:13 sys
-rwxrwxr-x   1 root root 49461760 Mar 16 00:18 traefik
Если же сильно хочется шелл, то можно туда скопировать статически собраный какой-нибудь busybox через docker cp и затем docker exec.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?
Файл не останется, если он не создан на внешнем volume. Таков принцип работы системы хранения в докере - изначально используется образ файловой системы из образа + дополнительный слой для изменений. Как только контейнер удаляется, то слой для изменений удаляется тоже.
Ну я собственность этом и говорил:
1) шелл не обязательный элемент
2) контейнер не сохраняет созданные в рамках имеджа данные, если об этом специально на запрошено.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 43378
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav »

winamp писал(а):
borei писал(а):Чего делать с примером который я привёл - шелл я так и не нашёл.
Образ контейнера из вашего примера создан на базе scratch (https://hub.docker.com/_/scratch/). Там вообще практически ничего нет:
А можно в "фром скратче" написать?
RUN for i in `seq 1 10`; do touch /filename$i; done
winamp писал(а):
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?
Файл не останется, если он не создан на внешнем volume. Таков принцип работы системы хранения в докере - изначально используется образ файловой системы из образа + дополнительный слой для изменений. Как только контейнер удаляется, то слой для изменений удаляется тоже.
А если контейнер останавливается и снова стартует? :roll:
Аватара пользователя
Vims
Northern Yeti
Сообщения: 21307
Зарегистрирован: 17 фев 2003, 15:53
Откуда: Magadan - Vancouver
Контактная информация:

Re: docker guru ищется

Сообщение Vims »

посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо
winamp
Зритель
Сообщения: 9
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp »

Stanislav писал(а): А можно в "фром скратче" написать?
RUN for i in `seq 1 10`; do touch /filename$i; done
написать-то можно, только он с ошибкой выпадет. RUN с аргументом в виде строки выполняется через sh, которого в базовом образе нет.
winamp писал(а): А если контейнер останавливается и снова стартует? :roll:
Смотря как он был создан. Если с аргументом --rm в docker run, то увы. Если без него - то данные останутся, да. Только практической ценности в этом нет:
1. Любая оверлейная файловая система заведомо медленней базовой.
2. Данные останутся прибитыми гвоздями к контейнеру, в котором, вероятно выполняется софтина. Захотите обновить софтину через докер - данные пропадут.
winamp
Зритель
Сообщения: 9
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp »

Vims писал(а):посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо
Основной смысл - запуск приложений в заранее прогнозируемой среде. С необходимыми либами и прочим окружением.
Собрал один образ - запускаешь его на машине разработчика, CI сервере и на продакшне. Вне зависимости от ОС, в теории, результат одинаковый и предсказуемый. На практике же "есть нюансы".
Ну и в связи с популярностью, сейчас много разных приблуд развелось около докера, позволяющих строить различного рода кластеры - от registrstor + consul до kubernetes.
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

winamp писал(а):
Vims писал(а):посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо
Основной смысл - запуск приложений в заранее прогнозируемой среде. С необходимыми либами и прочим окружением.
Собрал один образ - запускаешь его на машине разработчика, CI сервере и на продакшне. Вне зависимости от ОС, в теории, результат одинаковый и предсказуемый. На практике же "есть нюансы".
Ну и в связи с популярностью, сейчас много разных приблуд развелось около докера, позволяющих строить различного рода кластеры - от registrstor + consul до kubernetes.
Были нормальные виртуальные машины, нет этого показалось мало, точнее много, и начали стругать всякие методы изоляции чтобы подэкономит ресурсы. Но вроде система рабочая, правда когда она разрастается в более менее приличный комплекс - штук сорок контейнеров начинаются нюансы - как организовавать сеть, логгирование мониторинг и далее по списку.
Аватара пользователя
LeoV
Графоман
Сообщения: 14497
Зарегистрирован: 02 июн 2012, 15:41
Откуда: Графство O'Mан
Контактная информация:

Re: docker guru ищется

Сообщение LeoV »

Vims писал(а):посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо
Они только этим и занимаются, ничего другого не знают. А у тебя это хобби. Сравни рыбака с удочкой и рыбака с динамитом.
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 43378
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav »

winamp писал(а):
Stanislav писал(а): А можно в "фром скратче" написать?
RUN for i in `seq 1 10`; do touch /filename$i; done
написать-то можно, только он с ошибкой выпадет. RUN с аргументом в виде строки выполняется через sh, которого в базовом образе нет.
Borei, так нужен шелл или не нужен? :roll:
winamp писал(а):
Stanislav писал(а): А если контейнер останавливается и снова стартует? :roll:
Смотря как он был создан. Если с аргументом --rm в docker run, то увы. Если без него - то данные останутся, да. Только практической ценности в этом нет:
1. Любая оверлейная файловая система заведомо медленней базовой.
2. Данные останутся прибитыми гвоздями к контейнеру, в котором, вероятно выполняется софтина. Захотите обновить софтину через докер - данные пропадут.
ИМХО вы тут что-то путаете :roll:
Как это нет практической ценности? А зачем тогда сделали команду docker start - которая запускает остановленный (docker stop) контейнер? Зачем тогда опция --restart в docker run?
1. и как это относится к ценности данных?
2. можно ведь и не прибивать гвоздями, а прокинуть вольюм?
borei
Маньяк
Сообщения: 4865
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei »

Stanislav писал(а):
winamp писал(а):
Stanislav писал(а): А можно в "фром скратче" написать?
RUN for i in `seq 1 10`; do touch /filename$i; done
написать-то можно, только он с ошибкой выпадет. RUN с аргументом в виде строки выполняется через sh, которого в базовом образе нет.
Borei, так нужен шелл или не нужен? :roll:
winamp писал(а):
Stanislav писал(а): А если контейнер останавливается и снова стартует? :roll:
Смотря как он был создан. Если с аргументом --rm в docker run, то увы. Если без него - то данные останутся, да. Только практической ценности в этом нет:
1. Любая оверлейная файловая система заведомо медленней базовой.
2. Данные останутся прибитыми гвоздями к контейнеру, в котором, вероятно выполняется софтина. Захотите обновить софтину через докер - данные пропадут.
ИМХО вы тут что-то путаете :roll:
Как это нет практической ценности? А зачем тогда сделали команду docker start - которая запускает остановленный (docker stop) контейнер? Зачем тогда опция --restart в docker run?
1. и как это относится к ценности данных?
2. можно ведь и не прибивать гвоздями, а прокинуть вольюм?
Я говорил что шелл не обязателен, а нужен он или не нужен зависит от задачи.
По поводу того остаются ли данные после стопа старта я сегодня проверю - чего гадать то.
Ответить