为什么要用docker装node
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。我认为放在docker里能解决所有问题,这对后来接手的人也友好。
构建脚本
- 创建一个目录,放入
start.sh和Dockerfile
start.sh 为:
#!/bin/sh
if [ -d "$1" ]; then
cd "$1"
fi
shift
command="$@"
eval $command
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。我认为放在docker里能解决所有问题,这对后来接手的人也友好。
start.sh 和 Dockerfilestart.sh 为:
#!/bin/sh
if [ -d "$1" ]; then
cd "$1"
fi
shift
command="$@"
eval $command
创建工作目录。 我的目录是 /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 (从库没有不映射数据文件夹,都来源于主库)