当前位置:网站首页>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
边栏推荐
- ORA-00030
- ThreeDPoseTracker项目解析
- What is weak reference? What are the weak reference data types in ES6? What are weak references in JS?
- General operation method of spot Silver
- Cadre du Paddle: aperçu du paddlelnp [bibliothèque de développement pour le traitement du langage naturel des rames volantes]
- Leetcode 剑指 Offer 59 - II. 队列的最大值
- LeetCode 322. Change exchange (dynamic planning)
- How does the crystal oscillator vibrate?
- C web page open WinForm exe
- Yii console method call, Yii console scheduled task
猜你喜欢
leetcode刷题_平方数之和
037 PHP login, registration, message, personal Center Design
Unity | 实现面部驱动的两种方式
Leetcode skimming questions_ Invert vowels in a string
Basic operations of databases and tables ----- non empty constraints
伦敦银走势中的假突破
MATLB|实时机会约束决策及其在电力系统中的应用
[technology development -28]: overview of information and communication network, new technology forms, high-quality development of information and communication industry
【Flask】官方教程(Tutorial)-part2:蓝图-视图、模板、静态文件
Electrical data | IEEE118 (including wind and solar energy)
随机推荐
【Flask】静态文件与模板渲染
Docker compose配置MySQL并实现远程连接
Luo Gu P1170 Bugs Bunny and Hunter
UE4 unreal engine, editor basic application, usage skills (IV)
Basic operations of databases and tables ----- default constraints
MySQL learning notes 2
Loop structure of program (for loop)
Leetcode 208. Implement trie (prefix tree)
ClickOnce does not support request execution level 'requireAdministrator'
Huawei Hrbrid interface and VLAN division based on IP
剑指 Offer 38. 字符串的排列
Paddle框架:PaddleNLP概述【飞桨自然语言处理开发库】
黄金价格走势k线图如何看?
leetcode刷题_平方数之和
Code review concerns
SPIR-V初窥
037 PHP login, registration, message, personal Center Design
Redis-字符串类型
Tcpdump: monitor network traffic
What is weak reference? What are the weak reference data types in ES6? What are weak references in JS?