Docker 安装
# step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2# Step 2: 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3: 更新并安装 Docker-CEsudo yum -y install docker-ce# Step 4: 开启Docker服务sudo service docker startsudo systemctl enable dockersudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://3nnzwyqy.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
Docker-compose安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-composechmod +x /usr/local/bin/docker-compose## 验证docker-compose --version## 出现以下内容说明安装成功docker-compose version 1.25.5, build 8a1c60f6
Windows安装Docker
- 下载docker
- 双击安装
关键配置

通用
国内镜像
国内镜像地址:https://3nnzwyqy.mirror.aliyuncs.comPortainer安装
docker volume create portainer_datadocker run -d -p 8001:8000 -p 9001:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
访问地址
http://192.168.1.100:9001设置账号

设置账号和密码选择容器

选择容器管理,这里选择Docker
点击Connect连接
配置Docker主机
- 设置需要加入的主机Docker配置

勾选(Desktop版本):Expose daemon on tcp://localhost:2375 without TLS
- 设置完成后重启
添加Endpoint


添加成功后,就可以管理了。
Docker运行Centos7
# windowsdocker run -itd --name centos7-test --privileged=true --restart=always -p 27017:27017 -v /sys/fs/cgroup:/sys/fs/cgroup centos:7 /usr/sbin/init
-p 27017:27017 需要开放端口的时候,设置此项
JDK安装
下载jdk-8u211-linux-x64.tar.gz安装包,上传到服务器 /opt/tools目录
cd /opt/tools/
tar -zxvf jdk-8u211-linux-x64.tar.gz -C /opt/soft/
vi /etc/profile
## 在末尾加入如下三行配置
## 注意:请不要换行,请不要换行,请不要换行,请不要换行,请不要换行,请不要换行
export JAVA_HOME=/opt/soft/jdk1.8.0_211
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
## 保存修改后,退出
## 让配置生效
source /etc/profile
## 验证
java -version
## 出现以下内容说明安装成功
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
Redis 安装
Docker
mkdir -p /opt/soft/redis
cd /opt/soft/redis
docker run --restart=always \
--name redis -p 6379:6379 \
-v /opt/soft/redis/redis.conf:/etc/redis/redis.conf \
-v /opt/soft/redis/data:/data \
-d redis:4.0.14 redis-server /etc/redis/redis.conf \
--appendonly yes \
--requirepass "zb123456"
## -p host_port:container_port,host_port随意指定,访问时就用这个端口,container_port必须是6379,这个跟镜像开发者有关。
## -v 指定数据卷,其实就是把容器里的/etc/redis/redis.conf个文件夹共享到本机的/opt/soft/redis/redis.conf个文件夹
## -d 后台运行
## redis:5.0.6 代表我们要运行的是redis的容器,版本号是5.0.6
## redis-server /etc/redis/redis.conf 指定容器启动时,执行的命令
## --appendonly yes 开启Redis的持久化,并指定为AOF模式
## --requirepass "zb123456" 开启密码模式,并指定密码为 zb123456
Docker-compose
cd /opt/soft/redis
vi docker-compose.yml
version: '3'
services:
redis:
image: redis:6.2.4
container_name: redis
restart: always
command: --appendonly yes --requirepass "zb123456"
ports:
- 6379:6379
volumes:
- ./data:/data
cd /opt/soft/redis
docker-compose up -d
MySQL安装
Docker
mkdir -p /opt/soft/mysql
cd /opt/soft/mysql
docker run --restart=always \
--name mysql8 -p 3306:3306 \
-v /opt/soft/mysql/db:/var/lib/mysql \
-v /opt/soft/mysql/conf:/etc/mysql/conf.d \
-v /opt/soft/mysql/init:/docker-entrypoint-initdb.d/ \
-v /opt/soft/mysql/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=root \
-e TZ=Asia/Shanghai \
-d mysql:8.0.18 \
--default-authentication-plugin=mysql_native_password \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--explicit_defaults_for_timestamp=true \
--lower_case_table_names=1 \
--max_allowed_packet=128M
## -p host_port:container_port,host_port随意指定,访问时就用这个端口,container_port必须是3306,这个跟镜像开发者有关。
## -v 指定数据卷,其实就是把容器里的/var/lib/mysql个文件夹共享到本机的/opt/soft/mysql1/db个文件夹
## -e 环境参数
## MYSQL_ROOT_PASSWORD=root 指定root的登录密码
## TZ=Asia/Shanghai 指定容器运行的时区
## -d 后台运行
## mysql:8.0.18 代表我们要运行的是mysql的容器,版本号是8.0.18
## mysql:8.0.18 后面的 --XXXXX YYYY 参数是mysql的配置参数,请直接复制即可
Docker-compose 安装
cd /opt/soft/mysql
vi docker-compose.yml
version: '3.1'
services:
mysql:
image: mysql:8.0.18
container_name: mysql8.0.18
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--max_connections=2000
restart: always
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: zb123456
volumes:
- "./db:/var/lib/mysql"
- "./conf:/etc/mysql/conf.d"
- "./init:/docker-entrypoint-initdb.d/"
- "./mysql-files:/var/lib/mysql-files"
ports:
- "3306:3306"
Nginx安装
Docker
## 如果是docker安装
mkdir /opt/soft/nginx
cd /opt/soft/nginx
docker run --restart=always \
--name nginx -p 80:80 \
-v /opt/soft/web/kxt-one-number:/usr/share/nginx/html \
-d nginx:1.17
## -p host_port:container_port,host_port随意指定,访问时就用这个端口,container_port必须是80,这个跟镜像开发者有关。
## -v 指定数据卷,其实就是把容器里的/usr/share/nginx/html个文件夹共享到本机的/opt/soft/web/kxt-one-number个文件夹
## -d 后台运行
## nginx:1.17 代表我们要运行的是nginx的容器,版本号是1.17
MongoDB 安装
启动VM
docker run -itd --name mongodb --privileged=true --restart=always -p 27017:27017 -p 27018:27018 -p 27019:27019 -v /sys/fs/cgroup:/sys/fs/cgroup centos:7 /usr/sbin/init
常规安装
黏贴
[mongodb-org-4.4] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
- 安装
```shell
yum install -y mongodb-org
- 修改配置 ```shell vi /etc/mongod.conf
修改为
net: port: 27017 bindIp: 0.0.0.0
- 启动
```shell
systemctl start mongod
压缩包安装
yum -y install wget
mkdir -p /opt/soft && cd /opt/soft
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.5.tgz
[root@fe8637802a56 mongodb]# ls
mongodb-linux-x86_64-rhel70-4.4.5.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.5.tgz
[root@fe8637802a56 soft]# mv mongodb-linux-x86_64-rhel70-4.4.5 mongodb4.4.5
[root@d40df9c2e161 soft]# ls
mongodb4.4.5 mongodb-linux-x86_64-rhel70-4.4.5.tgz
cd mongodb4.4.5/
cp bin/* /usr/local/bin/
mkdir -p /opt/soft/mongodb4.4.5/log /opt/soft/mongodb4.4.5/data /opt/soft/mongodb4.4.5/conf
配置
vi /opt/soft/mongodb4.4.5/conf/mongod.conf
systemLog:
destination: file
path: "/opt/soft/mongodb4.4.5/log/mongod.log"
logAppend: true
storage:
dbPath: "/opt/soft/mongodb4.4.5/data"
journal:
enabled: true
processManagement:
fork: true
pidFilePath: "/opt/soft/mongodb4.4.5/log/mongod.pid"
net:
bindIp: 0.0.0.0
port: 27017
启动Mongodb
mongod -f /opt/soft/mongodb4.4.5/conf/mongod.conf
[root@57138d4eae50 mongodb4.4.5]# mongod -f /opt/soft/mongodb4.4.5/conf/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 140
child process started successfully, parent exiting
出现 child process started successfully, parent exiting,表示启动成功。
MongoDB Compass连接
主从复制
在压缩包安装的基础上,创建多个配置,配置伪集群(同主机,端口号不一样),具体操作如下:
集群规划
- 192.168.0.100:27017
- 192.168.0.100:27018
- 192.168.0.100:27019
创建配置文件
mkdir -p /opt/soft/mongodb4.4.5/27017/log /opt/soft/mongodb4.4.5/27017/data /opt/soft/mongodb4.4.5/27017/conf mkdir -p /opt/soft/mongodb4.4.5/27018/log /opt/soft/mongodb4.4.5/27018/data /opt/soft/mongodb4.4.5/27018/conf mkdir -p /opt/soft/mongodb4.4.5/27019/log /opt/soft/mongodb4.4.5/27019/data /opt/soft/mongodb4.4.5/27019/conf27017配置
vi /opt/soft/mongodb4.4.5/27017/conf/mongod.confsystemLog: destination: file path: "/opt/soft/mongodb4.4.5/27017/log/mongod.log" logAppend: true storage: dbPath: "/opt/soft/mongodb4.4.5/27017/data" journal: enabled: true processManagement: fork: true pidFilePath: "/opt/soft/mongodb4.4.5/27017/log/mongod.pid" net: bindIp: 0.0.0.0 port: 27017 replication: replSetName: rs027018配置
vi /opt/soft/mongodb4.4.5/27018/conf/mongod.confsystemLog: destination: file path: "/opt/soft/mongodb4.4.5/27018/log/mongod.log" logAppend: true storage: dbPath: "/opt/soft/mongodb4.4.5/27018/data" journal: enabled: true processManagement: fork: true pidFilePath: "/opt/soft/mongodb4.4.5/27018/log/mongod.pid" net: bindIp: 0.0.0.0 port: 27018 replication: replSetName: rs027019配置
vi /opt/soft/mongodb4.4.5/27019/conf/mongod.confsystemLog: destination: file path: "/opt/soft/mongodb4.4.5/27019/log/mongod.log" logAppend: true storage: dbPath: "/opt/soft/mongodb4.4.5/27019/data" journal: enabled: true processManagement: fork: true pidFilePath: "/opt/soft/mongodb4.4.5/27019/log/mongod.pid" net: bindIp: 0.0.0.0 port: 27019 replication: replSetName: rs0启动MongoDB
mongod -f /opt/soft/mongodb4.4.5/27017/conf/mongod.conf mongod -f /opt/soft/mongodb4.4.5/27018/conf/mongod.conf mongod -f /opt/soft/mongodb4.4.5/27019/conf/mongod.conf[root@57138d4eae50 conf]# ps -ef | grep mongod root 199 1 0 09:07 ? 00:00:07 mongod -f /opt/soft/mongodb4.4.5/27017/conf/mongod.conf root 243 1 2 09:33 ? 00:00:00 mongod -f /opt/soft/mongodb4.4.5/27018/conf/mongod.conf root 279 1 5 09:33 ? 00:00:00 mongod -f /opt/soft/mongodb4.4.5/27019/conf/mongod.conf root 314 67 0 09:33 pts/1 00:00:00 grep --color=auto mongod初始化集群
```bash连接27017
mongo —port 27017
初始化集群
rs.initiate()
```bash
> rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "57138d4eae50:27017",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1620726600, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1620726600, 1)
}
rs0:SECONDARY>
rs0:PRIMARY>
加入从节点
# 查看hostname
hostname
# 使用hostname:端口号,添加从节点
rs.add("57138d4eae50:27018")
rs.add("57138d4eae50:27019")
分别连接27017,27018,27019,发现27017是rs0:PRIMARY,代表主节点。其他的是rs0:SECONDAR,代表从节点。如图:
测试数据
注意,只能在主节点写入,其他节点只能读取,所以,从节点越多,读性能越好,但是,写性能越差。想要提升写性能,只能做分片。
主节写入
use test
db.user.insert({name:"zhangsan"})
rs0:PRIMARY> db.user.insert({name:"zhangsan"})
WriteResult({ "nInserted" : 1 })
从节点读取
use test
db.user.find()
rs0:SECONDARY> db.user.find()
Error: error: {
"topologyVersion" : {
"processId" : ObjectId("609a52dde8a40aeac17939f1"),
"counter" : NumberLong(4)
},
"operationTime" : Timestamp(1620728010, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotPrimaryNoSecondaryOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1620728010, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
这个时候,会报错,因为我们使用 mongo 命令连接的服务,需要调用 rs.secondaryOk() 确认自己的身份是从节点。
rs0:SECONDARY> rs.secondaryOk()
再次执行查询,就OK了
rs0:SECONDARY> db.user.find()
{ "_id" : ObjectId("609a586cd8b72cc215348a64"), "name" : "zhangsan" }


