当前位置:网站首页>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
边栏推荐
- Development trend of Ali Taobao fine sorting model
- Unity | 实现面部驱动的两种方式
- Paging of a scratch (page turning processing)
- Redis' cache penetration, cache breakdown, cache avalanche
- Leetcode skimming questions_ Sum of squares
- 【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
- 3D视觉——4.手势识别(Gesture Recognition)入门——使用MediaPipe含单帧(Singel Frame)和实时视频(Real-Time Video)
- leetcode刷题_反转字符串中的元音字母
- 普通人下场全球贸易,新一轮结构性机会浮出水面
- 2022 Guangxi Autonomous Region secondary vocational group "Cyberspace Security" competition and its analysis (super detailed)
猜你喜欢
Recommended areas - ways to explore users' future interests
Kotlin basics 1
Basic operations of database and table ----- delete data table
Une image! Pourquoi l'école t'a - t - elle appris à coder, mais pourquoi pas...
普通人下场全球贸易,新一轮结构性机会浮出水面
晶振是如何起振的?
3D model format summary
A Cooperative Approach to Particle Swarm Optimization
ORA-00030
3D视觉——4.手势识别(Gesture Recognition)入门——使用MediaPipe含单帧(Singel Frame)和实时视频(Real-Time Video)
随机推荐
Redis守护进程无法停止解决方案
Basic operations of databases and tables ----- primary key constraints
XSS learning XSS lab problem solution
Netease smart enterprises enter the market against the trend, and there is a new possibility for game industrialization
Leetcode sword finger offer 59 - ii Maximum value of queue
普通人下场全球贸易,新一轮结构性机会浮出水面
[solved] how to generate a beautiful static document description page
Cadre du Paddle: aperçu du paddlelnp [bibliothèque de développement pour le traitement du langage naturel des rames volantes]
C web page open WinForm exe
一图看懂!为什么学校教了你Coding但还是不会的原因...
网易智企逆势进场,游戏工业化有了新可能
leetcode刷题_平方数之和
How to see the K-line chart of gold price trend?
Basic operations of databases and tables ----- default constraints
Unity VR resource flash surface in scene
The basic usage of JMeter BeanShell. The following syntax can only be used in BeanShell
记一个 @nestjs/typeorm^8.1.4 版本不能获取.env选项问题
[flask] static file and template rendering
Leetcode1961. 检查字符串是否为数组前缀
Mathematical modeling learning from scratch (2): Tools