Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据

这篇具有很好参考价值的文章主要介绍了Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

制作一个 MySQL Docker 镜像并初始化数据库信息

环境

  • win 11
  • Docker-Desktop 4.14.0 (91374)

分析

启动一个MySQL容器很容易。如何初始化数据呢?
大概我们会尝试很多操作,比如百度常见到 使用 CMD 命令调用shell脚本,通过shell脚本处理初始化数据等等,经过实践,这些都不太方便。
其实,MySQL 官方提供了很简单的方案,用户只需要准备好 初始化脚本,并把这些初始化脚本在制作镜像时拷贝到 MySQL 镜像内的 /docker-entrypoint-initdb.d 文件夹中即可。

MySQL 数据初始化机制

在 Docker hub 官网中,MySQL镜像首页提供了很多初始化数据的方式,包括数据的导入、导出等。下面是官方对使用 /docker-entrypoint-initdb.d 初始化数据的描述:

原文

When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.

译文

首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为 /docker-entrypoint-initdb.d 中的扩展名 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。您可以通过将 SQL 转储挂载到该目录中来轻松填充 mysql 服务,并为包含贡献数据的自定义映像提供。默认情况下,SQL 文件将导入到 MYSQL_DATABASE 变量指定的数据库中。

实例

本例将通过 Dockerfile 构建一个docker 镜像,并在该容器中初始化数据。

1、编写 Dockerfile

创建Dockerfile文件,并输入如下内容

FROM mysql:5.7

# 将 xzbd.sql 放到 docker 初始化文件家中
COPY xzbd.sql /docker-entrypoint-initdb.d/xzbd.sql

该镜像基于 MySQL 5.7 制作,命名 COPY xzbd.sql /docker-entrypoint-initdb.d/xzbd.sql 是把初始化 SQL 添加到 MySQL 镜像的 /docker-entrypoint-initdb.d 目录中

2、xzbd.sql 文件

该文件为自定义的数据库文件,内容如下:

create database if not exists xzbd;
use xzbd;

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for x_item
-- ----------------------------
DROP TABLE IF EXISTS `x_item`;
CREATE TABLE `x_item`
(
    `id`     INT AUTO_INCREMENT PRIMARY KEY,
    `name`   VARCHAR(10) NOT NULL COMMENT '元素名称',
    `status` VARCHAR(10) NOT NULL COMMENT '元素状态',
    `icon`   VARCHAR(50) NOT NULL COMMENT 'ICON',
    `type`   VARCHAR(50) NOT NULL COMMENT '类型',
    CONSTRAINT x_item_name_uindex UNIQUE (name)
) ENGINE = InnoDB
  CHARACTER SET = utf8mb4 COMMENT 'X子项'
  ROW_FORMAT = Dynamic;

-- 初始化 X子项
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (27, 'XItem02', 'ENABLE', 'ITEM_9', 'ITEM_9');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (28, 'XItem03', 'ENABLE', 'ITEM_10', 'ITEM_10');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (29, 'XItem04', 'ENABLE', 'ITEM_11', 'ITEM_11');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (30, 'XItem05', 'ENABLE', 'ITEM_12', 'ITEM_12');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (31, 'XItem06', 'ENABLE', 'ITEM_13', 'ITEM_13');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (32, 'XItem07', 'ENABLE', 'ITEM_14', 'ITEM_14');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (33, 'XItem08', 'ENABLE', 'ITEM_15', 'ITEM_15');
INSERT INTO `x_item`(`id`, `name`, `status`, `icon`, `type`) VALUES (34, 'XItem08', 'ENABLE', 'ITEM_16', 'ITEM_16');

该脚本中主要做了如下内容

  • 创建了一个数据库 xzbd
  • 创建表 x_item
  • 给表 x_item 中插入8 条数据

文件准备及目录结构如下图所示:
Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

3、构建镜像

构建镜像 mysql-xzbd:0.1.0 , 命令如下:


docker build -t mysql-xzbd:0.1.0 .

注意命令最后的那个 .

构建过程如下:

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

构建成功后,使用 docker images 查看是否有 mysql-xzbd 镜像,且版本为 0.1.0

结果如下:

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

上图中使用了 findstr 过滤,在 linux 操作系统应将其换为 grep

4、运行

使用刚刚构建的 mysql-xzbd:0.1.0 镜像运行一个容器。

# 运行容器
docker run --name mysql-xzbd-servevr -it -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql-xzbd:0.1.0

# 查看是否启动成功
docker ps

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

5、验证

验证容器 mysql-xzbd-servevr 中是否创建了数据库 xzbd,并查看其内部是否有 x_item 表,且内部是否拥有初始化数据。

  • 进入容器

docker exec -it mysql-xzbd-servevr sh

  • 登录 MySQL

mysql -uroot -p

输入密码 123456 。登录成功后效果如下:

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

  • 查看数据库
show databases;

  • 查看数据表

use xzbd;

show tables;

  • 查看表 x_item 中的数据

select * from x_item;

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据,Linux,笔记,总结,数据库,mysql,docker

总结

本文介绍了使用Dockerfile构建有初始化数据MySQL镜像包的详细过程。通过验证,使用 /docker-entrypoint-initdb.d 初始化数据是可行的。文章来源地址https://www.toymoban.com/news/detail-802441.html

到了这里,关于Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker容器化技术(使用Dockerfile制作镜像)

    Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在

    2024年03月19日
    浏览(41)
  • 【Docker容器】Docker安装MySQL镜像详细步骤(适合新手使用)

    前言 自从用了Docker之后,发现装东西是真的香,不用在自己根据下载压缩包一个个的去解压、执行、配置环境等等操作。想要啥直接就用Docker直接即拿即用,灰常的舒服啊。话不多说,正式开干,直接开始安装步骤。以下所有的安装前提是你装了Docker引擎了,不要告诉我连

    2023年04月25日
    浏览(54)
  • linux centos安装google chrome浏览器使用headless无头模式 制作docker镜像

    chromedriver 驱动下载地址: https://npm.taobao.org/mirrors/chromedriver/ linux centos安装google chrome浏览器使用headless无头模式 用java开发爬虫,或者需要java操作控制浏览器来渲染页面,抓取页面元素,都需要在linux安装google chrome浏览器,然后就可以通过chrome driver来连接操作chrome浏览器了,

    2024年02月09日
    浏览(47)
  • 【Docker】Docker学习④ - Docker镜像与制作

    参考:【Docker】Dokcer学习① - 简介 参考:【Docker】Docker学习② - Docker安装及基础命令介绍 参考:【Docker】Docker学习③ - Docker镜像管理 docker镜像有没有内核? 从镜像大小上面来说,一个比较小的镜像只有十几MB,而内核文件需要一百多兆,因此镜像里面是没有内核的,镜像在

    2024年01月23日
    浏览(38)
  • 使用docker构建并部署MySQL5.7镜像

    这几天在研究如何将服务器和数据库迁移至 docker容器 ,中间遇到了许多问题,特此写篇博客记录一下。 提示:本篇文章主要讲解如何在docker容器中构建及部署MySQL 从 CentOS 镜像中构建 MySQL 容器 从 MySQL 官方镜像中构建容器 从 CentOS 镜像中构建 MySQL 容器可以更好地控制操作系

    2024年02月03日
    浏览(54)
  • IDEA制作docker镜像推送到docker hub和阿里云镜像仓库

    学习如何本地制作镜像推送到远程仓库管理,希望可以帮到有需要的人 准备工作:         1.注册docker hub账号,下载Docker Desktop Windows版本         2.注册阿里云账号,开通容器镜像服务个人版 注意事项 Docker Desktop的安装教程网上有很多,这里不做教程,这里提醒一点避免安

    2024年01月19日
    浏览(45)
  • docker镜像制作

    FROM:指定构建使用的基础镜像,FROM命令必须写在其他的指令前 MAINTAINER:用于为Dockerfile署名 ADD:复制文件并解压到镜像中的指定位置 ENV:设置镜像中的环境变量 COPY:类似于ADD,将CentOS7中的文件赋值到镜像中的某个位置 RUN:普通命令,后面紧跟具体的操作指令 EXPOSE:声明

    2023年04月22日
    浏览(26)
  • 多架构Docker镜像制作

    从https://github.com/docker/buildx/releases网站下载二进制文件到本地并重命名为docker-buildx,移动到 docker 的插件目录 ~/.docker/cli-plugins。 增加可执行权限:

    2024年02月13日
    浏览(38)
  • Docker制作SpringBoot镜像

    Dcokerfile目录 编写Dockerfile 在dockerfile中,声明了操作系统的环境变量,暴露了端口号,用CMD命令指定容器启动后的命令,这里是启动jar包。 注意: CMD 命令不要写在一个字符串中,而是要以数组的形式分开写。 镜像构建 docker build -t app:1.0 . 查看镜像 这些镜像名和标签名都是

    2024年02月14日
    浏览(36)
  • docker 制作tomcat镜像

    需要下载tomcat安装包和jdk安装包,我这边下载的jdk版本分别为(jdk和tomcat版本需要对应上) 创建一个readme.txt空文件 创建一个Dockerfile文件 构建镜像 查看镜像 创建容器并启动容器

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包