为什么要用docker装node
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。放在docker里能防止二次出现问题,对后来接手的人也友好。 我已经封装上传 dockerhub ,可直接拉取使用,详见文档说明。
构建脚本
Dockerfile
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。放在docker里能防止二次出现问题,对后来接手的人也友好。 我已经封装上传 dockerhub ,可直接拉取使用,详见文档说明。
Dockerfilephp由于版本、扩展等问题,环境部署麻烦,使用docker能屏蔽这些。 而nginx部署在docker中我也实在找不到太强烈的理由,主打一个来都来了。
docker启动nginx和php-fpmphp.ini放在本地,避免删除容器后丢失。(php-fpm如果你有需求更改可以自行研究,一般我们本地不需要对php-fpm调优)创建工作目录。 我的目录是 /etc/docker/mysql。(如果是mac或者windows本机的docker,先确认映射的目录是否有权限)
创建主数据库
创建my-master.cnf文件,拷贝下方的配置。 依据机器配置更改
innodb_buffer_pool_size 和 innodb_buffer_pool_instancesinnodb_read_io_threads 和 innodb_write_io_threads ,主从配置中,写多分配运行。 docker run -d -p 3306:3306 --name mysql-master --restart=always -v /etc/docker/mysql/my-master.cnf:/etc/my.cnf -v /etc/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
稍等几秒后连接数据库。
创建从库账号 slave1。
CREATE USER slave1 IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%';
FLUSH PRIVILEGES;
创建从库
cp my-master.cnf my-slave.cnf
修改配置文件my-slave.cnf
server-idlog-bin = mysql-bin ,从库不需要开启binloginnodb_buffer_pool_size 和 innodb_buffer_pool_instancesinnodb_read_io_threads 和 innodb_write_io_threads运行。docker run -d -p 3307:3306 --name mysql-slave --restart=always -v /etc/docker/mysql/my-slave.cnf:/etc/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql (从库不映射)
查看主库IP。 线上环境可以直接知道,注意端口开放。 同机器docker搭建需要查看 docker inspect mysql-master
在主库执行 SHOW MASTER STATUS; 获取参数。
进入从库,执行类似 CHANGE MASTER TO MASTER_HOST='172.17.0.4', MASTER_USER='slave1', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=158;
启动从库 START SLAVE;
查看从库同步状态 SHOW SLAVE STATUS; 查看Slave_IO_Running 和 Slave_SQL_Running 为 Yes
测试
创建工作目录。 我的目录是 /etc/docker/redis。(如果是mac或者windows本机的docker,先确认映射的目录是否有权限)
主redis。
redis-master.conf文件,拷贝下方的配置。docker run -d -p 6379:6379 --name redis-master --restart=always -v /etc/docker/redis/redis-master.conf:/etc/redis.conf -v /etc/docker/redis:/data -e TZ=Asia/Shanghai redis redis-server /etc/redis.conf从redis。
cp redis-master.conf redis-slave.confdocker inspect redis-masterredis-slave.conf中的 replicaof 和 masterauthdocker run -d -p 6380:6379 --name redis-slave --restart=always -v /etc/docker/redis/redis-slave.conf:/etc/redis.conf -e TZ=Asia/Shanghai redis redis-server /etc/redis.conf (从库没有不映射数据文件夹,都来源于主库)