当前位置:网站首页>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 .

77.jpg


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 :

image.png


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 :

image.png


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 :

image.png

  • 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 :

image.png


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

原网站

版权声明
本文为[a_ small_ cherry]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/02/202202140121509673.html