Ниже описано как запускать Keystone тесты в Docker контейнере на OS X и зачем это мне понадобилось.



Я иногда пишу небольшие патчи в Openstack, в основном в Keystone. Делаю это на моем лаптопе с OS X. В 2009 я перешел с Linux на Mac, т.к. на последнем разрабатывать было не менее удобно, а заниматься всем остальным — гораздо удобнее. К сожалению, последнее время первое утверждение часто оказывается ложным. Например, Apple начала очень медленно обновлять системные open source библиотеки, от чего пострадали тесты Keystone — сначала из-за старого OpenSSL, а потом и python-ldap. Об этом, например, пишет Keystone PTL Morgan Fainberg. Начинает он оптимистичным

NOTICE: OS X based testing/running of Keystone will likely be deprecated

Можно с этим бороться, но удовольствие уже не то.

Сначала я перешел в VM с Ubuntu, что сняло все проблемы с запуском тестов, но настраивать и поддерживать еще одну среду разработки — задача, которой хотелось бы избежать. Запускать же VM только из-за тестов — расточительство. Кроме того, мелкие различия между Mac и Lunux (shell, MacVim) немного раздражали. Потому я решил продолжать разработку на Mac, запуская тесты в docker контейнере в том же iTerm2. Дальше пошаговая инструкция.

Сначала создадим проект
$ mkdir  ../docker
$ cd ../docker
$ vim Dockerfile


Пишем Dockerfile
FROM ubuntu:14.04
MAINTAINER XXX "xxx@gmail.com"
RUN apt-get update
RUN apt-get install -y python
RUN apt-get install -y git
RUN apt-get install -y python-setuptools
RUN apt-get install -y python-pip
RUN pip install virtualenv
RUN apt-get install -y gettext
RUN apt-get install -y python-dev python3-dev libxml2-dev libxslt1-dev
RUN apt-get install -y libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev libffi-dev
RUN pip install tox
RUN apt-get install -y python-tox


Создаем контейнер:
$ docker build -t="hashmap/keystone-dev" .


Получаем:
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM ubuntu:14.04
 ---> 63e3c10217b8
...
Unpacking python-tox (1.6.0-1ubuntu1) ...
Setting up libjs-jquery (1.7.2+dfsg-2ubuntu1) ...
Setting up libjs-underscore (1.4.4-2ubuntu1) ...
Setting up libjs-sphinxdoc (1.2.2+dfsg-1ubuntu1.1) ...
Setting up python-py (1.4.20-1) ...
Setting up python-virtualenv (1.11.4-1) ...
Setting up python-tox (1.6.0-1ubuntu1) ...
 ---> 41f003afb987
Removing intermediate container 52fa1fca6272
Successfully built 41f003afb987


Теперь получаем исходники keystone
$ mkdir -p ~/projects/openstack/
$ cd  ~/projects/openstack/
$ git clone https://github.com/openstack/keystone.git


Запускаем контейнер
$ docker run -it -v ~/projects/openstack/keystone/:/keystone hashmap/keystone-dev


Получаем сессию внутри контейнера:
root@ecc4228056af:/# cd /keystone


Один раз нам надо настроить venv
$ python tools/install_venv.py
$ source .venv/bin/activate
$ python -c "import keystone"


Если ошибок не возникло — все настроено. Можно еще обновить БД:
$ root@e29e21a501f0:/keystone# ./.venv/bin/keystone-manage db_sync


Теперь запускаем тест
$ tox -e py27
...
 - Passed: 4254
 - Skipped: 1234
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 0
...
 py27: commands succeeded
 congratulations :)

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

В итоге мы имеем среду разработки на Mac с работающими тестами, роскошь в текущей ситуации!

P.S. Если понравилась КДПВ — дайте мне знать, docker-girl нашей компании появится и в следующих постах.

Комментарии (18)


  1. lostpassword
    08.08.2015 10:20

    Так это реальное фото с работы? Круто. Я сначала подумал, что это картинка для интернет-магазинов с какого-то фотостока, но Гугль мне сообщил, что я был неправ.)


    1. hashmap
      09.08.2015 12:54
      +1

      Да, это реальное фото с работы, сам фотографировал. Девушка — реальный инженер-программист. В каске она, правда, обычно не работает.



      1. trikadin
        10.08.2015 00:00

        Извините за оффтоп, но она мне жутко напоминает какую-то актрису. Никто не подскажет — какую?

        UPD: Нашёл, Эванджелин Лилли.


      1. Destiny999
        10.08.2015 02:49

        Офис IBM?

        Знакомая девушка, столик и уголок)


  1. Crandel
    08.08.2015 11:10
    +1

    зачем велосипедствуете? есть отличный минимальный образ питона любой версии на официальном репозитории докера


    1. hashmap
      09.08.2015 12:59

      Согласен, но я, наверное, control freak, хотел все сам прописать.


      1. Crandel
        09.08.2015 16:49
        +1

        так Вы бы правильно все сделали, я бы ничего не написал. Но
        1) Вы взяли образ убунты, очень жирный изначально, хотя вполне бы хватило дебиана
        blog.javabien.net/2014/06/18/size-of-docker-images-which-linux-is-smaller
        2) оптимально все писать в одной команде RUN разделяя все команды &&, и сюда же последней командой добавлять очистку кеша( rm -f /var/cache/apt/archives/* например) для уменьшения образа.
        3) для pip есть опция --no-cache-dir для того же
        ну и в завершение неплохая статья на данную тему
        phusion.github.io/baseimage-docker


        1. hashmap
          09.08.2015 21:10
          -1

          Openstack достаточно капризная штука, я следовал Setting up a Keystone development environment (http://docs.openstack.org/developer/keystone/setup.html), там рекомендовали Ubuntu 14.04.

          Разбитие на отдельные команды идет отсюда же, тем кто настраивал среду руками будет понятна логика.

          С уменьшением размера хороший совет, спасибо. Статья неплохая, но в данном случае мне мультипроцессорный контейнер не нужен, я бы запускал сразу tox, если бы не нужно было один раз (на самом деле время от времени, иногда приходится чистить .tox/, .venv/) создавать venv.


        1. icCE
          10.08.2015 01:10

          >1) Вы взяли образ убунты, очень жирный изначально, хотя вполне бы хватило дебиана

          1) есть ubuntu core cdimage.ubuntu.com/ubuntu-core/releases/15.04/release
          2) Можно сделать свой образ deboostrap

          Я использую второй способ с самописном скриптом. Можно делать сборки как ubuntu так и debian под разные платформы.
          Сейчас вот нечто похожие хочу запилить для archlinux.

          По сути получается некий stage4 как в gentoo/funtoo.

          P.S. минимально рабочий/комфортный вариант с ядром получается примерно 750 метров, в сжатом состоянии 450. (bzip2).


          1. Crandel
            10.08.2015 18:06

            минимально рабочий говорите?
            debian wheezy 065218d54d7d 7 weeks ago 84.95 MB
            hub.docker.com/_/debian


            1. icCE
              11.08.2015 05:58

              Ничего, что это докер контейнер? не?

              Я же говорю про вполне реальную системы, которую можно установить куда угодно и уже на нее поставить докер.

              Если брать debian с 0, то он примерно весит в районе 450 метров. Но я образ не тестировал, возможно нужны будут еще дополнительные пакеты.

              В этом плане ubuntu и debian одинаковы, так как одного поля ягода.


              1. Crandel
                11.08.2015 10:51

                ничего не понял. для винды и мака есть boot2docker — минимальный образ линукса, для запуска которого нужна виртуалка(virtualbox или boot2docker managment tool). Dockerfile используется для создания образов, а уже из них создаются контейнеры. Размер контейнера роли не играет, так как можно примонтировать любую папку любого размера. Важен размер только образа. И образ убунты намного больше чем дебиана. Суть докера — запуск одного приложения в одном контейнере. если Вы хотите полноценную систему — нужно использовать Vagrant. Для каждой задачи свой инструмент


                1. icCE
                  15.08.2015 16:35

                  >Суть докера — запуск одного приложения в одном контейнере

                  Это заблуждение

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

                  Для запуска linux, виртуалка как бы не нужна. Это вы можете если захотите его запускать в виртуалке.
                  Образ ubuntu и debian пслд версий по размеру не сильно отличается, это в районе 450 метров.
                  Вот вам пример образа живой системы yadi.sk/d/gMMKW2K9iE9tN
                  Записать через dd на флэшку с 4gb и грузится с любой машины.
                  логин и пароль oldgames, делал для oldgames.ru для эксперементов.

                  vagrant -том я не пользуюсь, так как не вижу для себя особого смысла.


  1. EvilsInterrupt
    08.08.2015 22:07
    +1

    /offtop:
    Ничего не могу с собою поделать, но статьи, где такие завлекающие фото читаю значительно чаще…


  1. deus
    09.08.2015 16:16

    Жаль нет возможности обойтись без VirtualBox/VM


  1. entze
    09.08.2015 22:47

    Может кому пригодится. На Мас есть GUI для Docker — https://kitematic.com


  1. icCE
    10.08.2015 01:02

    В свое время переполз на mac с linux, когда не было можно.
    Сейчас я переползаю с mac на linux, так как по работе с linux в mac среде возникает много ненужных костылей.