Библиотека сайта rus-linux.net
Docker - связь контейнеров с помощью ссылок
Оригинал: Docker - Linking ContainersАвтор: Alex Collins
Дата публикации: 26 / 03 / 2014
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.
Я немного рассказал о создании простого контейнера с приложением и немного о том, как сохранять данные при помощи "контейнеров только для данных". Эта статья о том, как создать контейнер, который может получить доступ к сервису, реализованному в другом контейнере.
Создаем следующий контейнер MySQL:
FROM centos RUN yum -y install mysql-server RUN touch /etc/sysconfig/network RUN service mysqld start && \ sleep 5s && \ mysql -e "GRANT ALL ON *.* to 'root'@'%'; FLUSH PRIVILEGES" EXPOSE 3306 CMD ["/usr/bin/mysqld_safe"]
Мы можем запустить его как именованный контейнер:
docker run -t -i --name mysql e17f4931c127
С помощью следующей команды собираем в контейнере простое клиентское приложение:
FROM centos RUN yum -y install mysql CMD ["bash"]
Вы можете запустить это клиентское приложение, указав ссылку на контейнер MySQL:
docker run -t -i --link mysql:mysql a8f790f3cd57
Когда вы с помощью ссылки связываете контейнер, то в среде становятся доступны различные данные:
# env MYSQL_PORT_3306_TCP_PORT=3306 MYSQL_PORT_3306_TCP=tcp://172.17.0.2:3306 MYSQL_PORT_3306_TCP_PROTO=tcp MYSQL_NAME=/hungry_einstein/mysql MYSQL_PORT_3306_TCP_ADDR=172.17.0.2 MYSQL_PORT=tcp://172.17.0.2:3306
Теперь новый контейнер можно подключить к нашей базе данных MySQL:
# mysql -h $MYSQL_PORT_3306_TCP_ADDR mysql>
Это не очень хорошее решение и было бы лучше, если бы в отображении можно было пользоваться именем хоста! Но это сделать не так-то просто и в Docker на данный момент эта функция отсутствует :(.