七、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]#

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM