про Docker

Для меня при изучении новой технологии всегда самое сложное это не синтаксис, не наборы команд, а понимание идеологии. Синтаксис всегда можно заучить или знать где подсмотреть, а вот понять «суть» удается не всегда.
И такая история у меня с докером. Не первый раз уже выделяю время, чтобы ознакомиться с технологией и понять ее, но пока удается плохо.
Кто подскажет?
— я правильно понимаю, что образ это набор слоев? И в основании КАЖДОГО образа должна идти операционная система? Ведь какое программное обеспечение мы не запускаем, оно прежде всего работает в ОС. Реальный пример. Пишу скрипт на пайтоне, одна строка — hello world. Создаю докер файл, чтобы потом по нему собрать контейнер моего супер приложения. Указываю что за основу взять образ python из докерхаба. Собираю свой образ. Вижу что он весит почти гигабайт. Значит хоть я и не указывал этого буквально, но взяв образ python я обязательно получил и все другие слои, вплоть до ОС?
— в докер файле указываю команду copy и настраиваю какую локальную директорию с кодом куда поместить внутри контейнера. Я правильно понимаю, что это означает что внутри контейнера всегда своя файловая система, не имеющая ничего общего с локальной? Да я понимаю, что можно примонтировать директорию, подключить volume но я не об этом. Тоесть при запуске любого контейнера в нем поднимается полноценный линукс со свойственной ему файловой системой и директориями?
— а как правильно быть, если приложению нужны например и python и php и ruby. Ведь если я получу все эти три образа с докерхаба, то каждый их них будет содержать кучу слоев и каждый будет запускаться в своей собственной операционной системе? Я правильно понимаю? Наверняка излагаю непонятно. Ну к примеру (только пока не касаемся докер композ, ведь он появился не сразу, насколько я знаю и изначально докером пользовались без него) мне нужно запустить веб приложение. Я получаю в докере образ nginx. Мне нужно чтобы часть скриптов обрабатывалась php5.6 а часть — php7.4. Я получаю еще два образа. Запускаю три этих образа и получаю три контейнера и в итоге получаю три совершенно изолированные операционные системы? У каждой внутри своя файловая система? Как им общаться то, ведь например в настройках сервера nginx нужно указать путь к сокету php-fpm а это возможно только если они работают в рамках одной операционной системы.
— и если мое предположение верно, что первым слоем у каждого образа должна идти операционная система, то как это работает для винды? К примеру мне нужен образ dot.net который работает на виндовс сервере. Но если убунта у нас бесплатна и может быть в любом образе, то как быть с платной операционной системой windows?
— образ докера это файл? Он может быть перенесен с сервера на сервер методом копирования и из него создать контейнер? или только через сервисы докерхаба, сначала пушить на докер хаб а потом забирать с докерхаба?
Александр Мельник
18 октября 2020, 01:08
modx.pro
115
0

Комментарии: 3

Александр Мельник
18 октября 2020, 09:50
0
или вот еще. Есть официальный образ от докера PHP.
Как можно знать, какие модули в нем установлены? Когда php работает не в контейнере, я в терминале своей ubuntu выполняю php -m и вижу список. А как получить доступ к терминалу контейнера в котором работает php?
    Александр Мельник
    18 октября 2020, 10:14
    0
    или еще — как при использовании контейнеров организовать на сервере несколько доменов? Постараюсь пояснить в чем вижу проблему. Когда веб сервер установлен классически и работает в операционной системе как процесс, он считывает свои конфиурационные файлы и видит, что если пришел запрос на такой-то домен, но нужно использовать одну директорию с сайтом, если на другой домен — другую. Но предположим я хочу так же иметь два сайта на сервере, с разными доменами, но чтобы каждый работал как отдельный контейнер. В одном контейнере своя ubuntu, nginx, php-fpm и прочее и во втором — свои. Контейнеры смотрят наружу только своими сетевыми интерфейсами, тоесть обратиться к ним можно только через порт, но никак не через урл. К примеру мы запустим один nginx на порту 8080, второй на 8081 и даже при запуске контейнера пробросим их наружу. Тогда в браузере по localhost:8080 будет один сайт а по localhost:8081 другой. Но мы же не можем заставлять пользователей указывать порты. И получается что до двуз сайтов не достучаться, единственный выход на сервере держать еше один прокси сервер, тот же nginx который будет проксировать запросы по конкретному домену на конкретный порт. Тоесть один nginx будет передавать запрос другому nginx внутрь контейнера. Ужас какой-то. Или я чего-то не понимаю?
      Александр Мельник
      18 октября 2020, 11:54
      0
      все больше влюбляюсь в редактор VSCode. Обнаружил, что он умеет подключаться к работающему контейнеру как через терминал, так и через сам редактор. Теперь мои сомнения рассеялись, я вижу что любой контейнер содержит в себе внутри полноценный линукс. Был создан образ на базе самого легковесного образа из докерхаб для node и все равно внутри контейнера разворачивается своя операционная система.

        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        3