使用 docker-compose 创建 MySQL schema/database
Using docker-compose in order to create a MySQL schema/database
我正在尝试创建 mysql database/schema(如果它尚不存在)。
这是我尝试过的:
docker-compose.yml
mysql:
image: mysql:5.6.26
environment:
- MYSQL_ROOT_PASSWORD=root
command: "mysql -uroot -proot < createDB.sql"
ports:
- "3306:3306"
createDB.sql
CREATE DATABASE IF NOT EXISTS bignibou;
没用。如果模式不存在,使用 docker/docker-compose 来创建模式的最佳方法是什么?
从 docker-compose 文档 - see Define Services - 你可以知道它将使用哪个 Dockerfile 来构建图像。因此,您可以基于 mysql 图像创建一个 Dockerfile,并使用标准 Dockerfile 命令在其中创建数据库。
您尝试执行的操作可能需要额外的脚本。因此,如果您可以选择构建镜像而不是直接使用预构建镜像,则需要使用 Dockerfile 并使用脚本文件,该脚本文件首先在 MySql 中导入脚本,然后运行服务本身。
看看这个答案:
我终于找到了解决方案的开头。
MySQL 图像使用一个环境变量,即 MYSQL_DATABASE,它在图像启动时使用数据库名称初始化容器完整内容请参见此处 documentation.
或阅读以下摘录:
MYSQL_DATABASE
This variable is optional and allows you to specify the name of a
database to be created on image startup. If a user/password was
supplied (see below) then that user will be granted superuser access
(corresponding to GRANT ALL) to this database.
这是我想出的:
mysql:
image: mysql:5.6.26
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=bignibou
ports:
- "3306:3306"
我现在需要一种方法来指定默认排序规则,但那是另一回事...
edit:对于那些有兴趣指定不同于默认排序规则的人,这里是使用另一个配置文件来覆盖默认排序规则的说明。见下文:
Using a custom MySQL configuration file The MySQL startup
configuration is specified in the file /etc/mysql/my.cnf, and that
file in turn includes any files found in the /etc/mysql/conf.d
directory that end with .cnf. Settings in files in this directory will
augment and/or override settings in /etc/mysql/my.cnf. If you want to
use a customized MySQL configuration, you can create your alternative
configuration file in a directory on the host machine and then mount
that directory location as /etc/mysql/conf.d inside the mysql
container.
If /my/custom/config-file.cnf is the path and name of your custom
configuration file, you can start your mysql container like this (note
that only the directory path of the custom config file is used in this
command):
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e
MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag This will start a new
container some-mysql where the MySQL instance uses the combined
startup settings from /etc/mysql/my.cnf and
/etc/mysql/conf.d/config-file.cnf, with settings from the latter
taking precedence.
如果将来有人登陆这里,这可能会有用。真正的问题似乎是 docker-compose 文件中的 "command" 语句。命令成功完成后,容器将被销毁。此 sql 脚本必须 运行 只有在 docker-compose 具有 运行 并且容器已创建之后。 docker-compose "command"其实就是在容器中启动一个服务。在这种情况下,您使用命令覆盖了 mysql 服务。
为了不丢失数据最好也使用卷:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- mysql-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_db_name
ports:
- "3307:3306"
volumes:
mysql-db:
我正在尝试创建 mysql database/schema(如果它尚不存在)。
这是我尝试过的:
docker-compose.yml
mysql:
image: mysql:5.6.26
environment:
- MYSQL_ROOT_PASSWORD=root
command: "mysql -uroot -proot < createDB.sql"
ports:
- "3306:3306"
createDB.sql
CREATE DATABASE IF NOT EXISTS bignibou;
没用。如果模式不存在,使用 docker/docker-compose 来创建模式的最佳方法是什么?
从 docker-compose 文档 - see Define Services - 你可以知道它将使用哪个 Dockerfile 来构建图像。因此,您可以基于 mysql 图像创建一个 Dockerfile,并使用标准 Dockerfile 命令在其中创建数据库。
您尝试执行的操作可能需要额外的脚本。因此,如果您可以选择构建镜像而不是直接使用预构建镜像,则需要使用 Dockerfile 并使用脚本文件,该脚本文件首先在 MySql 中导入脚本,然后运行服务本身。
看看这个答案:
我终于找到了解决方案的开头。
MySQL 图像使用一个环境变量,即 MYSQL_DATABASE,它在图像启动时使用数据库名称初始化容器完整内容请参见此处 documentation.
或阅读以下摘录:
MYSQL_DATABASE
This variable is optional and allows you to specify the name of a database to be created on image startup. If a user/password was supplied (see below) then that user will be granted superuser access (corresponding to GRANT ALL) to this database.
这是我想出的:
mysql:
image: mysql:5.6.26
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=bignibou
ports:
- "3306:3306"
我现在需要一种方法来指定默认排序规则,但那是另一回事...
edit:对于那些有兴趣指定不同于默认排序规则的人,这里是使用另一个配置文件来覆盖默认排序规则的说明。见下文:
Using a custom MySQL configuration file The MySQL startup configuration is specified in the file /etc/mysql/my.cnf, and that file in turn includes any files found in the /etc/mysql/conf.d directory that end with .cnf. Settings in files in this directory will augment and/or override settings in /etc/mysql/my.cnf. If you want to use a customized MySQL configuration, you can create your alternative configuration file in a directory on the host machine and then mount that directory location as /etc/mysql/conf.d inside the mysql container.
If /my/custom/config-file.cnf is the path and name of your custom configuration file, you can start your mysql container like this (note that only the directory path of the custom config file is used in this command):
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag This will start a new container some-mysql where the MySQL instance uses the combined startup settings from /etc/mysql/my.cnf and /etc/mysql/conf.d/config-file.cnf, with settings from the latter taking precedence.
如果将来有人登陆这里,这可能会有用。真正的问题似乎是 docker-compose 文件中的 "command" 语句。命令成功完成后,容器将被销毁。此 sql 脚本必须 运行 只有在 docker-compose 具有 运行 并且容器已创建之后。 docker-compose "command"其实就是在容器中启动一个服务。在这种情况下,您使用命令覆盖了 mysql 服务。
为了不丢失数据最好也使用卷:
version: '3'
services:
db:
image: mysql:5.7
volumes:
- mysql-db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_db_name
ports:
- "3307:3306"
volumes:
mysql-db: