I'm trying to host on docker an application which uses MySQL db. I'm using docker compose. my yml file looks like this:
version: '2'
volumes:
data_sql:
services:
medical-mysql:
image: mysql
hostname: medical-mysql
volumes:
- data_sql:/dbcreation.sql
environment:
MYSQL_DATABASE: Medical
MYSQL_ROOT_PASSWORD: root
STARTUP_SQL: data_sql
ports:
- "3306:3306"
medical-main:
build: .
ports:
- "8080:8080"
depends_on:
- medical-mysql
I have a dbcreation.sql
which creates the db schema and is kept in the yml folder. When I run the yml file it seems as if the file is not running.
What have I missed?
MySQL is one of the most popular SQL-compatible relational databases. Running MySQL inside a Docker container lets you separate your database from your code. You can also use a container orchestrator like Kubernetes to scale MySQL independently of your API server instance.
Simply just put your .sql file (dbcreation.sql) in a folder (ie. /mysql_init) and add the folder as a volume like this:
volumes:
- /mysql_init:/docker-entrypoint-initdb.d
The MySQL image will execute all .sql, .sh and .sql.gz files in /docker-entrypoint-initdb.d on startup.
1) Create dump file dbcreation.sql
2) Create import.sh file:
#!/usr/bin/env bash
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql
3) Create docker-compose.yaml
database:
image: mysql
container_name: database.dev
command: mysqld --user=root --verbose
volumes:
- ./dbcreation.sql:/tmp/dbcreation.sql
- ./import.sh:/tmp/import.sh
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "test"
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
"- ./dbcreation.sql:/tmp/dbcreation.sql" - "- local_path:path_inside_container"
4) Run
docker-compose up
docker exec database.dev bash /tmp/import.sh
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With