七、Dockerfile案例三(Mysql安装)

七、Dockerfile案例三(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;

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

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

 三、创建 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;

 用navicat去远程连接容器中的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)

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

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

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 .

 

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

6、启动容器

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

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

 验证结果:

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;
整个过程如下:

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

2、通过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> 

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

 

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

 数据卷操作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]#

 

 

原文地址:https://www.cnblogs.com/gaogaoyanjiu/p/9392242.html