如何使用Docker创建一个mysql数据库?
我想在Docker上托管一个使用MySQL数据库的应用程序。我正在使用docker撰写。我YML文件看起来像这样:如何使用Docker创建一个mysql数据库?
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
我有一个dbcreation.sql
它创建了DB模式,并保持在YML文件夹中。当我运行yml文件时,好像文件没有运行。
有什么我错过了?
1)创建转储文件dbcreation.sql
2)创建import.sh文件:
#!/usr/bin/env bash
mysql -u root -p$MYSQL_ROOT_PASSWORD < /tmp/dbcreation.sql
3)创建搬运工-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/dbcrea tion.sql” - “ - LOCAL_PATH:path_inside_container”
4)运行
docker-compose up
docker exec database.dev bash /tmp/import.sh
我有一个问题实现你的答案一旦我的主容器启动,它需要构建分贝。它确实给了我很多获得我想要的地方的线索。我将mysql容器创建分割成单独的yml文件。我做了一个sh文件,内容如下: docker-compose -f mysql.yml up -d sleep 10; docker exec medical-mysql bash /tmp/import.sh docker-up up 它的工作原理。有没有更好的方法来确保mysql容器比睡眠准备好? –
@IzharLotem它不是关于容器,而是关于应用程序。容器已准备好,但容器内的应用程序没有。 您需要在应用程序级别解决它。你可以在你的“主容器”中检查MySQL数据库的健康状况,或者你可以在Dockerfile中覆盖CMD,并在导入完成后将标记放在某处。无论如何,这不是码头工作。 – ashatrov
这工作,@ashatrov谢谢 – Devang
简单地只是把一个文件夹中(即你的.sql文件(dbcreation.sql)。/mysql_init)和文件夹添加为这样的量:
volumes:
- /mysql_init:/docker-entrypoint-initdb.d
MySQL的图像将执行所有的.sql,.SH和.sql.gz文件/docker-entrypoint-initdb.d上启动。
那么什么是data_sql以及何时调用dbcreation.sql? – Mattia
data_sql只是我创建的用于承载创建文件的卷。我找不到任何其他方式来做到这一点,这也是行不通的。 –
看来你正在dbcreation.sql中装载data_sql。你从不创建数据库。你需要复制到/ var/lib/mysql(而不是dbcreation.sql,如果你想使用它,你需要执行类似于这样的命令:mysql -u user db
Mattia