当前位置:网站首页>Initialize MySQL database when docker container starts
Initialize MySQL database when docker container starts
2022-07-06 01:30:00 【a_ small_ cherry】
brief introduction : Docker It's used more and more in development , Recently, I made a Spring Boot application , To facilitate deployment Mysql Also on the Docker Run in . So how to initialize SQL Scripts and data ? Let's take a look .

Image download 、 Domain name resolution 、 Time synchronization please click Alibaba open source mirror site
1. Preface
Docker It's used more and more in development , Recently, I made a Spring Boot application , To facilitate deployment Mysql Also on the Docker Run in . So how to initialize SQL Scripts and data ?
I have two traditional solutions here . The first option is to manually import after the container is started , too low No, No . The second one is Spring Boot Client connection Mysql Initializes the database when the container , You can refer to flyway Database version control , But it depends on the capabilities of the client . Can we do it Mysql When the container starts, it initializes the database itself ? Certainly. ! Today, let's demonstrate . See the end of the text for all codes .
2. principle
When Mysql When the container is first started , Will be in /docker-entrypoint-initdb.d Scan under Directory .sh,.sql,.sql.gz Files of type . If these types of files exist , They will be executed to initialize a database . These files are executed in alphabetical order . By default, they initialize the... Declared when the container is started MYSQL_DATABASE Variable defined in the database , For example, the following command initializes a REGION_DB database :

If your startup command does not specify a database, it must be in the database DDL The database is declared and specified in the script . Otherwise, the following exception will be implemented :

Then we will use this mechanism to realize Docker Initialize the database when the container starts .
3. Customize Dockerfile
We write our own Dockerfile To meet our needs , Here we use Mysql:5.7 For example . There may be some differences between different versions , You need to read the official documents in detail . The script is as follows :

- First step , Introduce the official Mysql:5.7 Docker Mirror image .
- The second step , No practical significance , Mainly the author 、 Organizational information .
- The third step , Very important ! I didn't configure the third line , Results after running the container, it was found that all the Chinese characters of the initialization data were garbled . Therefore, you need to modify before initializing the database Mysql Coding and other configurations , I'll change the time zone here to +8:00.
- Step four , Copy the script that contains the database ./sql Folder to mirror /tmp/sql Next .
- Step five , Use mv The command copies all the files in the folder in step 4 .sql File copy to /docker-entrypoint-initdb.d Next , In this way, we can make use of 2. The mechanism of the chapter initializes the database .
- Step six , Delete the used temporary directory .
Then you can build a custom image by using the build image command Mysql Mirror image :

adopt mysql:5.7c Mirror starts with a name of mysql-service The container of ,root The password for 123456, And persist the data to the host D:/mysql/data Next :
docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7c Tips: : You can go through SHOW VARIABLES LIKE 'character%' See if the character set is changed to utf8mb4, It can also be done through SHOW VARIABLES LIKE '%time_zone%' Check whether the time zone is East 8 .
4. summary
Today, we customize a program that can initialize the database Mysql Mirror image , It is convenient for us to deploy . You can also refer to this idea to customize other things you need Docker Mirror image .
In this paper, from :Docker Initialize when the container starts Mysql database - Alicloud developer community
边栏推荐
- Three methods of script about login and cookies
- Win10 add file extension
- Threedposetracker project resolution
- Vulhub vulnerability recurrence 74_ Wordpress
- Paddle framework: paddlenlp overview [propeller natural language processing development library]
- 【Flask】官方教程(Tutorial)-part3:blog蓝图、项目可安装化
- Folio.ink 免费、快速、易用的图片分享工具
- [pat (basic level) practice] - [simple mathematics] 1062 simplest fraction
- Leetcode study - day 35
- Ordinary people end up in Global trade, and a new round of structural opportunities emerge
猜你喜欢

VMware Tools安装报错:无法自动安装VSock驱动程序

ThreeDPoseTracker项目解析

干货!通过软硬件协同设计加速稀疏神经网络

Ordinary people end up in Global trade, and a new round of structural opportunities emerge

Force buckle 1020 Number of enclaves

Basic operations of databases and tables ----- unique constraints

Mongodb problem set

【详细】快速实现对象映射的几种方式

Who knows how to modify the data type accuracy of the columns in the database table of Damon

现货白银的一般操作方法
随机推荐
internship:项目代码所涉及陌生注解及其作用
A Cooperative Approach to Particle Swarm Optimization
什么是弱引用?es6中有哪些弱引用数据类型?js中的弱引用是什么?
Redis守护进程无法停止解决方案
【SSRF-01】服务器端请求伪造漏洞原理及利用实例
Opinions on softmax function
How to get all sequences in Oracle database- How can I get all sequences in an Oracle database?
Folio.ink 免费、快速、易用的图片分享工具
Internship: unfamiliar annotations involved in the project code and their functions
Threedposetracker project resolution
Basic process and testing idea of interface automation
leetcode刷题_平方数之和
You are using pip version 21.1.1; however, version 22.0.3 is available. You should consider upgradin
3D视觉——4.手势识别(Gesture Recognition)入门——使用MediaPipe含单帧(Singel Frame)和实时视频(Real-Time Video)
PHP error what is an error?
伦敦银走势中的假突破
Leetcode1961. Check whether the string is an array prefix
Basic operations of databases and tables ----- unique constraints
JMeter BeanShell的基本用法 一下语法只能在beanshell中使用
500 lines of code to understand the principle of mecached cache client driver