Docker 安装

  1. # step 1: 安装必要的一些系统工具
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # Step 2: 添加软件源信息
  4. sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. # Step 3: 更新并安装 Docker-CE
  6. sudo yum -y install docker-ce
  7. # Step 4: 开启Docker服务
  8. sudo service docker start
  9. sudo systemctl enable docker
  10. sudo mkdir -p /etc/docker
  11. sudo tee /etc/docker/daemon.json <<-'EOF'
  12. {
  13. "registry-mirrors": ["https://3nnzwyqy.mirror.aliyuncs.com"]
  14. }
  15. EOF
  16. sudo systemctl daemon-reload
  17. sudo systemctl restart docker

Docker-compose安装

  1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose
  3. ## 验证
  4. docker-compose --version
  5. ## 出现以下内容说明安装成功
  6. docker-compose version 1.25.5, build 8a1c60f6

Windows安装Docker

  1. 下载docker
  2. 双击安装

    关键配置

    image.png
    通用
    image.png
    国内镜像
    国内镜像地址:https://3nnzwyqy.mirror.aliyuncs.com

    Portainer安装

    1. docker volume create portainer_data
    2. docker 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

    设置账号

    image.png
    设置账号和密码

    选择容器

    image.png
    选择容器管理,这里选择Docker
    image.png
    点击Connect连接
    image.png

配置Docker主机

  1. 设置需要加入的主机Docker配置

image.png
勾选(Desktop版本):Expose daemon on tcp://localhost:2375 without TLS

  1. 设置完成后重启

image.png

添加Endpoint

image.png
image.png
添加成功后,就可以管理了。

Docker运行Centos7

  1. # windows
  2. docker 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

常规安装

  • 修改源 ```shell

    创建源

    vi /etc/yum.repos.d/mongodb-org-4.4.repo

黏贴

[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连接

image.png
image.png
出现这个界面,表示连接成功。

主从复制

压缩包安装的基础上,创建多个配置,配置伪集群(同主机,端口号不一样),具体操作如下:
集群规划

  1. 192.168.0.100:27017
  2. 192.168.0.100:27018
  3. 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/conf
    

    27017配置

    vi /opt/soft/mongodb4.4.5/27017/conf/mongod.conf
    
    systemLog:
    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: rs0
    

    27018配置

    vi /opt/soft/mongodb4.4.5/27018/conf/mongod.conf
    
    systemLog:
    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: rs0
    

    27019配置

    vi /opt/soft/mongodb4.4.5/27019/conf/mongod.conf
    
    systemLog:
    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,代表从节点。如图:
image.png
image.png

测试数据

注意,只能在主节点写入,其他节点只能读取,所以,从节点越多,读性能越好,但是,写性能越差。想要提升写性能,只能做分片。

主节写入

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" }

Nacos 安装