创建一个含有初始化数据库的mysql docker镜像
- 一、准备一个用于数据库初始化的.sql文件
- 二、编写Dockerfile文件
- 三、编译Dockerfile文件
- 1.在Dockerfile所在目录下,按住< Shift >键,然后右键,点击“在此处打开Powershell”,在powershell中使用以下命令:
- 2.此时查看docker,可以在images里看到刚才创建的镜像了:
- 四、测试
- 1.使用以下命令创建一个容器进行测试:
- 2.然后这个终端会被阻塞,这时候打开另一个终端,使用以下命令进入这个容器:
- 3.进入容器后,在容器里,使用以下命令,然后输入刚才设置的密码即可进入mysql:
- 4.然后使用以下sql语句定位到test数据库:
- 5.在使用以下sql语句后我们可以看到这个test数据库中user表中之前初始化的数据:
- 总结
一、准备一个用于数据库初始化的.sql文件
文件示例如下:
init.sql:
-- 建库
create database `test`;
-- 设置字符集
SET character_set_client = utf8;
-- 使用这个数据库
use test;
-- 建表
create table user(
`id` int(4) primary key,
`name` varchar(20)
)engine=innodb charset=utf8;
-- 数据初始化
insert into user values(1,'小明');
二、编写Dockerfile文件
Dockerfile:
FROM mysql:5.7
WORKDIR /docker-entrypoint-initdb.d
ENV LANG=C.UTF-8
ADD init.sql .
- FROM mysql:5.7表示从mysql的5.7版本镜像做改动
- WORKDIR /docker-entrypoint-initdb.d表示工作目录在/docker-entrypoint-initdb.d,这个文件夹是mysql用于存放初始化文件的文件夹,等会需要把刚才准备的init.sql文件放进去
- ENV LANG=C.UTF-8防止中文乱码问题
- **ADD init.sql .**把init.sql文件放到当前目录(前面设置了WORKDIR工作目录即为当前目录),所以mysql可以通过这个init.sql文件进行数据库的初始化。(注意!!!init.sql后面有【空格 + .】)
三、编译Dockerfile文件
- 注意!!!!Dockerfile需要和init.sql在同一地址下!!!
1.在Dockerfile所在目录下,按住< Shift >键,然后右键,点击“在此处打开Powershell”,在powershell中使用以下命令:
docker build -t <镜像名字> .
- 注意!!!!这里镜像名字后面还有【空格 + .】
我这里将镜像取名为“testimage”,所以我使用:
docker build -t testimage .
2.此时查看docker,可以在images里看到刚才创建的镜像了:
也可以使用以下命令看到这个镜像:
docker images
四、测试
1.使用以下命令创建一个容器进行测试:
docker run -e MYSQL_ROOT_PASSWORD=<数据库root用户的密码> <容器名称>
- MYSQL_ROOT_PASSWORD是创建mysql容器必有的环境变量参数
我这里设置密码为123456,容器名称为testimage,所以我使用:
docker run -e MYSQL_ROOT_PASSWORD=123456 testimage
2.然后这个终端会被阻塞,这时候打开另一个终端,使用以下命令进入这个容器:
docker exec -it <容器名称> bash
我这里刚刚创建的容器名称叫做testimage,所以我使用:
docker exec -it testimage bash
3.进入容器后,在容器里,使用以下命令,然后输入刚才设置的密码即可进入mysql:
mysql -uroot -p
4.然后使用以下sql语句定位到test数据库:
use test;
5.在使用以下sql语句后我们可以看到这个test数据库中user表中之前初始化的数据:
select * from user;
总结
编写.sql文件用于初始化,编写Dockerfile对某个已有的mysql镜像进行数据库初始化并生成镜像