Показаны сообщения с ярлыком Docker. Показать все сообщения
Показаны сообщения с ярлыком Docker. Показать все сообщения

17 февраля 2017

My first article in the series on Docker

My first article in the series on
Docker was published in Russian magazine "Системный администратор" 1/2017 (p. 36-40). Read the full version in paper http://samag.ru/archive/article/3358

11 декабря 2016

08 сентября 2016

Авторизованные курсы Red Hat по Docker и Kubernetes в Москве

Для интересующихся технологиями контейнеров, первый раз в России будет проводиться авторизированный курс DO276 Red Hat по Docker и Kubernetes. Продолжительность 3 дня с 24 по 26 декабря. Если будут желающие, то могу провести и экзамен, который входит в линейку RHCA. Регистрация - http://inventa.ru/learn/courses/3411/181191/

Кроме того, до конца года в Инвенте проведу два экзамена Red Hat: по RHEV - 8 октября и по OpenStack - 24 сентября. Регистрация также на http://inventa.ru.

11 мая 2015

Настройка работы Docker и OpenStack


Первое с чего мы начнем — это установка Docker и необходимых пакетов. Обращаю внимание, что этот вариант установки подходит только для тестовых сред. Для «боевой установки» следует собрать rpm-пакет с драйвером Docker и не устанавливать на вычислительные узлы средства, применяемые при разработке. Действия выполняем на вычислительном узле:
[root@os2 ~]# yum -y install net-tools docker-io
python-pip git

Также обратите внимание на то, что мы устанавливаем пакет net-tools, который в современных дистрибутивах при установке по умолчанию заменен на iproute,а утилиты из его состава имеют статус устаревших. Нам он понадобится ради команды ifconfig, которая используется драйвером Docker.
Теперь забираем с Github исходный код драйвера и устанавливаем:

[root@os2 ~]# git clone
https://github.com/stackforge/nova-docker.git 
[root@os2 ~]# cd nova-docker 
[root@os2 nova-docker]# git checkout -b pre-i18n
9045ca43b645e72751099491bf5f4f9e4bddbb91
[root@os2 nova-docker]# python setup.py install 
[root@os2 nova-docker]# pip install pbr 

Команду git checkout мы выполняем до обновления исходного кода, который «ломает» совместимость с релизом OpenStack Juno. Следующим шагом запускаем и включаем сервис Docker и выполняем не очень «чистый» обходной прием с правами, для того чтоб в CentOS драйвер получил доступ к Docker:


[root@os2 ~]# systemctl start docker 
[root@os2 ~]# systemctl enable docker 
[root@os2 ~]# chmod 660  /var/run/docker.sock 


Нам необходимо в соответствии с инструкцией на Github настроить драйвер. Создаем файл с инструкциями по настройки сети для Docker:


[root@os2 ~]# mkdir /etc/nova/rootwrap.d 
[root@os2 ~]# vi
/etc/nova/rootwrap.d/docker.filters 

и в файл docker.filters копируем следующие содержимое:
#nova-rootwrap command filters for setting up
network in the docker driver 
# This file should be owned by (and
only-writeable by) the root user 
[Filters] 
# nova/virt/docker/driver.py: 'ln', '-sf',
'/var/run/netns/.*' 
ln: CommandFilter, /bin/ln, root 


Наконец на узле Glance добавляем к форматам контейнеров docker:


[root@os1 ~]# crudini --set
/etc/glance/glance-api.conf DEFAULT container_formats
ami,ari,aki,bare,ovf,ova,docker 
[root@os1 ~]#  systemctl restart
openstack-glance-api


А на вычислительном узле os2 в качестве драйвера указываем драйвер Docker. Других изменений производить не надо:

[root@os2 ]# crudini --set /etc/nova/nova.conf
DEFAULT compute_driver novadocker.virt.docker.DockerDriver 
[root@os2 ]# systemctl restart
openstack-nova-compute


Теперь тестируем нашу конфигурацию. Для начала ограничимся работоспособностью контейнеров Docker. Попробуем запустить контейнер с дистрибутивом Fedora:
 
[root@os2 ~]# docker run -i -t fedora /bin/bash 
Unable to find image 'fedora:latest' locally 
Trying to pull repository docker.io/fedora ... 
... 
Status: Downloaded newer image for
docker.io/fedora:latest 
bash-4.3# cat /etc/redhat-release 
Fedora release 21 (Twenty One) 

Как мы видим, из репозитория docker.io был скачен последний образ Fedora и запущен. Если посмотреть на список контейнеров, мы также это уведем:
[root@os2 ~]# docker ps 
CONTAINER ID  IMAGE         COMMAND      CREATED
      STATUS       PORTS NAMES 
cb7b37a3a1b2  fedora:latest "/bin/bash"
 9 minutes ago Up 9 minutes      heisenberg


Теперь скачаем образ с минимальным http-сервером thttpd, который будем использовать для проверки работы:
 
[root@os2 ~]# docker pull larsks/thttpd 
Trying to pull repository
docker.io/larsks/thttpd ... 
...
Status: Downloaded newer image for
docker.io/larsks/thttpd:latest 


После этого загрузим его в Glance:
 
[root@os2 ~]# source keystonerc_admin 
[root@os2 ~]# docker save larsks/thttpd | glance
image-create --is-public True --container-format docker --disk-format
raw --name larsks/thttpd 
+------------------+--------------------------------------+
| Property         | Value                      
         | 
+------------------+--------------------------------------+
| checksum         |
c98dcd00b284eaf35ba8d10e1bff941c     | 
| container_format | docker                     
         | 
| created_at       | 2015-05-09T19:42:23        
         | 
| deleted          | False                      
         | 
| deleted_at       | None                       
         | 
| disk_format      | raw                        
         | 
| id               |
7133ae58-03aa-4d80-af98-adf5e1c02a5e | 
| is_public        | True                       
         |  
| name             | larsks/thttpd              
         | 
| owner            |
a5c42139ce154b4d945b4ed806cbee81     | 
| protected        | False                      
         | 
| size             | 1083392                    
         | 
| status           | active                     
         | 
| updated_at       | 2015-05-09T19:42:25        
         | 
| virtual_size     | None                       
         | 
+------------------+--------------------------------------+


Проверяем список образов:


[root@os2 ~]# glance image-list 
+------+---------------------+-------------+------------------+----------+--------+
| ID   | Name                | Disk Format |
Container Format | Size     | Status | 
+------+---------------------+-------------+------------------+----------+--------+
| bc.. | cirros-0.3.3-x86_64 | qcow2       |
bare             | 13200896 | active | 
| 71.. | larsks/thttpd       | raw         |
docker           | 1083392  | active | 
+------+---------------------+-------------+------------------+----------+--------+


И в графическом интерфейсе Horizon:



Наконец, можно попробовать создать экземпляр контейнера:


$ source keystonerc_demo 
$ nova boot --image larsks/thttpd --flavor
m1.small test1 
+--------------------------------------+-------------------------------------+
| Property                             | Value  
                            | 
+--------------------------------------+-------------------------------------+
| OS-DCF:diskConfig                    | MANUAL 
                            | 
| OS-EXT-AZ:availability_zone          | nova   
                            | 
| OS-EXT-STS:power_state               | 0      
                            | 
| OS-EXT-STS:task_state                |
scheduling                          | 
| OS-EXT-STS:vm_state                  |
building                            |  
| adminPass                            |
Y6htpjH5xe2X                        |  
| created                              |
2015-05-09T20:05:08Z                | 
| flavor                               |
m1.small (2)                        | 
| id                                   |
65de57d0-f033-4818-a522-2c3291dc..  | 
| image                                |
larsks/thttpd (7133ae58-03aa-4d8..) |  
| metadata                             | {}     
                            | 
| name                                 | test1  
                            | 
| os-extended-volumes:volumes_attached | []     
                            | 
| security_groups                      | default
                            |
| status                               | BUILD  
                            | 
| tenant_id                            |
9c1c71f2c0f243b7a3b1d0d1880820e9    | 
| updated                              |
2015-05-09T20:05:08Z                | 
| user_id                              |
f3aabe457c2c4fe5912a0f90e569e04d    | 
+--------------------------------------+-------------------------------------+
 


Проверяем, что контейнер запущен:


[root@os2 ~]# docker ps 
CONTAINER ID        IMAGE                 
COMMAND                CREATED             STATUS              PORTS 
             NAMES 
4680097f2cc0        larsks/thttpd:latest  
"/thttpd -D -l /dev/   13 minutes ago      Up 13 minutes        
                  nova-65de57d0-f033-4818-a522-2c3291dc516b   
В графическом интерфейсе это выглядит следующим образом:



Для доступа к http-серверу присвоим экземпляру внешний floating IP:
[root@os1 ~]# nova floating-ip-associate test1
10.100.1.101 


Проверяем:


[root@os1 ~]# nova list 
+------+-------+--------+------------+-------------+-----------------------+
| ID   | Name  | Status | Task State | Power
State | Networks              | 
+------+-------+--------+------------+-------------+-----------------------+
| 65.. | test1 | ACTIVE | -          | Running  
  | demo-net=172.16.0.14, | 
|      |       |        |            |          
  |          10.100.1.101 | 
+------+-------+--------+------------+-------------+-----------------------+


И из тестовой машины со внешней сети пробуем подключится к серверу:


$ curl http://10.100.1.101 


  ____                            _         _   
   _   _ 
 / ___|___  _ __   __ _ _ __ __ _| |_ _   _| |
__ _| |_(_) ___  _ __  ___
| |   / _ \| '_ \ / _` | '__/ _` | __| | | | |/
_` | __| |/ _ \| '_ \/ __|
| |__| (_) | | | | (_| | | | (_| | |_| |_| | |
(_| | |_| | (_) | | | \__ \
\____\___/|_| |_|\__, |_| 
\__,_|\__|\__,_|_|\__,_|\__|_|\___/|_| |_|___/
                  |___/ 

Все работает, можно наградить себя
чашечкой кофе.