1 апр. 2017 г.

Знакомство с Docker'ами

Собственно, руки давно уже чесались попробовать. Я часто использую VirtualBox для организации различного окружения под свои потребности, как на работе, так и дома. Общие плюсы виртуализации и конкретику Docker расписывать не буду, перейду сразу же к практической части.
Развертывание под Windows возможно в двух вариантах:
- Docker for Windows под Win 10 Pro 64x с включенным Hyper-V, позволяет использовать контейнеры под win/linux.
- DockerToolbox под другие 64х ОС без поддержки или выключенным Hyper-V с использованием VirtualBox, работает только контейнерами под linux.
Я хоть и сижу под необходимой версией, но поскольку VirtualBox не работает при включенном Hyper-V, то буду пробовать второй вариант.

Тонкости установки DockerToolbox:
- по умолчанию будет предложено установить VirtualBox и Git, установщик не контролирует наличия установленных программ.


- в случае отказа от установки Git необходимо будет поменять путь к консоли (C:\Program Files\Git\bin\bash.exe) в свойствах ярлыка Docker Quickstart Terminal.
- по умолчанию настройки docker и виртуальные машины сохраняются в %userprofile%\.docker. Есть несколько путей переназначения каталога, я в скрипте запуска start.sh добавил переопределение пути:
export MACHINE_STORAGE_PATH="/i/!vm/docker"


Теперь запускаем Docker Quickstart Terminal и ждем, пока развернется виртуальная машина. После запуска можно в качестве теста выполнить команды:
- docker version или docker info
- скачать и запустить тестовый контейнер: docker run hello-world
- получить список работающих контейнеров: docker ps
- посмотреть все контейнеры: docker ps -a

Теперь идем в Docker Store и попробуем подобрать что-нибудь, связанное с 1С. Я выбрал для теста эти сервер 1С и СУБД Postgres.

Производим развертывание сервера 1С, выполняем в консоли:
- docker pull temrdm/1c_server для получения последней версии (на текущий момент 8.3.8.2027)
- docker create --name=1c_server_data -v /var/log/1c -v /home/usr1cv8/ temrdm/1c_server
- docker run --restart=always -d --volumes-from 1c_server_data -v /etc/localtime:/etc/localtime:ro -p 1540-1541:1540-1541 -p 1560-1591:1560-1591 -h db temrdm/1c_server

Разворачиваем Postgres:
- docker pull sibsau/postgres-pro-1c
- docker run --restart=always --name postgres_1c -e POSTGRES_PASSWORD=mysecretpassword -d sibsau/postgres-pro-1c, предварительно меняем mysecretpassword на необходимый пароль

Выполняем docker ps, видим наши контейнеры:

Теперь нам нужно получить IP адреса самой виртуальной машины и контейнеров, выполняем:
docker-machine ip

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

Теперь на нашем компьютере в консоли управления серверами 1С добавляем новый центральный сервер:

Пробуем добавить новую базу


Если получаем ошибку,

то в файле ‪C:\Windows\System32\drivers\etc\hosts прописываем соответствие IP и имени сервера:
192.168.99.101 db

После чего повторяем создание базы. Для проверки набросал небольшую обработку для вывода системной информации сервера 1С.

Теперь попробуем создать свой контейнер с сервером 1С. Для этого нам понадобится Dockerfile, содержащий скрипт подготовки контейнера и файлы дистрибутива сервера 64x под Linux. Так же, поскольку у меня уже есть один сервер 1С, то скрипты сборки нового сервера настрою так, что бы он запускался на других портах.

Я взял за основу репозитарий  temrdm/1c_server. Полученный архив распаковывается в любой каталог, например d:\docker-1c-server-master. Готовим структуру каталогов по приложенной инструкции:
1) создаем каталог необходимой версии сервера, например d:\docker-1c-server-master\8.3.9-2170
2) создаем внутри него каталог dist
3) качаем deb-based дистрибутив сервера 1С и распаковываем в dist
4) копируем файлы скриптов из каталога другой версии
5) настраиваем файлы:
- Dockerfile, меняем значение ENV SERVER_1C_VERSION на нашу версию
- docker-entrypoint.sh, настраиваем порты: exec gosu usr1cv8 /opt/1C/v8.3/x86_64/ragent /port 2540 /regport 2541 /range 2560:2591
6) в консоли Docker Quickstart Terminal выполняем:
- cd d:\docker-1c-server-master
- docker build -t mickey1cx/srv_1c ./8.3.9-2170, ждем пока соберется образ
- docker create --name=1c_srv_data -v /var/log/1c -v /home/usr1cv8/ mickey1cx/srv_1c
- docker run --restart=always -d --volumes-from 1c_srv_data -v /etc/localtime:/etc/localtime:ro -p 2540-2541:2540-2541 -p 2560-2591:2560-2591 -h db2 mickey1cx/srv_1c

Готово, выполняем docker ps, убеждаемся, что контейнер стартовал.

Для проверки создаю базу на новом сервере и запускаю обработку:

Помимо этого можно поднять web-интерфейс для docker, например Portainer:
- docker pull portainer/portainer
- docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
После этого можно в браузере перейти по адресу <docker-machine IP>:9000, (например, http://192.168.99.100:9000), задать пароль администратора и пользоваться.


Ссылки по теме:
Понимая Docker
Поняв Docker
1С в контейнере. Быстро и недорого.

2 комментария:

  1. Как быть с програмными ключами? Как их пробросить в Докер контейнер? Как обычные файлы? При проверке лицензии 1с поймет что это та же машина и чек сумма по железу сойдётся?

    ОтветитьУдалить