docker實戰篇1:mysql應用
我們這裡先aliyun205這臺伺服器上通過docker建立一個mysql5.7的資料庫,然後在該資料上存放一些測試資料,模擬備份打包為tar.gz檔案。最後在VM_190_147_centos這臺伺服器上把打包的資料庫通過docker映象恢復出來。
1、通過docker構建mysql5.7資料庫
1、拉取映象
[[email protected] ~]# docker pull mysql:5.7.24
2、常見目錄
[[email protected] ~]# mkdir -p /opt/mysql3306/{conf,logs,data}
3、啟動容器
[[email protected] ~]# docker run -it -d -p 3306:3306 --name=mysql --mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.24 e3560ae32aec1ad87b336f8aef0a2bab3c7b75fa182f0d1882846921de85de66
【說明】我們使用--mount掛載點的方式指定目錄,對這些掛載點說明
(1)--mount type=bind,src=/opt/mysql3306/conf,dst=/etc/mysql 將主機當前目錄下的conf掛載到容器的/etc/mysql;
(2) --mount type=bind,src=/opt/mysql3306/logs,dst=/var/log/mysql將主機當前目錄下的logs目錄掛載到容器的/var/log/mysql;
(3)--mount type=bind,src=/opt/mysql3306/data,dst=/var/lib/mysql 將主機當前目錄下的data目錄掛載到容器的/var/lib/mysql;
(4)-e MYSQL_ROOT_PASSWORD=123456 指定資料庫的初始化密碼。
【引數說明:】
(1)-e MYSQL_USER="woniu" :新增woniu使用者;
(2)-e MYSQL_PASSWORD="123456":設定新增的使用者密碼;
(3)-e MYSQL_ROOT_PASSWORD="123456":設定root使用者密碼;
(4)--character-set-server=utf8:設定字符集為utf8;
(5)--collation-server=utf8_general_cli:設定字元比較規則為utf8_general_cli。
(6)--privileged=true:容器內的root擁有真正root許可權,否則容器內root只是外部普通使用者許可權;
(7)-v /docker/mysql/conf/my.cnf:/etc/my.cnf:對映配置檔案
2、備份資料
1、模擬資料
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '張三', '10');
INSERT INTO `user` VALUES ('2', '李四', '20');
INSERT INTO `user` VALUES ('3', '王五', '30');
2、這裡模糊docker掛掉了
[[email protected] ~]# docker stop mysql
mysql
3、進入/opt/mysql3306目錄,使用tar -zcvf命令打包,壓縮包就是我們備份的資料
[[email protected] opt]# cd /opt/mysql3306/
[[email protected] mysql3306]# tar -zcvf backup.tar.gz ./
3、恢復資料
VM_190_147_centos這臺伺服器上已經有了相同版本的docker映象,且我們把對應目錄為/data/mysql3306/,並把上一步驟轉給你備份檔案方在該目錄。
[[email protected]_190_147_centos ~]# cd /data/mysql3306/
[[email protected]_190_147_centos mysql3306]# ll
total 7072
-rw-r--r-- 1 root root 7239684 Dec 7 10:17 backup.tar.gz
在/data/mysql3306目錄下解壓縮備份檔案
[[email protected]_190_147_centos mysql3306]# tar -zxvf backup.tar.gz
[[email protected]_190_147_centos mysql3306]# ll
total 7084
-rw-r--r-- 1 root root 7239684 Dec 7 10:17 backup.tar.gz
drwxr-xr-x 2 root root 4096 Dec 7 10:06 conf
drwxr-xr-x 6 polkitd ssh_keys 4096 Dec 7 10:14 data
drwxr-xr-x 2 root root 4096 Dec 7 10:06 logs
啟動容器
[[email protected]_190_147_centos ~]# docker run -it -d --name=mysql -p 3306:3306 --mount type=bind,src=/data/mysql3306/conf,dst=/etc/mysql --mount type=bind,src=/data/mysql3306/logs,dst=/var/log/mysql --mount type=bind,src=/data/mysql3306/data,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.24
fe231cfb5ef36b2e5d5dd019c8d8b734d6d236d47877216b6a38e6de37db0393
檢查資料是否存在
[email protected]_190_147_centos ~]# docker ps
[[email protected]_190_147_centos ~]# docker exec -it mysql bash
[email protected]:/# mysql -uroot -p123456
mysql> use wzy;
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> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | ?? | 10 |
| 2 | ?? | 20 |
| 3 | ?? | 30 |
+----+------+------+
3 rows in set (0.00 sec)