docker下mysql镜像初始化

2023-11-17

目录

1、介绍

2、部署及验证

2.1  场景复现

2.2  创建dockerfile

2.3  初始化脚本

2.4  构建镜像并查看

2.5  创建容器并验证

2.6  完成 


1、介绍

原理:当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的MYSQL_DATABASE变量中的数据库。MYSQL_DATABASE这个变量默认是不存在的,必须在启动容器时候声明或定义,否则就扫描/docker-entrypoint-initdb.d目录下进行初始化,如下所示:

docker run --name mysql01 -e MYSQL_DATABASE=test_db -d mysql:latest

【这里是初始化定义的test_db数据库,如果没有MYSQL_DATABASE就进行扫描/docker-entrypoint-initdb.d目录,看是否有.sh,.sql,.sql.gz类型的文件,若有就进行初始化,没有就不进行初始化】

2、部署及验证

2.1  场景复现

       在标准的官方MySQL镜像基础上制作一个新镜像,新镜像启动过程中检查/root/init.sql文件是否存在,如果存在就执行此初始化SQL,完成数据库的初始化,随后删除此文件,正常启动MySQL。init.sql里可以是创建hellodb数据库,里面有app_user表,并包括app_user的3条初始化数据。给出dockerfile以及整个制作镜像以及启动验证的截图和说明。

系统

CentOS Linux release 7.6.1810

mysql镜像

MYSQL_VERSION=8.0.20

2.2  创建dockerfile

[root@bogon ~]# cat dockerfile

FROM mysql:latest

COPY --chown=mysql:mysql init.sql /root/

RUN cp /root/init.sql /docker-entrypoint-initdb.d

RUN rm -fr /root/init.sql

[root@bogon ~]#

【COPY意思是:先使用chown修改init.sql的用户属性,执行初始化数据库最好使用mysql用户来进行,当然root用户也是可以的,用户属性修改完毕再将init.sql复制到容器的/root/下面】

2.3  初始化脚本

[root@bogon ~]# cat init.sql

create database hellodb;

use hellodb;

create table app_user(name varchar(128) not null,age int not null,primary key(name));

insert into app_user values("jack","11"),("bob","4"),("tom","3");

[root@bogon ~]#

2.4  构建镜像并查看

docker build -t mysql:new .

docker images

2.5  创建容器并验证

docker run -d --name 001 -e MYSQL_ROOT_PASSWORD=123456 mysql:new

docker exec -it 001 bash

root@a929607c2da8:/# ls -l /root

total 0 【为空正常】

root@a929607c2da8:/# ls -l /docker-entrypoint-initdb.d/

total 4 【有init.sql文件正常,这是初始化文件,必须存在】

-rw-r--r--. 1 root root 190 Jun 20 13:48 init.sql

root@a929607c2da8:/#

mysql -uroot -p123456

show databases;

use hellodb;

show tables;

desc app_user;

2.6  完成 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker下mysql镜像初始化 的相关文章

随机推荐

  • ggplot2读书笔记7:第五章 通过图层构建图像

    Build a Plot Layer by Layer 5 1 简介 略 5 2 创建图表 以汽车耗油量mpg数据集为例 当我们使用ggplot 创建图表时 最基本的代码是 ggplot mpg aes displ hwy geom poi
  • video标签在安卓下微信x5浏览器的一些问题

    强制全屏播放视频 非腾讯视频 Click事件不能触发 play 方法 只能通过video标签自己的播放按钮进行播放 因为播放只能通过video标签自己的播放按钮 所以readyState和canplaythrough视频就绪状态也没用 不能
  • nginx 请求头转发

    前言 网站安全 开始审查了 之前我们的项目 是通过 ip port 直接访问tomcat的 内部使用嘛 然而 现在需要使用 https 协议访问 以增强网站的安全性 本来没有这么麻烦的 但是写代码的人 竟然这样写的资源请求 现在访问模式 是
  • django中配置xadmin时报错metaclass conflict: the metaclass of a derived class must be a (non-strict) subcla

    报错信息如下 原因 没有修改我们定义的ModelAdmin的继承对象为object或去掉继承 错误代码如下 xadmin sites register Comment class CommentAdmin admin ModelAdmin
  • 华为OD机试真题-字符串比较-2023年OD统一考试(B卷)

    题目描述 给定字符串A B和正整数V A的长度与B的长度相等 请计算A中满足如下条件的最大连续子串的长度 1 该连续子串在A和B中的位置和长度均相同 2 该连续子串 A i B i 之和小于等于V 其中 A i B i 表示两个字母ASCI
  • 【转】密封类

    10 3 1 密封类概述及声明 10 3 密封类与密封方法 如果所有的类都可以被继承 那么很容易导致继承的滥用 进而使类的层次结构体系变得十分复杂 这样使得开发人员对类的理解和使用变得十分困难 为了避免滥用继承 C 中提出了密封类的概念 本
  • XStream 实现 javabean 与 xml 互转

    XStream 是什么 XStream 是一个 java类库 实际上是一个转换器 XStream 作用 实现 java bean 与 xml 互转 XStream 如何使用 主要通过 xStream 实现 转换 具体测试示例代码如下 源码
  • 运维工具

    环境部署 部署软件 如Apache Nginx tomcat JDK PHP MySQL等等 还需要测试吧 那就还需要部署一套测试环境 有些时候 开发环境也是需要运维来部署的 排错和调优 运维的事 尽快定位问题 解决问题才是王道 定位问题
  • 谁说毕业即失业?爬虫就业月入13000+第一个不服!

    不知道是Python太火爆 还是年轻人太卷 最近一段时间 老有刚毕业的年轻人向我请教Python问题 问题还相对比较专业 其中不乏有 财务小年轻请教Python数据统计 新媒体的朋友问Python爬虫 当然更多的还是来咨询Python爬虫就
  • Java监听器(重点)

    监听器 Listener 是一个实现特定接口的 Java 程序 这个程序专门用于监听另一个 Java 对象的方法调用或属性改变 当被监听对象发生上述事件后 监听器某个方法将立即自动执行 监听器的相关概念 事件 方法调用 属性改变 状态改变等
  • windows 安装linux子系统详细步骤

    1 dism exe online enable feature featurename Microsoft Windows Subsystem Linux all norestart 2 dism exe online enable fe
  • 对课程学习的期待

    我希望通过学习这门课程之后 自己可以设计出一些简单的程序 有利于之后的学习 例如 网络爬虫和一些有关于数据 图像处理的程序 我希望在理论课上老师可以通过一些有趣的示例来讲解课程内容 我认为这样可以更好的抓住学生的注意力而且可以使我们更容易理
  • 【无需显卡】AI绘画入门教程

    前言 Hello 各位端午节快乐呀 不好意思拖更两个月 最近实在是太忙了 也想不到有什么好玩的 之前介绍过了几个好玩的ai网站 非常适合新手尝鲜 但很多都有额度限制 而且还开始收费了 所以有了这期教程 还没看过上期可以看一下 除了ChatG
  • socks协议详解

    0x01 socks协议简介 Socks Socket Secure 协议是一种网络协议 处于会话层 用于管理网络连接并提供安全性和隐私保护 通过使用Socks代理服务器 客户端可以隐藏其真实IP地址和其他身份信息 从而匿名地访问互联网上的
  • php命令行传递参数,PHP命令行传递参数

    在以非命令行模式运行PHP的时候 我们可以通过 GET POST REQUEST来接受get或是post参数 但是以命令行方式运行的话 怎么传递参数以接受参数呢 关于命令行的特点 可以直接看官方文档 http php net manual
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • python 读写pcd

    1 读点云的3种方式 第一种 pip3 install python pcl import pcl pcd ndarray pcl load args pcd path to array 3 不要intensity pcd ndarray
  • 浏览器打开就是360导航(浏览器被360劫持)

    浏览器打开就是360导航 这个问题之前只是看别人帖子见到过 不知道出了什么问题我的edge和Chrome浏览器突然打开也成了360的导航页面 这才感觉出这个问题的恶心之处 而且顺道说一下 我电脑中也没有装任何360系的应用 但突然就被改了
  • 黑客基础知识——SYN泛洪攻击原理及防御

    拒绝服务攻击时 攻击者想非法占用被攻击者的一些资源 比如如 带宽 CPU 内存等等 使得被攻击者无法响应正常用户的请求 讲泛洪攻击之前 我们先了解一下DoS攻击和DDoS攻击 这两个攻击大体相同 前者的意思是 拒绝服务攻击 后者的意思是 分
  • docker下mysql镜像初始化

    目录 1 介绍 2 部署及验证 2 1 场景复现 2 2 创建dockerfile 2 3 初始化脚本 2 4 构建镜像并查看 2 5 创建容器并验证 2 6 完成 1 介绍 原理 当Mysql容器首次启动时 会在 docker entry