为什么要用docker装node
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。放在docker里能防止二次出现问题,对后来接手的人也友好。 我已经封装上传 dockerhub ,可直接拉取使用,详见文档说明。
构建脚本
Dockerfile
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。放在docker里能防止二次出现问题,对后来接手的人也友好。 我已经封装上传 dockerhub ,可直接拉取使用,详见文档说明。
Dockerfile
php由于版本、扩展等问题,环境部署麻烦,使用docker能屏蔽这些。 而nginx部署在docker中我也实在找不到太强烈的理由,主打一个来都来了。
docker
启动nginx
和php-fpm
php.ini
放在本地,避免删除容器后丢失。(php-fpm如果你有需求更改可以自行研究,一般我们本地不需要对php-fpm调优)创建工作目录。 我的目录是 /etc/docker/mysql
。(如果是mac或者windows本机的docker,先确认映射的目录是否有权限)
创建主数据库
创建my-master.cnf
文件,拷贝下方的配置。 依据机器配置更改
innodb_buffer_pool_size
和 innodb_buffer_pool_instances
innodb_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-id
log-bin = mysql-bin
,从库不需要开启binloginnodb_buffer_pool_size
和 innodb_buffer_pool_instances
innodb_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.conf
docker inspect redis-master
redis-slave.conf
中的 replicaof
和 masterauth
docker 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
(从库没有不映射数据文件夹,都来源于主库)