Высокоуровневые API для Linux-контейнеров


    Компания DotCloud разработала и выложила в открытый доступ систему Docker — высокоуровневые интерфейсы для доступа к Linux-контейнерам (LXC). Это идеальный инструмент для работы с контейнерами на любом сервере x64, для развёртывания крупномасштабных веб-инсталляций, кластеров БД, частных PaaS и т.д.

    LXC — система виртуализации на уровне операционной системы для запуска нескольких изолированных экземпляров Linux на одном компьютере. LXC не использует виртуальные машины, а создаёт виртуальное окружение с собственным пространством процессов и сетевым стеком. Все экземпляры LXC используют один экземпляр ядра ОС.

    Ключевые особенности Docker
    • Изоляция файловой системы: каждый контейнер процесса работает полностью отдельной корневой файловой системе
    • Изоляция ресурсов: системные ресурсы, как CPU и память, можно выделять по-разному для каждого контейнера процесса, используя cgroups
    • Сетевая изоляция: каждый контейнер процесса работает в своём собственном пространстве имён, с виртуальным интерфейсом и собственным IP-адресом
    • Копирование при записи: корневые файловые системы создаются путём копирования при записи, что позволяет развёртывать контейнеры исключительно быстро, не используя лишней памяти и места на диске
    • Логгирование: стандартные потоки (stdout/stderr/stdin) каждого контейнера процесса регитсрируются и сохраняются для последующего анализа
    • Менеджмент изменений: внесённые изменения в файловую систему одного контейнера можно применить к новому образу и повторно использовать для других контейнеров. Больше не нужны шаблоны и конфигурация вручную.
    • Интерактивная консоль: Docker может подключить pseudo-tty и стандартный ввод данных для любого контейнера

    Docker построен на файловой системе AUFS, в которой есть функция копирования при записи, и языке программирования Go.



    Инструкция по установке Docker под Ubuntu
    Инструкция по установке Docker под Windows (нужны Virtualbox, Vagrant и Git, на виртуальную машину ставится Ubuntu)
    Код на Github
    Документация
    Поделиться публикацией

    Комментарии 15

      +1
      Я правильно понимаю, что эта штука делает примерно то же самое, что и OpenVZ?
        +2
        Правильно. Мы как-то решали, что использовать — OpenVZ или LXC и выбрали второе, т.к. OpenVZ ну уж очень плохо поддерживался и в дистрибутивах его было почти не найти. Это было около двух лет назад… Теперь намучившись наигравшись с LXC переехали на vmware. Не православно, но уж очень удобно. Смотрю на DOCKER и оно выглядит весьма привлекательным, спасибо за статью!
          +1
          В случае использования OpenVZ работает только один метод, использовать CentOS как основной хост.
            0
            Совершенно необязательно. Можно любой дистрибутив, который способен работать на openvz/rhel5-ядре — например, Ubuntu Lucid.
          +2
          Почти. В отличии от openvz эту штуку можно использовать для изолирования и контроля отдельных приложений. А не только для изолирования окружения.
            0
            По-моему скорее напоминает jail(8) из FreeBSD
              0
              Судя по всему, это несколько более крутая штука. Скорее напоминает Vagrant для LXC.

              Больше бы стоило, наверное, отметить такие фичи:
              * можно запустить отдельную команду (sh -c "/bin/echo Hello | tee /etc/motd") в контейнере — эта выполняется за 0.1сек
              * очень легко создавать новые контейнеры. Можно, например, создать контейнер с результатами работы вышеуказанной команды — выполняется еще быстрее.
              * размер контейнера — всего лишь дифф по сравнению с базовым (на самом деле, чуть больше — для результата вышеуказанной команды ~20кб)
              * контейнеры можно генерировать и автоматизированно — указываем в Dockerfile базовый образ, какие команды запустить, какие порты высунуть и через несколько секунд получаем готовый образ
              * контейнеры можно публиковать

              Т.е. контейнеры по сравнению с OpenVZ очень и очень дешевые, да и на порядок удобнее с ними работать.

              Сами разработчики Docker позиционируют его как виртуализацию на уровне сервисов, а не на уровне серверов как обычно бывает, и по-моему они в этом преуспели.

              На сайте у них есть примеры как упаковать в контейнер, скажем web-приложение, но по идее это же можно делать и, скажем, дженкинсом.
              –1
              Ровно так же продукты «Параллельса» работают.
                –1
                мис
                  +1
                  Вот бы толковый гайд по LXC в целом для ещё не разбирающихся…
                  0
                  Самый главный вопрос, правда ли, что root в LXC (даже с помощью Docker) = root в хостовой системе?
                    0
                    Похоже на то:

                    $  sudo docker run -d busybox sleep 100                                                                                               
                    WARNING: Docker detected local DNS server on resolv.conf. Using default external servers: [8.8.8.8 8.8.4.4]
                    987151c1491d
                    $  ps -ef | grep sleep                                                                                                                
                    root     25705   932  0 13:06 ?        00:00:00 lxc-start -n 987151c1491d590aef066bf6e4ddc3635e09706a3ebd3bde0f068dd5c7dc4bf8 -f /var/lib/docker/containers/987151c1491d590aef066bf6e4ddc3635e09706a3ebd3bde0f068dd5c7dc4bf8/config.lxc -- /.dockerinit -g 172.17.42.1 -e HOME=/ -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -e container=lxc -e HOSTNAME=987151c1491d -- sleep 100
                    root     25712 25705  0 13:06 ?        00:00:00 sleep 100
                    timur    25744 19454  0 13:07 pts/3    00:00:00 grep sleep
                    
                      0
                      Они говорят, что хотят исправить это в будущем: www.infoq.com/news/2013/09/docker-container-security, blog.docker.io/2013/08/containers-docker-how-secure-are-they/

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое