<强>本文提要强>
本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfile和shell脚本实现这一过程。
<>强搭建步骤强>
1,首先创建Dckerfile:
从mysql: 5.7 #设置免密登录 ENV MYSQL_ALLOW_EMPTY_PASSWORD是的 #将所需文件放到容器中 复制设置。sh/mysql/setup.sh 复制模式。sql/mysql/schema.sql 复制的特权。sql/mysql/privileges.sql #设置容器启动时执行的命令 CMD [" sh”、“/mysql/setup.sh”) >之前2,编写容器启动脚本设置。承宪:
# !/bin/bash 设置- e #查看mysql服务的状态,方便调试,这条语句可以删除 回声“服务mysql状态” echo ' 1。启动mysql ....” #启动mysql mysql服务开始 睡眠3 回声“服务mysql状态” 回声”2。开始导入数据....” #导入数据 mysql & lt;/mysql/schema.sql echo ' 3。导入数据完毕....” 睡眠3 回声“服务mysql状态” #重新设置mysql密码 echo ' 4。开始修改密码....” mysql & lt;/mysql/privileges.sql echo ' 5。修改密码完毕....” #睡眠3 回声“服务mysql状态” 回声的mysql容器启动完毕,且数据导入成功的 tail - f/dev/null >之前这里是先导入数据,然后才是设置用户和权限,是因为mysql容器一开始为免密登录,Dockerfile中有如下设置:<代码> ENV MYSQL_ALLOW_EMPTY_PASSWORD是的> 代码,此时执行导入数据命令不需要登录验证操作,如果是先执行权限操作,那么导入数据则需要登录验证,整个过程就麻烦了许多。
3,需要导入数据的mysql脚本命令schema.sql:
——创建数据库 创建数据库的docker_mysql默认字符集utf8核对utf8_general_ci; 使用docker_mysql; ——建表 删除表如果存在“用户”; 创建表“用户”( “id”bigint(20)非空, created_at的bigint(40)默认为空, last_modified的bigint(40)默认为空, “电子邮件”varchar(255)默认为空, “first_name”varchar(255)默认为空, “last_name”varchar(255)默认为空, “用户名”varchar(255)默认为空, 主键(“id”) )引擎=InnoDB的默认字符集=latin1;中的一个 ——插入数据 插入“用户”(“id”、“created_at”,“last_modified”,“电子邮件”、“first_name”,“last_name”,“用户名”) 值 (0,1490257904,1490257904,“john.doe@example.com”,“约翰”,“母鹿”,“用户”); >之前因为是测试,所以随便写了一个建表语句,如果是真实项目肯定不止这一张表,直接将建表语句覆盖过来就好。
4, mysql权限设置命令特权。sql:
使用mysql; 选择主机,用户从用户; ——因为mysql版本是5.7,因此新建用户为如下命令: 创建用户码头工人被“123456”; ——将docker_mysql数据库的权限授权给创建的码头工人用户,密码为123456: grant all> 码头工人建立13 - t/docker-mysql。码头工人建造为创建镜像命令,名称为13/docker-mysql”。“表示当前目录,即Dockerfile文件所在的目录,创建过程如下:
执行码头工人图片查看该镜像是否存在于镜像列表中:
创建成功。
6,启动容器
码头工人运行- d - p 13306:3306 13/docker-mysql启动容器,并将端口映射到本地的13306端口,命令行如图所示:
详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置