目前已完成:php7及扩展、redis5的Dockerfile测试版编写,稍许完善后同步上传到github,(记下这里memcached还没有剥离安装)。
今天数据库,编程的一个重要原则是不要重复造轮子,php因为需要很多自定义插件、所以单独编译镜像,其实其他包括redis都应该使用官方的,直接pull就行。
一、mysql部分
参考官方镜像,根据官方镜像,准备的mysql、mysql_slave文件树,添加了个数据文件夹。
[]:~/tmp/dk/mysql/mysql_slave# tree ././├── config│ ├── conf.d│ │ └── docker.cnf│ └── my.cnf└── data
1、创建mysql镜像
[]:~/tmp/dk# docker pull mysql:8.0[]:~/tmp/dk# docker run --name mq -p 3306:3306 -v /root/tmp/dk/mysql/data:/var/lib/mysql \ -v /root/tmp/dk/mysql/config:/etc/mysql \ -v /root/tmp/dk/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0[]:~/tmp/dk# docker run --name ms -p 3308:3306 -v /root/tmp/dk/mysql_slave/data:/var/lib/mysql \ -v /root/tmp/dk/mysql_slave/config:/etc/mysql \ -v /root/tmp/dk/mysql_slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
退出后台运行的容器,按 Ctrl+D 进行退出容器,请牢记!
run后运行的容器进入:
a.旧式进入 []:~/tmp/dk# docker attach mqb.命令进入 []:~/tmp/dk# docker exec -it mq /bin/bash(或/bin/sh)
参考《Docker容器进入的4种方式》
a.普通进入:有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。所以docker attach命令不太适合于生产环境,平时自己开发应用时可以使用该命令。
b.推荐
2、主从同步数据
# 主服务器mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';mysql> flush privileges;
# 从服务器# remote_host可以是 192.168.1.102 的相对于容器的公网地址#重置复制状态参数mysql> reset slave all;Query OK, 0 rows affected (0.02 sec)mysql> change master to master_host='remote_host',master_port=3306,master_user='repl',\ master_password='Ron_master_1',master_log_file='mysql-bin.000003',master_log_pos=155;Query OK, 0 rows affected, 2 warnings (0.01 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)# 关闭从服务mysql> STOP SLAVE;
如在配置主从同步前master中已有数据,则需提前进行数据同步操作
登录master,执行锁表操作
# 主服务器容器mysql> FLUSH TABLES WITH READ LOCK;Query OK, 0 rows affected (0.01 sec)# 完成后mysql> UNLOCK TABLES;Query OK, 0 rows affected (0.00 sec)
# 从服务器容器xx@fd8bb25a86fc:/# mysqldump -uroot -p -h remote_host -P3306 test > /tmp/test.dumpEnter password: xx@fd8bb25a86fc:/# mysql -uroot -p123456mysql> create database test;Query OK, 1 row affected (0.01 sec)# 或直接use然后source filemysql> quitByexx@fd8bb25a86fc:/# mysql -u root -p test < /tmp/test.dump