七、Dockerfile案例三(Mysql安装) 七、Dockerfile案例三(Mysql安装)  三、创建 Mysql 容器(8.x 版本) 四、docker安装mysql的latest版本 让docker中的mysql启动时自动执行sql文件 一、搭建步骤  数据卷操作Mysql 数据卷容器

*特别提醒:新版的mysql:5.7数据库下的user表中已经没有Password字段了(5.5的user表还有)

一、查看docker hub上的版本

[root@iz2zecm4ndtkaue32tynx5z ~]# docker search mysql
INDEX       NAME                                                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                                                  MySQL is a widely used, open-source relati...   6644      [OK]       
docker.io   docker.io/mariadb                                                MariaDB is a community-developed fork of M...   2110      [OK]       
docker.io   docker.io/mysql/mysql-server                                     Optimized MySQL Server Docker images. Crea...   486                  [OK]
docker.io   docker.io/percona                                                Percona Server is a fork of the MySQL rela...   355       [OK]       
docker.io   docker.io/zabbix/zabbix-server-mysql                             Zabbix Server with MySQL database support       109                  [OK]
docker.io   docker.io/hypriot/rpi-mysql                                      RPi-compatible Docker Image with Mysql          91                   
docker.io   docker.io/zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server ...   61                   [OK]
docker.io   docker.io/centurylink/mysql                                      Image containing mysql. Optimized to be li...   60                   [OK]
docker.io   docker.io/1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          42                   [OK]

二、创建 Mysql 容器(5.7 以前版本)

*下边的启动方式只适合于5.7以前的版本,并不适合于8.X版本

docker run --name test-mysql -d -p 3308:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
//说明:
// --name:别名
// -d:后台运行
// -p:端口映射
// -e:携带参数

#进入mysql的终端
docker exec -it test-mysql /bin/bash
// -it:交互模式
#在容器内部登录 mysql
mysql -uroot -p
//执行后输入密码123456

#查看权限
show grants for root@'%';
#刷新配置
flush privileges;

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

#可以自定义用户,创建用户同时授权

grant all privileges on *.* TO 'docker01'@'%' identified by '123456';

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 三、创建 Mysql 容器(8.x 版本

*mysql 8.x 安装完成默认是本地访问,需要配置外界访问权限

#1、拉取镜像并启动mysql容器
docker run --name test-mysql -d -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8

#2、查看启动的容器
docker ps
#3、进入到容器
docker exec -it test-mysql /bin/bash
#4、查看mysql版本
mysql --version
#5、登录到mysql
mysql -uroot -p123456
# 进入之后,要对用户进行授权,否则用navicat连接不上。

#6、授予外界访问权限
grant all privileges on *.* to root@'%';
#7、修改密码加密方式,为了支持以前老的客户端的访问(如:Navicat目前只支持这种加密方式)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';   
#8、刷新配置
flush privileges;

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 用navicat去远程连接容器中的mysql。

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

四、docker安装mysql的latest版本

(1)安装mysql

[root@iz2zecm4ndtkaue32tynx5z centos-jdk-tomcat]# docker run -p 3308:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
Unable to find image 'mysql:latest' locally
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
be8881be8156: Pull complete 
c3995dabd1d7: Pull complete 
9931fdda3586: Pull complete 
bb1b6b6eff6a: Pull complete 
a65f125fa718: Pull complete 
2d9f8dd09be2: Pull complete 
37b912cb2afe: Pull complete 
54242fcd8eaa: Pull complete 
0a9d4d211511: Pull complete 
270ae5bd02c2: Pull complete 
9b55b8e72e70: Pull complete 
68083f7985cd: Pull complete 
Digest: sha256:e42cbb3afa80aa210aa1245b930619c12641a8de57a486e6f1b11858307bd378
Status: Downloaded newer image for docker.io/mysql:latest
ccd0966140213a2ddabb424895398a4646951fce0a8610113ab7e926c53fe57f
[root@iz2zecm4ndtkaue32tynx5z centos-jdk-tomcat]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
ccd096614021        mysql               "docker-entrypoint..."   25 seconds ago      Up 23 seconds       0.0.0.0:3308->3306/tcp   mysql01

(2)进入容器并登陆mysql

[root@iz2zecm4ndtkaue32tynx5z centos-jdk-tomcat]# docker exec -it mysql01 mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 8.0.12 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

(3)查看用户权限

mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| host      | user             | plugin                | authentication_string                                                  |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
| %         | root             | caching_sha2_password | $A$005$znYJVcn
                                                                       QLay%WQXC.86oOwTLThIk0ex8sfHNS0WfwHXJQjdNyPXRcRA |
| localhost | mysql.infoschema | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | caching_sha2_password | $A$005$6_@[}/c.P
                                                                              MbYvo1WTyBqlvFHl.8mm57B850KVxmLnPdKnYM662BC |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+
5 rows in set (0.80 sec)

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

(4)修改用户密码并改变加密方式

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.12 sec)

mysql> 

 七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

让docker中的mysql启动时自动执行sql文件

一、搭建步骤

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;

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- 创建部门表
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `num` int(11) DEFAULT NULL COMMENT '排序',
  `pid` int(11) DEFAULT NULL COMMENT '父部门id',
  `pids` varchar(255) DEFAULT NULL COMMENT '父级ids',
  `simplename` varchar(45) DEFAULT NULL COMMENT '简称',
  `fullname` varchar(255) DEFAULT NULL COMMENT '全称',
  `tips` varchar(255) DEFAULT NULL COMMENT '提示',
  `version` int(11) DEFAULT NULL COMMENT '版本(乐观锁保留字段)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='部门表';

-- ----------------------------
-- 部门表插入数据
-- ----------------------------
INSERT INTO `sys_dept` VALUES ('24', '1', '0', '[0],', '总公司', '总公司', '', null);
INSERT INTO `sys_dept` VALUES ('25', '2', '24', '[0],[24],', '开发部', '开发部', '', null);
INSERT INTO `sys_dept` VALUES ('26', '3', '24', '[0],[24],', '运营部', '运营部', '', null);
INSERT INTO `sys_dept` VALUES ('27', '4', '24', '[0],[24],', '战略部', '战略部', '', null);
INSERT INTO `sys_dept` VALUES ('28', '3', '24', '[0],[24],', '测试部', '测试部', '测试部', null);

-- ----------------------------
-- 创建字典表
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict`;
CREATE TABLE `sys_dict` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `num` int(11) DEFAULT NULL COMMENT '排序',
  `pid` int(11) DEFAULT NULL COMMENT '父级字典',
  `name` varchar(255) DEFAULT NULL COMMENT '名称',
  `tips` varchar(255) DEFAULT NULL COMMENT '提示',
  `code` varchar(255) DEFAULT NULL COMMENT '值',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='字典表';

-- ----------------------------
-- 字典表插入数据
-- ----------------------------
INSERT INTO `sys_dict` VALUES ('50', '0', '0', '性别', null, 'sys_sex');
INSERT INTO `sys_dict` VALUES ('51', '1', '50', '男', null, '1');
INSERT INTO `sys_dict` VALUES ('52', '2', '50', '女', null, '2');
INSERT INTO `sys_dict` VALUES ('53', '0', '0', '状态', null, 'sys_state');
INSERT INTO `sys_dict` VALUES ('54', '1', '53', '启用', null, '1');
INSERT INTO `sys_dict` VALUES ('55', '2', '53', '禁用', null, '2');
INSERT INTO `sys_dict` VALUES ('56', '0', '0', '账号状态', null, 'account_state');
INSERT INTO `sys_dict` VALUES ('57', '1', '56', '启用', null, '1');
INSERT INTO `sys_dict` VALUES ('58', '2', '56', '冻结', null, '2');
INSERT INTO `sys_dict` VALUES ('59', '3', '56', '已删除', null, '3');

-- ----------------------------
-- 创建报销表
-- ----------------------------
DROP TABLE IF EXISTS `sys_expense`;
CREATE TABLE `sys_expense` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `money` decimal(20,2) DEFAULT NULL COMMENT '报销金额',
  `desc` varchar(255) DEFAULT '' COMMENT '描述',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `state` int(11) DEFAULT NULL COMMENT '状态: 1.待提交  2:待审核   3.审核通过 4:驳回',
  `userid` int(11) DEFAULT NULL COMMENT '用户id',
  `processId` varchar(255) DEFAULT NULL COMMENT '流程定义id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COMMENT='报销表';

-- ----------------------------
-- 报销表插入数据
-- ----------------------------

-- ----------------------------
-- 创建登录日志表
-- ----------------------------
DROP TABLE IF EXISTS `sys_login_log`;
CREATE TABLE `sys_login_log` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `logname` varchar(255) DEFAULT NULL COMMENT '日志名称',
  `userid` int(65) DEFAULT NULL COMMENT '管理员id',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `succeed` varchar(255) DEFAULT NULL COMMENT '是否执行成功',
  `message` text COMMENT '具体消息',
  `ip` varchar(255) DEFAULT NULL COMMENT '登录ip',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=219 DEFAULT CHARSET=utf8 COMMENT='登录记录';

-- ----------------------------
-- 登录日志表插入数据
-- ----------------------------
INSERT INTO `sys_login_log` VALUES ('217', '登录失败日志', null, '2018-07-26 04:26:03', '成功', '账号:admin,账号密码错误', '0:0:0:0:0:0:0:1');
INSERT INTO `sys_login_log` VALUES ('218', '登录日志', '1', '2018-07-26 04:43:38', '成功', null, '127.0.0.1');

-- ----------------------------
-- 创建系统菜单表
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `code` varchar(255) DEFAULT NULL COMMENT '菜单编号',
  `pcode` varchar(255) DEFAULT NULL COMMENT '菜单父编号',
  `pcodes` varchar(255) DEFAULT NULL COMMENT '当前菜单的所有父菜单编号',
  `name` varchar(255) DEFAULT NULL COMMENT '菜单名称',
  `icon` varchar(255) DEFAULT NULL COMMENT '菜单图标',
  `url` varchar(255) DEFAULT NULL COMMENT 'url地址',
  `num` int(65) DEFAULT NULL COMMENT '菜单排序号',
  `levels` int(65) DEFAULT NULL COMMENT '菜单层级',
  `ismenu` int(11) DEFAULT NULL COMMENT '是否是菜单(1:是  0:不是)',
  `tips` varchar(255) DEFAULT NULL COMMENT '备注',
  `status` int(65) DEFAULT NULL COMMENT '菜单状态 :  1:启用   0:不启用',
  `isopen` int(11) DEFAULT NULL COMMENT '是否打开:    1:打开   0:不打开',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=171 DEFAULT CHARSET=utf8 COMMENT='菜单表';

-- ----------------------------
-- 系统菜单表插入数据
-- ----------------------------
INSERT INTO `sys_menu` VALUES ('105', 'system', '0', '[0],', '系统管理', 'fa-user', '#', '4', '1', '1', null, '1', '1');
INSERT INTO `sys_menu` VALUES ('106', 'mgr', 'system', '[0],[system],', '用户管理', '', '/mgr', '1', '2', '1', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('107', 'mgr_add', 'mgr', '[0],[system],[mgr],', '添加用户', null, '/mgr/add', '1', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('108', 'mgr_edit', 'mgr', '[0],[system],[mgr],', '修改用户', null, '/mgr/edit', '2', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('109', 'mgr_delete', 'mgr', '[0],[system],[mgr],', '删除用户', null, '/mgr/delete', '3', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('110', 'mgr_reset', 'mgr', '[0],[system],[mgr],', '重置密码', null, '/mgr/reset', '4', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('111', 'mgr_freeze', 'mgr', '[0],[system],[mgr],', '冻结用户', null, '/mgr/freeze', '5', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('112', 'mgr_unfreeze', 'mgr', '[0],[system],[mgr],', '解除冻结用户', null, '/mgr/unfreeze', '6', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('113', 'mgr_setRole', 'mgr', '[0],[system],[mgr],', '分配角色', null, '/mgr/setRole', '7', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('114', 'role', 'system', '[0],[system],', '角色管理', null, '/role', '2', '2', '1', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('115', 'role_add', 'role', '[0],[system],[role],', '添加角色', null, '/role/add', '1', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('116', 'role_edit', 'role', '[0],[system],[role],', '修改角色', null, '/role/edit', '2', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('117', 'role_remove', 'role', '[0],[system],[role],', '删除角色', null, '/role/remove', '3', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('118', 'role_setAuthority', 'role', '[0],[system],[role],', '配置权限', null, '/role/setAuthority', '4', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('119', 'menu', 'system', '[0],[system],', '菜单管理', null, '/menu', '4', '2', '1', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('120', 'menu_add', 'menu', '[0],[system],[menu],', '添加菜单', null, '/menu/add', '1', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('121', 'menu_edit', 'menu', '[0],[system],[menu],', '修改菜单', null, '/menu/edit', '2', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('122', 'menu_remove', 'menu', '[0],[system],[menu],', '删除菜单', null, '/menu/remove', '3', '3', '0', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('128', 'log', 'system', '[0],[system],', '业务日志', null, '/log', '6', '2', '1', null, '1', '0');
INSERT INTO `sys_menu` VALUES ('130', 'druid', 'system', '[0],[system],', '监控管理', null, '/druid', '7', '2', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('131', 'dept', 'system', '[0],[system],', '部门管理', null, '/dept', '3', '2', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('132', 'dict', 'system', '[0],[system],', '字典管理', null, '/dict', '4', '2', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('133', 'loginLog', 'system', '[0],[system],', '登录日志', null, '/loginLog', '6', '2', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('134', 'log_clean', 'log', '[0],[system],[log],', '清空日志', null, '/log/delLog', '3', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('135', 'dept_add', 'dept', '[0],[system],[dept],', '添加部门', null, '/dept/add', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('136', 'dept_update', 'dept', '[0],[system],[dept],', '修改部门', null, '/dept/update', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('137', 'dept_delete', 'dept', '[0],[system],[dept],', '删除部门', null, '/dept/delete', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('138', 'dict_add', 'dict', '[0],[system],[dict],', '添加字典', null, '/dict/add', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('139', 'dict_update', 'dict', '[0],[system],[dict],', '修改字典', null, '/dict/update', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('140', 'dict_delete', 'dict', '[0],[system],[dict],', '删除字典', null, '/dict/delete', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('141', 'notice', 'system', '[0],[system],', '通知管理', null, '/notice', '9', '2', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('142', 'notice_add', 'notice', '[0],[system],[notice],', '添加通知', null, '/notice/add', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('143', 'notice_update', 'notice', '[0],[system],[notice],', '修改通知', null, '/notice/update', '2', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('144', 'notice_delete', 'notice', '[0],[system],[notice],', '删除通知', null, '/notice/delete', '3', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('145', 'hello', '0', '[0],', '通知', 'fa-rocket', '/notice/hello', '1', '1', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('148', 'code', '0', '[0],', '代码生成', 'fa-code', '/code', '3', '1', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('149', 'api_mgr', '0', '[0],', '接口文档', 'fa-leaf', '/swagger-ui.html', '2', '1', '1', null, '1', null);
INSERT INTO `sys_menu` VALUES ('150', 'to_menu_edit', 'menu', '[0],[system],[menu],', '菜单编辑跳转', '', '/menu/menu_edit', '4', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('151', 'menu_list', 'menu', '[0],[system],[menu],', '菜单列表', '', '/menu/list', '5', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('152', 'to_dept_update', 'dept', '[0],[system],[dept],', '修改部门跳转', '', '/dept/dept_update', '4', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('153', 'dept_list', 'dept', '[0],[system],[dept],', '部门列表', '', '/dept/list', '5', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('154', 'dept_detail', 'dept', '[0],[system],[dept],', '部门详情', '', '/dept/detail', '6', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('155', 'to_dict_edit', 'dict', '[0],[system],[dict],', '修改菜单跳转', '', '/dict/dict_edit', '4', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('156', 'dict_list', 'dict', '[0],[system],[dict],', '字典列表', '', '/dict/list', '5', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('157', 'dict_detail', 'dict', '[0],[system],[dict],', '字典详情', '', '/dict/detail', '6', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('158', 'log_list', 'log', '[0],[system],[log],', '日志列表', '', '/log/list', '2', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('159', 'log_detail', 'log', '[0],[system],[log],', '日志详情', '', '/log/detail', '3', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('160', 'del_login_log', 'loginLog', '[0],[system],[loginLog],', '清空登录日志', '', '/loginLog/delLoginLog', '1', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('161', 'login_log_list', 'loginLog', '[0],[system],[loginLog],', '登录日志列表', '', '/loginLog/list', '2', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('162', 'to_role_edit', 'role', '[0],[system],[role],', '修改角色跳转', '', '/role/role_edit', '5', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('163', 'to_role_assign', 'role', '[0],[system],[role],', '角色分配跳转', '', '/role/role_assign', '6', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('164', 'role_list', 'role', '[0],[system],[role],', '角色列表', '', '/role/list', '7', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('165', 'to_assign_role', 'mgr', '[0],[system],[mgr],', '分配角色跳转', '', '/mgr/role_assign', '8', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('166', 'to_user_edit', 'mgr', '[0],[system],[mgr],', '编辑用户跳转', '', '/mgr/user_edit', '9', '3', '0', null, '1', null);
INSERT INTO `sys_menu` VALUES ('167', 'mgr_list', 'mgr', '[0],[system],[mgr],', '用户列表', '', '/mgr/list', '10', '3', '0', null, '1', null);

-- ----------------------------
-- 创建通知表
-- ----------------------------
DROP TABLE IF EXISTS `sys_notice`;
CREATE TABLE `sys_notice` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(255) DEFAULT NULL COMMENT '标题',
  `type` int(11) DEFAULT NULL COMMENT '类型',
  `content` text COMMENT '内容',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `creater` int(11) DEFAULT NULL COMMENT '创建人',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='通知表';

-- ----------------------------
-- 通知表插入数据
-- ----------------------------
INSERT INTO `sys_notice` VALUES ('6', '世界', '10', '欢迎使用Guns管理系统', '2017-01-11 08:53:20', '1');
INSERT INTO `sys_notice` VALUES ('8', '你好', null, '你好', '2017-05-10 19:28:57', '1');

-- ----------------------------
-- 创建操作日志表
-- ----------------------------
DROP TABLE IF EXISTS `sys_operation_log`;
CREATE TABLE `sys_operation_log` (
  `id` int(65) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `logtype` varchar(255) DEFAULT NULL COMMENT '日志类型',
  `logname` varchar(255) DEFAULT NULL COMMENT '日志名称',
  `userid` int(65) DEFAULT NULL COMMENT '用户id',
  `classname` varchar(255) DEFAULT NULL COMMENT '类名称',
  `method` text COMMENT '方法名称',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `succeed` varchar(255) DEFAULT NULL COMMENT '是否成功',
  `message` text COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=558 DEFAULT CHARSET=utf8 COMMENT='操作日志';

-- ----------------------------
-- 操作日志表插入数据
-- ----------------------------
INSERT INTO `sys_operation_log` VALUES ('554', '业务日志', '添加管理员', '1', 'com.stylefeng.guns.modular.system.controller.UserMgrController', 'add', '2018-07-26 04:46:13', '成功', '账号=test');
INSERT INTO `sys_operation_log` VALUES ('555', '业务日志', '添加部门', '1', 'com.stylefeng.guns.modular.system.controller.DeptController', 'add', '2018-07-26 04:48:03', '成功', '部门简称=测试部');
INSERT INTO `sys_operation_log` VALUES ('556', '业务日志', '修改管理员', '1', 'com.stylefeng.guns.modular.system.controller.UserMgrController', 'edit', '2018-07-26 04:49:49', '成功', '账号=admin;;;字段名称:头像,旧值:girl.gif,新值:dfb74545-6dd4-48ff-beb4-82b456e42f51.png;;;字段名称:null,旧值:ecfadcde9305f8891bcfe5a1e28c253e,新值:;;;字段名称:名字,旧值:张三,新值:张三8;;;字段名称:性别,旧值:女,新值:男');
INSERT INTO `sys_operation_log` VALUES ('557', '业务日志', '修改管理员', '1', 'com.stylefeng.guns.modular.system.controller.UserMgrController', 'edit', '2018-07-26 04:49:52', '成功', '账号=admin;;;字段名称:头像,旧值:girl.gif,新值:dfb74545-6dd4-48ff-beb4-82b456e42f51.png;;;字段名称:null,旧值:ecfadcde9305f8891bcfe5a1e28c253e,新值:;;;字段名称:名字,旧值:张三,新值:张三8;;;字段名称:性别,旧值:女,新值:男');

-- ----------------------------
-- 创建角色和菜单关联表
-- ----------------------------
DROP TABLE IF EXISTS `sys_relation`;
CREATE TABLE `sys_relation` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `menuid` bigint(11) DEFAULT NULL COMMENT '菜单id',
  `roleid` int(11) DEFAULT NULL COMMENT '角色id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3792 DEFAULT CHARSET=utf8 COMMENT='角色和菜单关联表';

-- ----------------------------
-- 角色和菜单关联表插入数据
-- ----------------------------
INSERT INTO `sys_relation` VALUES ('3377', '105', '5');
INSERT INTO `sys_relation` VALUES ('3378', '106', '5');
INSERT INTO `sys_relation` VALUES ('3379', '107', '5');
INSERT INTO `sys_relation` VALUES ('3380', '108', '5');
INSERT INTO `sys_relation` VALUES ('3381', '109', '5');
INSERT INTO `sys_relation` VALUES ('3382', '110', '5');
INSERT INTO `sys_relation` VALUES ('3383', '111', '5');
INSERT INTO `sys_relation` VALUES ('3384', '112', '5');
INSERT INTO `sys_relation` VALUES ('3385', '113', '5');
INSERT INTO `sys_relation` VALUES ('3386', '114', '5');
INSERT INTO `sys_relation` VALUES ('3387', '115', '5');
INSERT INTO `sys_relation` VALUES ('3388', '116', '5');
INSERT INTO `sys_relation` VALUES ('3389', '117', '5');
INSERT INTO `sys_relation` VALUES ('3390', '118', '5');
INSERT INTO `sys_relation` VALUES ('3391', '119', '5');
INSERT INTO `sys_relation` VALUES ('3392', '120', '5');
INSERT INTO `sys_relation` VALUES ('3393', '121', '5');
INSERT INTO `sys_relation` VALUES ('3394', '122', '5');
INSERT INTO `sys_relation` VALUES ('3395', '150', '5');
INSERT INTO `sys_relation` VALUES ('3396', '151', '5');
INSERT INTO `sys_relation` VALUES ('3737', '105', '1');
INSERT INTO `sys_relation` VALUES ('3738', '106', '1');
INSERT INTO `sys_relation` VALUES ('3739', '107', '1');
INSERT INTO `sys_relation` VALUES ('3740', '108', '1');
INSERT INTO `sys_relation` VALUES ('3741', '109', '1');
INSERT INTO `sys_relation` VALUES ('3742', '110', '1');
INSERT INTO `sys_relation` VALUES ('3743', '111', '1');
INSERT INTO `sys_relation` VALUES ('3744', '112', '1');
INSERT INTO `sys_relation` VALUES ('3745', '113', '1');
INSERT INTO `sys_relation` VALUES ('3746', '165', '1');
INSERT INTO `sys_relation` VALUES ('3747', '166', '1');
INSERT INTO `sys_relation` VALUES ('3748', '167', '1');
INSERT INTO `sys_relation` VALUES ('3749', '114', '1');
INSERT INTO `sys_relation` VALUES ('3750', '115', '1');
INSERT INTO `sys_relation` VALUES ('3751', '116', '1');
INSERT INTO `sys_relation` VALUES ('3752', '117', '1');
INSERT INTO `sys_relation` VALUES ('3753', '118', '1');
INSERT INTO `sys_relation` VALUES ('3754', '162', '1');
INSERT INTO `sys_relation` VALUES ('3755', '163', '1');
INSERT INTO `sys_relation` VALUES ('3756', '164', '1');
INSERT INTO `sys_relation` VALUES ('3757', '119', '1');
INSERT INTO `sys_relation` VALUES ('3758', '120', '1');
INSERT INTO `sys_relation` VALUES ('3759', '121', '1');
INSERT INTO `sys_relation` VALUES ('3760', '122', '1');
INSERT INTO `sys_relation` VALUES ('3761', '150', '1');
INSERT INTO `sys_relation` VALUES ('3762', '151', '1');
INSERT INTO `sys_relation` VALUES ('3763', '128', '1');
INSERT INTO `sys_relation` VALUES ('3764', '134', '1');
INSERT INTO `sys_relation` VALUES ('3765', '158', '1');
INSERT INTO `sys_relation` VALUES ('3766', '159', '1');
INSERT INTO `sys_relation` VALUES ('3767', '130', '1');
INSERT INTO `sys_relation` VALUES ('3768', '131', '1');
INSERT INTO `sys_relation` VALUES ('3769', '135', '1');
INSERT INTO `sys_relation` VALUES ('3770', '136', '1');
INSERT INTO `sys_relation` VALUES ('3771', '137', '1');
INSERT INTO `sys_relation` VALUES ('3772', '152', '1');
INSERT INTO `sys_relation` VALUES ('3773', '153', '1');
INSERT INTO `sys_relation` VALUES ('3774', '154', '1');
INSERT INTO `sys_relation` VALUES ('3775', '132', '1');
INSERT INTO `sys_relation` VALUES ('3776', '138', '1');
INSERT INTO `sys_relation` VALUES ('3777', '139', '1');
INSERT INTO `sys_relation` VALUES ('3778', '140', '1');
INSERT INTO `sys_relation` VALUES ('3779', '155', '1');
INSERT INTO `sys_relation` VALUES ('3780', '156', '1');
INSERT INTO `sys_relation` VALUES ('3781', '157', '1');
INSERT INTO `sys_relation` VALUES ('3782', '133', '1');
INSERT INTO `sys_relation` VALUES ('3783', '160', '1');
INSERT INTO `sys_relation` VALUES ('3784', '161', '1');
INSERT INTO `sys_relation` VALUES ('3785', '141', '1');
INSERT INTO `sys_relation` VALUES ('3786', '142', '1');
INSERT INTO `sys_relation` VALUES ('3787', '143', '1');
INSERT INTO `sys_relation` VALUES ('3788', '144', '1');
INSERT INTO `sys_relation` VALUES ('3789', '145', '1');
INSERT INTO `sys_relation` VALUES ('3790', '148', '1');
INSERT INTO `sys_relation` VALUES ('3791', '149', '1');

-- ----------------------------
-- 创建角色表
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `num` int(11) DEFAULT NULL COMMENT '序号',
  `pid` int(11) DEFAULT NULL COMMENT '父角色id',
  `name` varchar(255) DEFAULT NULL COMMENT '角色名称',
  `deptid` int(11) DEFAULT NULL COMMENT '部门名称',
  `tips` varchar(255) DEFAULT NULL COMMENT '提示',
  `version` int(11) DEFAULT NULL COMMENT '保留字段(暂时没用)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='角色表';

-- ----------------------------
-- 角色表插入数据
-- ----------------------------
INSERT INTO `sys_role` VALUES ('1', '1', '0', '超级管理员', '24', 'administrator', '1');
INSERT INTO `sys_role` VALUES ('5', '2', '1', '临时', '26', 'temp', null);

-- ----------------------------
-- 创建管理员表
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `avatar` varchar(255) DEFAULT NULL COMMENT '头像',
  `account` varchar(45) DEFAULT NULL COMMENT '账号',
  `password` varchar(45) DEFAULT NULL COMMENT '密码',
  `salt` varchar(45) DEFAULT NULL COMMENT 'md5密码盐',
  `name` varchar(45) DEFAULT NULL COMMENT '名字',
  `birthday` datetime DEFAULT NULL COMMENT '生日',
  `sex` int(11) DEFAULT NULL COMMENT '性别(1:男 2:女)',
  `email` varchar(45) DEFAULT NULL COMMENT '电子邮件',
  `phone` varchar(45) DEFAULT NULL COMMENT '电话',
  `roleid` varchar(255) DEFAULT NULL COMMENT '角色id',
  `deptid` int(11) DEFAULT NULL COMMENT '部门id',
  `status` int(11) DEFAULT NULL COMMENT '状态(1:启用  2:冻结  3:删除)',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  `version` int(11) DEFAULT NULL COMMENT '保留字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8 COMMENT='管理员表';

-- ----------------------------
-- 管理员表插入数据
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', 'dfb74545-6dd4-48ff-beb4-82b456e42f51.png', 'admin', 'ecfadcde9305f8891bcfe5a1e28c253e', '8pgby', '张三8', '2017-05-04 16:00:00', '1', 'sn93@qq.com', '18200000000', '1', '27', '1', '2016-01-29 08:49:53', '25');
INSERT INTO `sys_user` VALUES ('44', null, 'test', '45abb7879f6a8268f1ef600e6038ac73', 'ssts3', 'test', '2017-05-01 00:00:00', '1', 'abc@123.com', '', '5', '26', '3', '2017-05-16 20:33:37', null);
INSERT INTO `sys_user` VALUES ('45', null, 'boss', '71887a5ad666a18f709e1d4e693d5a35', '1f7bf', '老板', '2017-12-04 00:00:00', '1', '', '', '1', '24', '1', '2017-12-04 22:24:02', null);
INSERT INTO `sys_user` VALUES ('46', null, 'manager', 'b53cac62e7175637d4beb3b16b2f7915', 'j3cs9', '经理', '2017-12-04 00:00:00', '1', '', '', '1', '24', '1', '2017-12-04 22:24:24', null);
INSERT INTO `sys_user` VALUES ('47', '', 'test', '2d76f686a658fc597c2250c6786b0c3d', 'rvmu3', '测试', '2018-07-09 16:00:00', '1', '11112@qq.com', '13111112222', null, '25', '1', '2018-07-26 04:46:13', null);

-- ----------------------------
-- 创建测试
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `aaa` int(11) NOT NULL AUTO_INCREMENT,
  `bbb` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`aaa`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='测试';

-- ----------------------------
-- 测试插入数据
-- ----------------------------


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 test/docker-mysql .

 七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

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

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

6、启动容器

docker run --name mysql_test01 -d -p 3308:3306 test/docker-mysql

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

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 验证结果:

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

#进入容器:
docker exec -it mysql_test01 /bin/bash

前文中创建了docker_mysql数据库,并在此数据库中创建了几张数据表,同时将数据库的连接授权赋予了新建的docker用户,因此验证过程为:
    使用docker用户登录数据库:mysql -u docker -p
    输入密码123456通过登录验证
    切换至docker_mysql数据库:use docker_mysql;
    查看数据库中的表:show tables;
    任意找一张表,查看表中的数据:select * from sys_dept;
整个过程如下:

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

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

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

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 打开部门表:发现存在中文乱码的现象

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

怀疑是客户端和服务端字符集不一致导致:检查服务端的字符编码。

root@9c01579e67a6:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 16
Server version: 5.7.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> show table status from docker_mysql like '%countries%';
Empty set (0.00 sec)

mysql> use docker_mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show full columns from sys_dept;
+------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------------------------------+
| Field      | Type         | Collation       | Null | Key | Default | Extra          | Privileges                      | Comment                           |
+------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------------------------------+
| id         | int(11)      | NULL            | NO   | PRI | NULL    | auto_increment | select,insert,update,references | 主键id                          |
| num        | int(11)      | NULL            | YES  |     | NULL    |                | select,insert,update,references | 排序                            |
| pid        | int(11)      | NULL            | YES  |     | NULL    |                | select,insert,update,references | 父部门id                       |
| pids       | varchar(255) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references | 父级ids                         |
| simplename | varchar(45)  | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references | 简称                            |
| fullname   | varchar(255) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references | 全称                            |
| tips       | varchar(255) | utf8_general_ci | YES  |     | NULL    |                | select,insert,update,references | 提示                            |
| version    | int(11)      | NULL            | YES  |     | NULL    |                | select,insert,update,references | 版本(乐观锁保留字段) |
+------------+--------------+-----------------+------+-----+---------+----------------+---------------------------------+-----------------------------------+
8 rows in set (0.00 sec)

mysql> 

查了相关资料:试了一下,还真可以

 七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

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

 数据卷操作Mysql

1)、挂载一个主机目录作为数据卷

 使用 -v 标记也可以指定挂载一个本地主机的目录到容器中去。

docker run -d --name myMysql -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql

-d : --detach,后台运行。
--name : 为你的镜像创建一个别名,该别名用于更好操作。
-p : 映射端口,一般我们会将默认端口进行更改,避免与本机的mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 33060:3306-e : 环境变量。为mysql的root用户设置密码为123456。
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机/data/mysql里面。

 

上面的命令加载主机的 /data/mysql目录到容器的/var/lib/mysql目录。这个功能在进行测试的时候十分方便,比如用户可以放置一些程序到本地目录中,来查看容器是否正常工作。本地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。

注意:Dockerfile 中不支持这种用法,这是因为 Dockerfile 是为了移植和分享用的。然而,不同操作系统的路径格式不一样,所以目前还不能支持。

Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。

docker run -d --name myMysql02 -v /data/mysql:/var/lib/mysql:ro -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 mysq

加了 :ro 之后,就挂载为只读了。

2、挂载一个本地主机文件作为数据卷

-v 标记也可以从主机挂载单个文件到容器中

docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

这样就可以记录在容器输入过的命令了。

数据卷容器

1、制作Dockerfile文件

如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

Dockerfile 方式创建的数据卷,通过 VOLUME 指令创建的挂载点,无法指定宿主机上对应的目录,是自动生成的,,每次启动都会在宿主机中创建新的映射目录。

FROM centos
VOLUME ["/data1","/data2"]
CMD /bin/bash

上面的dockfile文件通过VOLUME指令指定了两个挂载点 /data1 和 /data2.

 2、制作镜像:

docker build -t base_dbdata .

3、启动数据卷容器:

docker run -it --name dev3 base_dbdata

操作步骤:

[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker build -t base_dbdata .
Sending build context to Docker daemon 36.86 kB
Step 1/3 : FROM centos
Trying to pull repository docker.io/library/centos ... 
latest: Pulling from docker.io/library/centos
7dc0dca2b151: Already exists 
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for docker.io/centos:latest
 ---> 49f7960eb7e4
Step 2/3 : VOLUME /data1 /data2
 ---> Running in 0d80bcb7904a
 ---> 4f5223f0f9ec
Removing intermediate container 0d80bcb7904a
Step 3/3 : CMD /bin/bash
 ---> Running in aa6f304ca149
 ---> 4a0e2bd357ab
Removing intermediate container aa6f304ca149
Successfully built 4a0e2bd357ab
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
base_dbdata                                     latest              4a0e2bd357ab        9 seconds ago       200 MB
docker.io/centos                                latest              49f7960eb7e4        2 months ago        200 MB
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker run -it --name dev3  base_dbdata                                          
[root@3742c285f94d /]# ll 
total 52
lrwxrwxrwx   1 root root    7 May 31 18:02 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Aug  4 17:19 data1
drwxr-xr-x   2 root root 4096 Aug  4 17:19 data2
drwxr-xr-x   5 root root  360 Aug  4 17:19 dev
drwxr-xr-x   1 root root 4096 Aug  4 17:19 etc
drwxr-xr-x   2 root root 4096 Apr 11 04:59 home
lrwxrwxrwx   1 root root    7 May 31 18:02 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 31 18:02 lib64 -> usr/lib64
drwxr-xr-x   2 root root 4096 Apr 11 04:59 media
drwxr-xr-x   2 root root 4096 Apr 11 04:59 mnt
drwxr-xr-x   2 root root 4096 Apr 11 04:59 opt
dr-xr-xr-x 119 root root    0 Aug  4 17:19 proc
dr-xr-x---   2 root root 4096 May 31 18:03 root
drwxr-xr-x   1 root root 4096 Aug  4 17:19 run
lrwxrwxrwx   1 root root    8 May 31 18:02 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Apr 11 04:59 srv
dr-xr-xr-x  13 root root    0 Aug  4 17:19 sys
drwxrwxrwt   7 root root 4096 May 31 18:03 tmp
drwxr-xr-x  13 root root 4096 May 31 18:02 usr
drwxr-xr-x  18 root root 4096 May 31 18:02 var
[root@3742c285f94d /]# 

#添加文件用于测试
[root@3742c285f94d /]# vi /data1/test.txt
[root@3742c285f94d /]# cat /data1/test.txt
this is a test volumes datas ....
[root@3742c285f94d /]#

4、备份文件(创建新的容器dev5)

[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker run --rm -it --name dev5 --volumes-from dev3 -v $(pwd):/backup centos tar cvf /backup/backup.tar /data1
tar: Removing leading `/' from member names
/data1/
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
341e39ed27ea        base_dbdata         "/bin/sh -c /bin/bash"   3 minutes ago       Exited (0) 2 minutes ago                       dev3
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# ll
total 16
-rw-r--r-- 1 root root 10240 Aug  5 03:23 backup.tar
-rw-r--r-- 1 root root    53 Aug  5 01:07 Dockerfile
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]#

五、还原数据

 创建一个带有空数据卷的容器 dev6

docker run -it --name dev6 base_dbdata

根据新的数据卷容器创建新的容器

[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker run -it --name dev6 --volumes-from dev5 -v $(pwd):/backup base_dbdata tar xvf /backup/backup.tar 
data1/
data1/test.txt
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker run -it --name dev8 --volumes-from dev6 base_dbdata
[root@5e4e52c8a858 /]# ll
total 56
drwxr-xr-x   2 root root 4096 Aug  4 17:34 backup
lrwxrwxrwx   1 root root    7 May 31 18:02 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Aug  4 17:25 data1
drwxr-xr-x   2 root root 4096 Aug  4 17:41 data2
drwxr-xr-x   5 root root  360 Aug  4 17:55 dev
drwxr-xr-x   1 root root 4096 Aug  4 17:55 etc
drwxr-xr-x   2 root root 4096 Apr 11 04:59 home
lrwxrwxrwx   1 root root    7 May 31 18:02 lib -> usr/lib
lrwxrwxrwx   1 root root    9 May 31 18:02 lib64 -> usr/lib64
drwxr-xr-x   2 root root 4096 Apr 11 04:59 media
drwxr-xr-x   2 root root 4096 Apr 11 04:59 mnt
drwxr-xr-x   2 root root 4096 Apr 11 04:59 opt
dr-xr-xr-x 121 root root    0 Aug  4 17:55 proc
dr-xr-x---   2 root root 4096 May 31 18:03 root
drwxr-xr-x   1 root root 4096 Aug  4 17:55 run
lrwxrwxrwx   1 root root    8 May 31 18:02 sbin -> usr/sbin
drwxr-xr-x   2 root root 4096 Apr 11 04:59 srv
dr-xr-xr-x  13 root root    0 Aug  4 17:55 sys
drwxrwxrwt   7 root root 4096 May 31 18:03 tmp
drwxr-xr-x  13 root root 4096 May 31 18:02 usr
drwxr-xr-x  18 root root 4096 May 31 18:02 var
[root@5e4e52c8a858 /]#

还可以使用多个 --volumes-from 参数来从多个容器挂载多个数据卷。 也可以从其他已经挂载了数据卷的容器来挂载数据卷。

docker run -d --name db3 --volumes-from db1 training/postgres

注意:使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。

如果删除了挂载的容器(包括 dbdata、db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。 这可以让用户在容器之间升级和移动数据卷。具体的操作将在下一节中进行讲解。

 检查数据卷是否创建成功:

[root@iz2zecm4ndtkaue32tynx5z mysql]# docker inspect dev3
或者
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]# docker inspect --format='{{ .Mounts}}' dev3
[{volume 20af81b74b5be8630ca75e902304582087084155d279a3723e96414112250e03 /var/lib/docker/volumes/20af81b74b5be8630ca75e902304582087084155d279a3723e96414112250e03/_data /data2 local  true }
{volume df66ecbc21436e7004ec28af6481720fb3b76cee8f8ba87ffd005dd480434942 /var/lib/docker/volumes/df66ecbc21436e7004ec28af6481720fb3b76cee8f8ba87ffd005dd480434942/_data /var/lib/mysql local  true }
{volume 5f688498212c061ce85feb7fa3b09150a28d4ff2685a664a5d5bf09f5b912c38 /var/lib/docker/volumes/5f688498212c061ce85feb7fa3b09150a28d4ff2685a664a5d5bf09f5b912c38/_data /data1 local  true }]
[root@iz2zecm4ndtkaue32tynx5z centos-mysql]#

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

 七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器

七、Dockerfile案例三(Mysql安装)
七、Dockerfile案例三(Mysql安装)
 三、创建 Mysql 容器(8.x 版本)
四、docker安装mysql的latest版本
让docker中的mysql启动时自动执行sql文件
一、搭建步骤
 数据卷操作Mysql
数据卷容器