Я иногда пишу небольшие патчи в 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)
Crandel
08.08.2015 11:10+1зачем велосипедствуете? есть отличный минимальный образ питона любой версии на официальном репозитории докера
hashmap
09.08.2015 12:59Согласен, но я, наверное, control freak, хотел все сам прописать.
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-dockerhashmap
09.08.2015 21:10-1Openstack достаточно капризная штука, я следовал Setting up a Keystone development environment (http://docs.openstack.org/developer/keystone/setup.html), там рекомендовали Ubuntu 14.04.
Разбитие на отдельные команды идет отсюда же, тем кто настраивал среду руками будет понятна логика.
С уменьшением размера хороший совет, спасибо. Статья неплохая, но в данном случае мне мультипроцессорный контейнер не нужен, я бы запускал сразу tox, если бы не нужно было один раз (на самом деле время от времени, иногда приходится чистить .tox/, .venv/) создавать venv.
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).Crandel
10.08.2015 18:06минимально рабочий говорите?
debian wheezy 065218d54d7d 7 weeks ago 84.95 MB
hub.docker.com/_/debianicCE
11.08.2015 05:58Ничего, что это докер контейнер? не?
Я же говорю про вполне реальную системы, которую можно установить куда угодно и уже на нее поставить докер.
Если брать debian с 0, то он примерно весит в районе 450 метров. Но я образ не тестировал, возможно нужны будут еще дополнительные пакеты.
В этом плане ubuntu и debian одинаковы, так как одного поля ягода.Crandel
11.08.2015 10:51ничего не понял. для винды и мака есть boot2docker — минимальный образ линукса, для запуска которого нужна виртуалка(virtualbox или boot2docker managment tool). Dockerfile используется для создания образов, а уже из них создаются контейнеры. Размер контейнера роли не играет, так как можно примонтировать любую папку любого размера. Важен размер только образа. И образ убунты намного больше чем дебиана. Суть докера — запуск одного приложения в одном контейнере. если Вы хотите полноценную систему — нужно использовать Vagrant. Для каждой задачи свой инструмент
icCE
15.08.2015 16:35>Суть докера — запуск одного приложения в одном контейнере
Это заблуждение
>ничего не понял. минимальный образ линукса, для запуска которого нужна виртуалка
Для запуска linux, виртуалка как бы не нужна. Это вы можете если захотите его запускать в виртуалке.
Образ ubuntu и debian пслд версий по размеру не сильно отличается, это в районе 450 метров.
Вот вам пример образа живой системы yadi.sk/d/gMMKW2K9iE9tN
Записать через dd на флэшку с 4gb и грузится с любой машины.
логин и пароль oldgames, делал для oldgames.ru для эксперементов.
vagrant -том я не пользуюсь, так как не вижу для себя особого смысла.
EvilsInterrupt
08.08.2015 22:07+1/offtop:
Ничего не могу с собою поделать, но статьи, где такие завлекающие фото читаю значительно чаще…
icCE
10.08.2015 01:02В свое время переполз на mac с linux, когда не было можно.
Сейчас я переползаю с mac на linux, так как по работе с linux в mac среде возникает много ненужных костылей.
lostpassword
Так это реальное фото с работы? Круто. Я сначала подумал, что это картинка для интернет-магазинов с какого-то фотостока, но Гугль мне сообщил, что я был неправ.)
hashmap
Да, это реальное фото с работы, сам фотографировал. Девушка — реальный инженер-программист. В каске она, правда, обычно не работает.
lostpassword
#ILookLikeAnEngineer
trikadin
Извините за оффтоп, но она мне жутко напоминает какую-то актрису. Никто не подскажет — какую?
UPD: Нашёл, Эванджелин Лилли.
Destiny999
Офис IBM?
Знакомая девушка, столик и уголок)