全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

本文提要

本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfile和shell脚本实现这一过程。

搭建步骤

1、首先创建Dckerfile:

FROM mysql:5.7

#设置免密登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

#将所需文件放到容器中
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql

#设置容器启动时执行的命令
CMD ["sh", "/mysql/setup.sh"]

2、编写容器启动脚本setup.sh:

#!/bin/bash
set -e

#查看mysql服务的状态,方便调试,这条语句可以删除
echo `service mysql status`

echo '1.启动mysql....'
#启动mysql
service mysql start
sleep 3
echo `service mysql status`

echo '2.开始导入数据....'
#导入数据
mysql < /mysql/schema.sql
echo '3.导入数据完毕....'

sleep 3
echo `service mysql status`

#重新设置mysql密码
echo '4.开始修改密码....'
mysql < /mysql/privileges.sql
echo '5.修改密码完毕....'

#sleep 3
echo `service mysql status`
echo `mysql容器启动完毕,且数据导入成功`

tail -f /dev/null

这里是先导入数据,然后才是设置用户和权限,是因为mysql容器一开始为免密登录,Dockerfile中有如下设置:ENV MYSQL_ALLOW_EMPTY_PASSWORD yes,此时执行导入数据命令不需要登录验证操作,如果是先执行权限操作,那么导入数据则需要登录验证,整个过程就麻烦了许多。

3、需要导入数据的mysql脚本命令schema.sql:

-- 创建数据库
create database `docker_mysql` default character set utf8 collate utf8_general_ci;

use docker_mysql;

-- 建表
DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
 `id` bigint(20) NOT NULL,
 `created_at` bigint(40) DEFAULT NULL,
 `last_modified` bigint(40) DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 `first_name` varchar(255) DEFAULT NULL,
 `last_name` varchar(255) DEFAULT NULL,
 `username` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- 插入数据
INSERT INTO `user` (`id`, `created_at`, `last_modified`, `email`, `first_name`, `last_name`, `username`)
VALUES
  (0,1490257904,1490257904,'john.doe@example.com','John','Doe','user');

因为是测试,所以随便写了一个建表语句,如果是真实项目肯定不止这一张表,直接将建表语句覆盖过来就好。

4、mysql权限设置命令privileges.sql:

use mysql;
select host, user from user;
-- 因为mysql版本是5.7,因此新建用户为如下命令:
create user docker identified by '123456';
-- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456:
grant all on docker_mysql.* to docker@'%' identified by '123456' with grant option;
-- 这一条命令一定要有:
flush privileges;

5、创建镜像

docker build -t 13/docker-mysql .

docker build 为创建镜像命令,名称为13/docker-mysql,'.'表示当前目录,即Dockerfile文件所在的目录,创建过程如下:

执行docker images查看该镜像是否存在于镜像列表中:

创建成功。

6、启动容器

docker run -d -p 13306:3306 13/docker-mysql

启动容器,并将端口映射到本地的13306端口,命令行如图所示:

容器启动成功。

查看容器的日志记录,启动过程与启动脚本setup.sh中所规范的步骤一致,数据导入和权限设置成功:

验证结果

1、通过进入容器在命令行验证

启动时容器的id为9db491b1d760,因此执行exec命令进入容器:

docker exec -it 9db491b1d760 /bin/bash

这个命令不要直接使用,因为在你机器上id可能不同,替换掉id值即可。

前文中创建了docker_mysql数据库,并在此数据库中创建了user表,同时将数据库的连接授权赋予了新建的docker用户,因此验证过程为:

  1. 使用docker用户登录数据库:mysql -u docker -p
  2. 输入密码123456通过登录验证
  3. 切换至docker_mysql数据库:use docker_mysql;
  4. 查看数据库中的表:show tables;
  5. 查看表中的数据:select * from user;

整个过程如下:

通过图中的结果对比,与前文一致,验证成功。

2、通过mysql客户端管理软件验证

通过图中的结果对比,与前文一致,验证成功。

结语

本篇文章是单独介绍了一下创建mysql镜像的步骤,希望对大家的学习有所帮助,也希望大家多多支持。


# dockerfile构建mysql  # docker  # mysql  # 镜像  # Dockerfile构建mysql镜像  # mysql安装数据库初始化失败问题解决方法保姆级教程  # MySQL 8.0数据字典的初始化与启动流程  # Docker Dockerfile构建MySQL并初始化数据方式  # Golang初始化MySQL数据库方法浅析  # Linux 初始化MySQL 数据库报错解决办法  # MySQL之初始化数据详解  # 这一  # 数据库中  # 命令行  # 图中  # 启动时  # 修改密码  # 是在  # 是因为  # 才是  # 在此  # 不需要  # 基础上  # 就好  # 中有  # 所需  # 这条  # 并将  # 写了  # 仅是 


相关文章: 代购小票制作网站有哪些,购物小票的简要说明?  开源网站制作软件,开源网站什么意思?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  潮流网站制作头像软件下载,适合母子的网名有哪些?  非常酷的网站设计制作软件,酷培ai教育官方网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  b2c电商网站制作流程,b2c水平综合的电商平台?  完全自定义免费建站平台:主题模板在线生成一站式服务  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何配置IIS站点权限与局域网访问?  如何零成本快速生成个人自助网站?  如何快速搭建高效香港服务器网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何高效完成自助建站业务培训?  建站主机数据库如何配置才能提升网站性能?  如何在云虚拟主机上快速搭建个人网站?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  电商网站制作公司有哪些,1688网是什么意思?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  建站之星如何快速更换网站模板?  建站主机功能解析:服务器选择与快速搭建指南  魔方云NAT建站如何实现端口转发?  婚礼视频制作网站,学习*后期制作的网站有哪些?  建站org新手必看:2024最新搭建流程与模板选择技巧  网站微信制作软件,如何制作微信链接?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何做静态网页,sublimetext3.0制作静态网页?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  建站之星后台管理系统如何操作?  建站主机选购指南与交易推荐:核心配置解析  建站之星上传入口如何快速找到?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  浅析上传头像示例及其注意事项  如何在云主机上快速搭建网站?  如何基于云服务器快速搭建网站及云盘系统?  建站之星如何实现网站加密操作?  高防服务器租用首荐平台,企业级优惠套餐快速部署  制作网页的网站有哪些,电脑上怎么做网页?  制作证书网站有哪些,全国城建培训中心证书查询官网?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  建站之星云端配置指南:模板选择与SEO优化一键生成  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何通过西部建站助手安装IIS服务器?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。