В пост- докерском веб-приложении с Puppet мы размещали веб-приложение в одном контейнере, на этот раз мы разместим веб-приложение в среде связанного контейнера докера, в которой находится наша база данных (mysql), используемая нашим веб-приложением, размещенным в другом контейнере докера. ,
Прежде чем начать, давайте кратко расскажем о контейнерах Linking Docker и о том, как они нам помогают.
Связывать или соединять контейнеры Docker?
Связывание контейнеров Docker позволяет контейнерам обнаруживать друг друга и безопасно передавать информацию между ними. Связывание устанавливает канал между контейнерами, позволяя контейнеру-получателю надежно получить доступ к контейнеру-источнику, предотвращая доступ контейнера-источника к сети.
В этом посте контейнер получателя — это контейнер Spring-application, который мы создали в этом посте, а контейнер источника — контейнер базы данных, который мы создаем сейчас.
Давайте начнем с создания контейнера базы данных и связывания его с spring-application-container, выполнив следующие шаги:
Шаг 1: Создайте каталог с любым именем для меня, это база данных-контейнер внутри докера каталогов (созданного в этом посте) , следующим образом:
|
1
2
3
4
|
$ cd docker$ mkdir database-container$ cd database-container$ touch Dockerfile |
Шаг 2. Скопируйте приведенный ниже контент в docker / database-container / Dockerfile :
|
1
2
3
4
5
6
|
FROM ubuntu:latestMAINTAINER arpitaggarwal "aggarwalarpit.89@gmail.com"RUN apt-get install -q -y mysql-serverRUN apt-get install -q -y mysql-clientRUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnfEXPOSE 3306 |
RUN sed -i -e ”s / ^ bind-address \ s * = \ s * 127.0.0.1 / bind-address = 0.0.0.0/” /etc/mysql/my.cnf, указанный выше, должен установить MYSQL bind- обратиться к 0.0.0.0, потому что это обычно по умолчанию слушает только 127.0.0.1 .
Шаг 3: Создайте вновь созданный контейнер базы данных следующим образом:
|
1
2
|
$ cd database-container$ docker build --no-cache=true -t database . |
указанная выше база данных ссылается на имя образа контейнера базы данных.
Шаг 4: Запустите контейнер базы данных с присвоением имени «db» и MYSQL Server, установленный как сервис внутри контейнера базы данных , следующим образом:
|
1
|
$ docker run -P -it --name db database /bin/bash |
Шаг 5: Измените существующий Dockerfile -контейнер- приложения, чтобы скопировать новое приложение в контейнер, использующий базу данных, размещенную в БД-контейнера , следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
FROM ubuntu:latestMAINTAINER arpitaggarwal "aggarwalarpit.89@gmail.com"RUN apt-get -y updateRUN apt-get -q -y install gitRUN sudo apt-get install -y rubyRUN apt-get install -y ruby-devRUN apt-get -y updateRUN apt-get install -y makeRUN apt-get install -y build-essentialRUN apt-get install -y puppetRUN gem install librarian-puppetADD Puppetfile /RUN librarian-puppet installRUN puppet apply --modulepath=/modules -e "include java8 class { 'tomcat':version => '7',java_home => '/usr/lib/jvm/java-8-oracle'}"RUN apt-get remove -y make puppet build-essential ruby-devCOPY /spring-mysql/target/spring-mysql.war /var/lib/tomcat7/webapps/EXPOSE 8080 |
Шаг 6: Создайте приложение в каталоге docker , на этот раз spring-mysql клонирован из github :
|
1
2
3
4
|
$ cd docker$ git clone https://github.com/arpitaggarwal/spring-mysql.git$ cd spring-mysql$ mvn clean install |
Шаг 7: Затем запустите spring-application-container, связав его с базой данных-контейнером следующим образом:
|
1
|
$ docker run -p 8080:8080 -it --name webapp --link db spring-application-container /bin/bash |
Флаг -link, указанный выше, создает защищенную связь между контейнером-приложением-Spring и контейнером — базой данных и предоставляет информацию о соединении для исходного контейнера контейнеру-получателю двумя способами:
а) Переменные среды.
б) Обновление файла / etc / hosts .
Теперь мы можем использовать открытые переменные среды или записи из host для доступа к контейнеру db. Кроме того, если мы перезапустим исходный контейнер, связанные файлы контейнеров / etc / hosts будут автоматически обновлены с использованием нового IP-адреса исходного контейнера, что позволит продолжить связанное взаимодействие.
В нашем приложении мы использовали механизм ввода хоста для чтения IP-адреса исходного контейнера, используя Java InetAddress .
Шаг 8: Наше приложение попытается получить доступ к базе данных mysql с пользователем в качестве «test» и паролем в качестве «test» и использовать таблицу сотрудников для хранения сведений о сотрудниках, отправленных из приложения , поэтому давайте создадим его:
|
1
2
3
4
5
6
7
|
$ mysql --user=root mysql$ CREATE USER 'test'@'%' IDENTIFIED BY 'test’;$ GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;$ FLUSH PRIVILEGES;$ CREATE DATABASE test;$ USE TEST;$ CREATE TABLE employee (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), age VARCHAR(30)); |
Шаг 9: Получите ваш IP-адрес контейнера Docker, используя docker-machine :
|
1
|
docker-machine ip your_vm_name |
Затем создайте сотрудника, отправившего имя и возраст из приложения, и обновите экран, чтобы получить его из базы данных по адресу http: // container-ip-address: 8080 / spring-mysql
- Полный исходный код размещен на github .
| Ссылка: | Запуск веб-приложения в среде связанных Docker-контейнеров от нашего партнера JCG |