У меня есть проект с загрузочной пружиной, который я хотел бы поместить в контейнер с помощью Docker.У меня есть пара приложений весенней загрузки, которые подключаются к одному и тому же серверу MySql.
Моим весенним приложениям требуется полная настройка базы данных (т. Е. Все таблицы должны быть созданы и некоторые данные должны быть вставлены в некоторые таблицы).) для начала.
Я использую Docker версия 18.09.0 и docker-compose версия 1.23.1 и ubuntu 16.04 LTS
У меня есть два файла create.sql
и insert.sql
, которые я использую для инициализациибаза данных, которая будет использоваться приложением.
Я создаю изображения с помощью команды docker-compose.yml
, и она успешно выполняется и создает изображения.
У меня есть следующиеВопросы.
Я предполагаю, что при использовании docker-compose контейнер запускается сразу после запуска всех зависимых контейнеров.Можно ли подождать, пока сервер mysql будет готов и готов к приему подключений, прежде чем мой контейнер API будет запущен?
Если я решил создать контейнеры отдельно для приложений и mysqlи не использовать docker-compose, как мне убедиться, что мои приложения подключены к контейнеру mysql?
Есть ли какой-нибудь другой инструмент, который может помочь мне достичь этого?
Примечание: Я пытался использовать docker inspect <container_id>
, чтобы найти IpAddress для контейнера mysql и использовать его для подключения, но это не такработать также.
Ниже приведены файлы, которые я использую для создания изображений.
docker-compose.yml
файл.
version: '3'
services:
demo-mysql:
image: demo-mysql
build: ./demo-mysql
volumes:
- /mnt/data/mysql-data:/var/lib/mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=demo
- MYSQL_PASSWORD=root
demo-api:
image: demo-api-1.0
build: ./api
depends_on:
- demo-mysql
ports:
- 8080:8080
environment:
- DATABASE_HOST=demo-mysql
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=demo
- DATABASE_PORT=3306
demo1-app:
image: demo1-app-1.0
build: ./demo1
depends_on:
- demo-mysql
ports:
- 8090:8090
environment:
- DATABASE_HOST=demo-mysql
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=demo
- DATABASE_PORT=3306
Ниже приведен Dockerfile
для проекта весенней загрузки
FROM java:8
VOLUME /tmp
ARG DATA_PATH=/src/main/resources
ARG APP_PORT=8080
EXPOSE ${APP_PORT}
ADD /build/libs/demo-api.jar demo-api.jar
ENTRYPOINT ["java","-jar","demo-api.jar"]
Ниже приведен Dockerfile
, который я использовал для создания своего изображения mysql
FROM mysql:5.7
ENV MYSQL_DATABASE=demo \
MYSQL_USER=root \
MYSQL_ROOT_PASSWORD=root
ADD ./1.0/create.sql /docker-entrypoint-initdb.d
ADD ./1.0/insert.sql /docker-entrypoint-initdb.d
EXPOSE 3306