2015-01-16 5 views
0

Контейнеры докеров могут быть связаны. Большинство примеров связаны с связыванием контейнера Redis с контейнером SQL. Красота связывания контейнеров заключается в том, что вы можете сохранить среду SQL отдельно от среды Redis, и вместо того, чтобы создавать одно монолитное изображение, можно сохранить два хорошо разделенных.Связывание контейнеров-докеров для объединения разных библиотек

Я вижу, как это работает для серверных приложений (где связь передается через порты), но у меня возникают проблемы, дублирующие аналогичный подход для разных библиотек. В качестве конкретного примера я хотел бы использовать контейнер с Ipython Notebook вместе с C/C++ - библиотечным caffe (который предоставляет интерфейс Python через пакет в одной из его подпапок) и библиотеку оптимизации, такую ​​как Ipopt. Контейнеры для Ipython и Caffe с готовностью существуют, и в настоящее время я работаю над отдельным изображением для Ipopt. Но как мне связать эти три вместе, не строя один гигантский монолитный файл Докер? Caffe, Ipython и Ipopt имеют ряд зависимостей, что делает комбинированное обслуживание настоящим кошмаром.

ответ

1

Мой взгляд на контейнеры докеров состоит в том, что каждый контейнер обычно представляет один процесс. Например. redis или nginx. Контейнеры обычно связывают друг с другом using networking или через shared files in volumes.

Каждый контейнер имеет собственную операционную систему (обычно указанную в разделе FROM - в вашем Dockerfile). В вашем случае вы не используете какие-либо конкретные процессы, но вместо этого вы просто хотите обмениваться библиотеками. Это не то, для чего был создан докер, и я даже не уверен, что это выполнимо, но, похоже, это странный способ сделать что-то.

Мое предложение состоит в том, что вы создаете базовое изображение с наименьшим общим знаменателем (некоторые из общих библиотек, которые являются общими для всех других изображений), и что ваши другие изображения используют это изображение как изображение FROM.

Кроме того, если вам нужна более сложная настройка вашей среды с большим количеством зависимостей и интенсивной подготовкой, я предлагаю вам ознакомиться с другими инструментами обеспечения, такими как Chef или Puppet.

+0

Вот чего я боялся, но я не был полностью уверен, что что-то пропустил. Большое спасибо за разъяснение (также к Николаю Гурову)! – user45893

1

Соединение докеров связано со связыванием микросервисов, то есть с отдельными процессами, и не имеет никакого отношения к вашему вопросу, насколько я могу судить.

Нет готового объекта для компоновки отдельных изображений докеров в один контейнер, как вы называете «связыванием» в своем вопросе.

Если вы не хотите иметь это гигантское монолитное изображение, вы можете подумать о том, чтобы использовать инструменты для создания a-la кукольного, шеф-повара или другого вместе с докером. Один пример here. Там вы теоретически можете использовать существующие рецепты/playbooks для библиотек, в которых вы нуждаетесь. Я был бы удивлен, если бы этот подход был бы намного проще для вас, чем для поддержания вашего «большого монолитного» файла Docker.

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