Наши партнеры

UnixForum





Библиотека сайта 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 на данный момент эта функция отсутствует :(.