docker guru ищется

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

Re: docker guru ищется

Сообщение borei » 16 мар 2018, 14:59

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
Маньяк
Сообщения: 4211
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei » 16 мар 2018, 15:07

Stanislav:
borei:
Stanislav:
borei:
Stanislav:Это как? А имаж они как делают? Минимум sh должен быть :roll:

Не факт совершенно.

Почему?

А зачем он ? Докер должен запустить апликуху и все. Если нужно ковыряются в рабочем имидже - ну да тогда да. Но все изменения сгорят после рестарта. Так что надобность шелла под вопросом.

Запуск апликухи - часто команда шелла.
Изменения не сгорят после стоп/старт контейнера.
Изменения не сгорят, если вы сделаете коммит.
Изменения не сгорят, если вы прокидываете вольюм.
Когда вы делаете имаж, вы выполняете некоторые команды (посмотрите какой-нить докер-файл) - каждая строка выполняются так: запускается временный контейнер, в нем запускается шелл, выполняющий ваши команды, после выполнения команды делается коммит, и т.д. построчно.

Каким образом обеспечить перзистенс данных при стопе/старте ? Два других случая я не рассматриваю - они специально сделаны чтобы сбросить данные на диск.
По поводу шелла. См мои примеры выше - я других шелла не знаю. Апликуха под докером работает в окружение cgroup, а это фактически хост система. Ни какой изоляции там и близко нет. Так что дернуть шелл из хоста не должно быть проблемой. Даже если это и не возможно не почему докер сам не может вызвать команды при генерации имиджа - там ведь только fork/exec системные вызовы и все.

Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 31899
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav » 16 мар 2018, 15:34

borei:
Stanislav:
borei:
Stanislav:
borei:Не факт совершенно.

Почему?

А зачем он ? Докер должен запустить апликуху и все. Если нужно ковыряются в рабочем имидже - ну да тогда да. Но все изменения сгорят после рестарта. Так что надобность шелла под вопросом.

Запуск апликухи - часто команда шелла.
Изменения не сгорят после стоп/старт контейнера.
Изменения не сгорят, если вы сделаете коммит.
Изменения не сгорят, если вы прокидываете вольюм.
Когда вы делаете имаж, вы выполняете некоторые команды (посмотрите какой-нить докер-файл) - каждая строка выполняются так: запускается временный контейнер, в нем запускается шелл, выполняющий ваши команды, после выполнения команды делается коммит, и т.д. построчно.

Каким образом обеспечить перзистенс данных при стопе/старте ? Два других случая я не рассматриваю - они специально сделаны чтобы сбросить данные на диск.
По поводу шелла. См мои примеры выше - я других шелла не знаю. Апликуха под докером работает в окружение cgroup, а это фактически хост система. Ни какой изоляции там и близко нет. Так что дернуть шелл из хоста не должно быть проблемой. Даже если это и не возможно не почему докер сам не может вызвать команды при генерации имиджа - там ведь только fork/exec системные вызовы и все.

Ну остановили контейнер - ну и что? Почему что-то должно потеряться? Вы ведь можете заребутить хост и контейнеры после ребута будут работать :-)
Команды в докер-файле могут быть разные... докер не хочет ничего о них знать :-)
Дернуть из хоста? Хм... очень популярна команда при создании имажа - yum или apt-get, а если вы на хосте РедХат билдите Убунту имаж? Где вы на хосте возьмете apt-get? :roll:

borei
Маньяк
Сообщения: 4211
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei » 16 мар 2018, 15:53

Хорошо оставим дернут с хоста, там действительно много вопросов всплывает.
Но
Почему докер не может запустить команду при построении имиджа?
Чего делать с примером который я привёл - шелл я так и не нашёл.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?

Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 31899
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav » 16 мар 2018, 16:06

borei:Хорошо оставим дернут с хоста, там действительно много вопросов всплывает.
Но
Почему докер не может запустить команду при построении имиджа?
Чего делать с примером который я привёл - шелл я так и не нашёл.
Зайди в рабочий контейнер, создай файл , прихлопни контейнер. Запусти контейнер. Файл останется ?

Может это к разработчикам докера вопрос? Но я их понимаю - они делают проще и надежнее.
Ну... если задаться такой целью, то, разумеется, можно по каким-то причинаm убить шелл
Прихлопнуть контейнер (docker rm) и стоп/старт (docker stop / docker start) - это разные вещи - не так ли?

winamp
Зритель
Сообщения: 7
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp » 16 мар 2018, 16:56

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
Маньяк
Сообщения: 4211
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei » 16 мар 2018, 17:08

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
Сообщения: 31899
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav » 16 мар 2018, 22:41

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
Сообщения: 17314
Зарегистрирован: 17 фев 2003, 15:53
Откуда: Magadan - Vancouver
Контактная информация:

Re: docker guru ищется

Сообщение Vims » 17 мар 2018, 08:51

посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо

winamp
Зритель
Сообщения: 7
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp » 17 мар 2018, 21:19

Stanislav:А можно в "фром скратче" написать?
RUN for i in `seq 1 10`; do touch /filename$i; done

написать-то можно, только он с ошибкой выпадет. RUN с аргументом в виде строки выполняется через sh, которого в базовом образе нет.
winamp:А если контейнер останавливается и снова стартует? :roll:

Смотря как он был создан. Если с аргументом --rm в docker run, то увы. Если без него - то данные останутся, да. Только практической ценности в этом нет:
1. Любая оверлейная файловая система заведомо медленней базовой.
2. Данные останутся прибитыми гвоздями к контейнеру, в котором, вероятно выполняется софтина. Захотите обновить софтину через докер - данные пропадут.

winamp
Зритель
Сообщения: 7
Зарегистрирован: 04 май 2012, 02:17

Re: docker guru ищется

Сообщение winamp » 17 мар 2018, 21:29

Vims:посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо

Основной смысл - запуск приложений в заранее прогнозируемой среде. С необходимыми либами и прочим окружением.
Собрал один образ - запускаешь его на машине разработчика, CI сервере и на продакшне. Вне зависимости от ОС, в теории, результат одинаковый и предсказуемый. На практике же "есть нюансы".
Ну и в связи с популярностью, сейчас много разных приблуд развелось около докера, позволяющих строить различного рода кластеры - от registrstor + consul до kubernetes.

borei
Маньяк
Сообщения: 4211
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei » 17 мар 2018, 22:31

winamp:
Vims:посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо

Основной смысл - запуск приложений в заранее прогнозируемой среде. С необходимыми либами и прочим окружением.
Собрал один образ - запускаешь его на машине разработчика, CI сервере и на продакшне. Вне зависимости от ОС, в теории, результат одинаковый и предсказуемый. На практике же "есть нюансы".
Ну и в связи с популярностью, сейчас много разных приблуд развелось около докера, позволяющих строить различного рода кластеры - от registrstor + consul до kubernetes.

Были нормальные виртуальные машины, нет этого показалось мало, точнее много, и начали стругать всякие методы изоляции чтобы подэкономит ресурсы. Но вроде система рабочая, правда когда она разрастается в более менее приличный комплекс - штук сорок контейнеров начинаются нюансы - как организовавать сеть, логгирование мониторинг и далее по списку.

Аватара пользователя
LeoV
Графоман
Сообщения: 8413
Зарегистрирован: 02 июн 2012, 15:41
Откуда: Графство O'Mан
Контактная информация:

Re: docker guru ищется

Сообщение LeoV » 17 мар 2018, 23:52

Vims:посмотрел на ваши баталии и вот тут всплывает фраза в голове - че я такой тупой :)
а можно хай левел функциональности докера. для чайников
спасибо

Они только этим и занимаются, ничего другого не знают. А у тебя это хобби. Сравни рыбака с удочкой и рыбака с динамитом.

Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 31899
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby

Re: docker guru ищется

Сообщение Stanislav » 18 мар 2018, 09:06

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
Маньяк
Сообщения: 4211
Зарегистрирован: 18 авг 2008, 14:51

Re: docker guru ищется

Сообщение borei » 18 мар 2018, 09:46

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. можно ведь и не прибивать гвоздями, а прокинуть вольюм?

Я говорил что шелл не обязателен, а нужен он или не нужен зависит от задачи.
По поводу того остаются ли данные после стопа старта я сегодня проверю - чего гадать то.


Вернуться в «Программизм»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей