2016-07-11 2 views
0

Я работаю с 10-12 разработчиками, которые работают в разных средах разработки, преимущественно с MAMP или Nginx/php-fpm, управляемыми с помощью варева. Мы хотели бы сделать очень постепенный переход к Docker, пробовав его для разработки на одном из наших многочисленных продуктов, прежде чем совершать.Переход от других локальных инструментов разработки до Docker

Проблема, с которой мы сталкиваемся в этом сценарии, заключается в том, как избежать столкновений TCP-порта при одновременном запуске MAMP, Nginx и т. Д. Одновременно с Docker. Наличие критически важных приложений для работы со стандартными портами (в этом сценарии 80, 443 и 3306) имеет решающее значение, и сейчас мы вынуждены включать и выключать локальные серверные среды в зависимости от проекта.

По умолчанию docker отображает порты на хост на 0.0.0.0, есть ли способ изменить это поведение, позволяя различным серверным средам прослушивать один и тот же порт одновременно с использованием разных IP-адресов?

Спасибо!

+0

Я я уверен, что вы можете обойти это, но я думаю, что [Vagrant] (https://www.vagrantup.com/) может быть лучше подходит для решения этой конкретной проблемы. С помощью Vagrant у вас может быть отдельная виртуальная машина, которая запускает ваше приложение (или несколько виртуальных машин для каждого приложения, и каждый из них может иметь свой собственный адрес и все они могут обслуживать контент через порт 80 без конфликтов, если это необходимо). Недостатком является то, что он намного более ресурсоемкий, чем Docker, и я лично считаю, что ящики для бродяг намного более громоздки для обновления этих изображений докеров. – threeve

+0

@threeve Вы правы в том, что Vagrant, возможно, упростили эту ситуацию. По иронии судьбы, мы продолжали использовать докер, пока не будет опубликован недавний публичный релиз Docker for Mac beta поскольку мы обнаружили, что Docker Machine является плохой альтернативой поддержке родного Docker (мы все развиваемся по osx). В этой конкретной ситуации, однако, Docker, работающий в VM, вероятно, решит проблему, хотя я не желаю возвращаться, поскольку он пришел с его собственный набор недостатков. – ReginaldMantooth

+0

Кажется, что Vagrant с Docker - ваш лучший выбор - мы используем это для среды разработки, и он работает хорошо. вы нашли? – ldg

ответ

0

Для всех, кому это интересно, мне удалось решить эту проблему, выполнив следующие шаги.

1.) sudo ifconfig lo0 alias 127.0.0.2 up

Это позволяет 127.0.0.2 в качестве псевдонима на кольцевом интерфейсе

2.) Теперь мы инструктировать обратный прокси-сервер Nginx jwilder связывать порты для конкретного IP-адреса на хосте а не 0.0.0.0

docker run --restart unless-stopped -p 127.0.0.2:80:80 -p 127.0.0.2:443:443 --name nginx -v ~/docker/tls:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro -v ~/docker/confs:/etc/nginx/conf.d jwilder/nginx-proxy

3.) Сделайте то же самое для MySQL

docker run --restart unless-stopped -p 127.0.0.2:3306:3306 --name mysqlserver -e MYSQL_ROOT_PASSWORD=root -d mysql:latest

4.) Теперь убедитесь, что другие веб-сервисы, т.е. варят Nginx слушаем на локальном хосте в nginx.conf/сервер включает в себя

5.) Отрегулируйте hostfile соответственно

127.0.0.1 exampleapp.org # host app 127.0.0.1 exampleapp2.org # host app 127.0.0.2 dockerapp.org # docker app 127.0.0.2 dockerapp2.org # docker app