首页 > 数据库 >[docker]mysql的docker镜像中docker-entrypoint-initdb.d目录的妙用

[docker]mysql的docker镜像中docker-entrypoint-initdb.d目录的妙用

时间:2023-05-07 14:06:19浏览次数:33  
标签:脚本 文件 entrypoint initdb SQL docker

docker-entrypoint-initdb.d 是 Docker 官方 MySQL 镜像中的一个目录,用于初始化数据库。在该目录下,可以放置一些 SQL 脚本文件,MySQL 会在容器启动时自动执行这些脚本文件,用于创建用户、创建数据库、创建表等操作。

具体来说,当 MySQL 镜像启动时,其 entrypoint.sh 脚本会检查是否存在 docker-entrypoint-initdb.d 目录,并将其中的所有 SQL 脚本文件按照字典顺序依次执行。这些 SQL 脚本文件应该以 .sql 扩展名结尾,并且只有具有读写权限的用户才能访问它们。

使用 docker-entrypoint-initdb.d 目录有以下好处:

  1. 可以在容器启动时自动初始化数据库,避免手动创建数据库和表等操作。
  2. 可以将数据库初始化脚本与应用程序代码分离,使得数据定义和应用程序逻辑更加清晰。
  3. 可以通过挂载卷等方式,实现对同一份数据初始化脚本的复用。

例如,假设我们有一个 database.sql 文件,包含了创建数据库和表格的 SQL 命令。则可以将该文件放置到 /my/custom/dir 目录下,然后将该目录挂载到容器的 /docker-entrypoint-initdb.d 目录下:

$ ls /my/custom/dir
database.sql

$ docker run --name some-mysql -v /my/custom/dir:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

在这个例子中,当 MySQL 镜像启动时,它会自动执行 /docker-entrypoint-initdb.d/database.sql 中的 SQL 命令,并创建相应的数据库和表格。

docker-entrypoint-initdb.d 目录是 Docker 官方 MySQL 镜像中用于初始化数据库的目录。将 SQL 脚本文件放置到该目录下,MySQL 会在容器启动时自动执行这些脚本文件,用于创建用户、创建数据库、创建表等操作。

如果需要在 docker-entrypoint-initdb.d 目录下执行多个 SQL 脚本文件,并按照自定义顺序执行这些脚本文件,则可以使用以下方法:

  1. 将 SQL 脚本文件命名为以数字开头的文件名,例如 001_create_table.sql002_insert_data.sql 等。
  2. 在每个文件名中指定一个数字以表示该脚本文件应该被执行的顺序。更小的数字表示先执行。
  3. 将这些 SQL 脚本文件挂载到容器的 /docker-entrypoint-initdb.d 目录下。

例如,假设我们有三个 SQL 脚本文件 001_create_table.sql002_insert_data.sql003_create_index.sql,并且希望按照这些文件的顺序依次执行。则可以将这些文件放置在同一个目录中,并将其挂载到容器的 /docker-entrypoint-initdb.d 目录下:

$ ls /my/custom/dir
001_create_table.sql 002_insert_data.sql 003_create_index.sql

$ docker run --name some-mysql -v /my/custom/dir:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

这样,MySQL 就会按照文件名的顺序依次执行这些 SQL 脚本文件,并完成数据库的初始化。

注意,在实际使用时,应该仔细检查 SQL 脚本文件之间的依赖关系,并确保它们在正确的顺序下执行。如果有多个 SQL 脚本文件依赖于同一个表或者数据,那么应该将这些脚本文件放置在同一个文件中,或者将它们按照正确的顺序分别挂载到容器的 /docker-entrypoint-initdb.d 目录下。

通过为 SQL 脚本文件指定以数字开头的文件名,并按照自定义顺序在 docker-entrypoint-initdb.d 目录下挂载这些文件,就可以实现在 Docker 官方 MySQL 镜像中执行多个 SQL 脚本文件并按照自定义顺序执行的目的。

标签:脚本,文件,entrypoint,initdb,SQL,docker
From: https://blog.51cto.com/u_15747907/6251894

相关文章

  • 在 AlmaLinux 9安装Docker Compose
    首先先安装Docker如何在AlmaLinux8上安装和使用Docker检查Docker版本docker--version安装DockerComposesudocurl-L"https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-compose设置......
  • 关于docker的Cgroup Driver相关的配置说明以及其值为cgroupfs与systemd的区别
    在我们安装完docker-ce软件后(笔者这里安装的docker-ce-20.10.24-3.el8.x86_64)就可以直接启动docker服务 systemctlrestartdocker.service这时我们通过 dockerinfo命令,可以看到当前docker的一些配置信息,今天笔者主要是看CgroupDriver相关的,如下:[root@k8s-masterqq-5201......
  • ARM平台安装Docker的方法
    转自:https://blog.51cto.com/u_11529070/3606178?b=totalstatistic1.找了一下有一个网站能够下载docker的arm的deb包可以使用网址为:https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/arm64/建议下载最新版本的包我这边下载了三个:containerd.io_1.2.6-......
  • docker学习二 docker 常用命令
    一、docker的基本命令也可以通过docker官网查询docker名:官网->Reference->Command-lineReferencehttps://docs.docker.com/reference/#启动dockersystemctlstartdocker#关闭dockersystemctlstopdocker#重启dockersystemctlrestartdocker​#docker设置随服务启动......
  • Docker备忘录
    基础知识博客园内有很多作者分享全面的Docker快速入门教程Docker与虚拟机的区别Docker架构及工作原理手把手教你安装DockerDockerfile制作自己的镜像文件Docker日常工作常用命令网络#4个模式,一般只用briagehost#直连主机IPnone#没有设置briage#虚拟网卡containe......
  • Docker 入门使用 (二)
    配置国内的源>/etc/docker/daemon.json{"registry-mirrors":["https://mirror.ccs.tencentyun.com","http://registry.docker-cn.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com......
  • Ubuntu 安装 Docker Engine 并配置用户权限
    1.删除旧版本Docker,没有可以跳过sudoapt-getremovedockerdocker-enginedocker.iocontainerdrunc2.更新apt包索引并安装包,以允许apt通过HTTPS使用存储库sudoapt-getupdatesudoapt-getinstallca-certificatescurlgnupg3.使用以下命令设置存储库echo\"d......
  • Portainer连接远程Docker
    介绍Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。而且完全免费,基于容器化的安装方式,方便高效部署。官方站点:https://www.portainer.io/连接远程Docker1、配置远程Docker端口vim/usr/lib/systemd/system/docker.service......
  • 在docker中搭建nominatim服务
    nominatim推荐配置(https://nominatim.org/release-docs/4.2/admin/Installation/#tuning-the-postgresql-database):至少需要2GB的RAM,否则安装将失败。对于完整的星球导入,强烈建议使用128GB或更多的RAM。如果您的RAM小于64GB,请不要报告内存不足问题。对于完整的星球安装,您......
  • 关于docker的/etc/docker/key.json文件说明
    对于刚安装完docker,是没有/etc/docker/key.json这个文件的,也不会有/etc/docker/目录 但是当我们启动或者重启docker后,就会自动创建上面的目录,以及生成/etc/docker/key.json文件[root@qq-5201351~]#systemctlrestartdocker关于/etc/docker/key.json这个文件,有如下几......