1.下载,安装docker,dockercompose,建议手动下载

docker安装教程
快捷安装脚本:

curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun

国内镜像地址 GitHub下载地址

1)将dockercompose 移到 /usr/local/bin 下

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2)验证

docker-compose -v

3)设置国内镜像
sudo vi /etc/docker/daemon.json

daemon.json:
以下配置镜像并非本人的,懒得注册网上找的。

{
    "registry-mirrors": ["https://m30jn00e.mirror.aliyuncs.com"]
}

然后使用systemctl restart docker命令重启Docker即可

docker info 查看是否修改成功

在这里插入图片描述

2.在/opt 目录下新建各个组件的文件夹用于挂载文件
在这里插入图片描述

3.正式编排服务

3.1.mysql

1)建立conf,data文件夹
在这里插入图片描述
2).docker-compose.yml 文件

version: '3.1'
services:
  mysql:
    image: mysql:5.7
    container_name: mysql
    privileged: true #一定要设置为true,不然数据卷可能挂载不了,启动不起
    ports: 
     - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD:  密码 # 自己配置数据库密码
      TZ: Asia/Shanghai
    command:
      --lower_case_table_names=1
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true

    volumes:
      - /opt/mysql/data:/var/lib/mysql
      -/opt/mysql/conf/my.cnf:/etc/mysql/my.cnf
    restart: always

3).在conf 下建立 my.cnf

[mysqld]
user=mysql
log-bin=mysql-bin # 开启Binlog
default-storage-engine=INNODB
default-time_zone = '+8:00'
sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

4)cd到存放docker-compose.yml的文件夹下运行下面命令

docker-compose up -d

3.2 .redis

1)创立如下目录
在这里插入图片描述

2)docker-compose.yml

version: '2'
services:
    redis:
      image: redis:5.0
      container_name: redis
      restart: always
      ports:
        - "6379:6379"
      volumes:
        - /opt/redis/data:/data
        - /opt/redis/conf/redis.conf:/etc/redis/redis.conf
      command: redis-server /etc/redis/redis.conf

3)redis.conf:

redis.conf 详细配置

# 绑定的IP  注释表示任何ip都能访问
#bind 0.0.0.0
# 保护模式 no:关闭 外网可以直接访问redis yes:开启保护模式,开启的情况下,只能通过绑定的ip[bind 127.0.0.1]或者密码验证访问
protected-mode no
# 启动的端口号
port 6379

################################# GENERAL #####################################
# 设置运行方式 默认值:no,需要改为yes,以守护进程的方式运行,docker 运行一定要改为no不然一直会restart
daemonize no
# 配置文件的pid文件,如果以后台方式运行,就需要指定一个pid文件
pidfile /var/run/redis_6379.pid
# 日志级别设置
# 指定日志记录级别
# # Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# # debug 记录很多信息,用于开发和测试
# # varbose 有用的信息,不像debug会记录那么多
# # notice 普通的verbose,常用于生产环境
# # warning 只有非常重要或者严重的信息会记录到日志
loglevel notice
# 日志文件位置名
logfile ''
# redis数据库个数
databases 16
################################ SNAPSHOTTING  ################################
 
# 持久化保存策略配置
# 在900s内,如果至少有1个key进行了修改,就进行持久化操作
save 900 1
# 在300s内,如果至少有10个key进行了修改,就进行持久化操作
save 300 10
# 在60s内,如果至少有10000个key进行了修改,就进行持久化操作
save 60 10000
# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes
# 存储至本地数据库时(持久化到rdb文件)是否压缩数据,默认为yes
rdbcompression yes
# 导入时是否检查
rdbchecksum yes
# 默认持久化保存后的文件名
dbfilename dump.rdb
# rdb文件保存的目录
dir ./

 
#ECURITY ###################################
 
# 设置访问、登录的密码,设置requirepass 您的密码
requirepass jxhyroot


############################## APPEND ONLY MODE ###############################
 
 
# 是否开启aof持久化模式,默认值:no,不开启。redis的默认持久化策略是edb模式
appendonly yes
 
# 持久化文件名称
appendfilename "appendonly.aof"
 
# 持久化策略设置
# appendfsync always # 每次修改都进行持久化操作
# 每秒执行一次持久化操作
appendfsync everysec 
# appendfsync no     # 不执行持久化操作,相当于未开启aof持久化策略
 
# 设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes
no-appendfsync-on-rewrite no
 
# AOF自动重写配置,默认值为100
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
 
# Redis在以AOF方式恢复数据时,对最后一条可能出问题的指令的处理方式,默认值yes
aof-load-truncated yes
 
# 当重写AOF文件时,Redis能够在AOF文件中使用RDB前导码,以便更快地重写和恢复,启用此选项时,重写的AOF文件由两个不同的节组成:#[RDB file][AOF tail],当加载AOF文件时,Redis通过以 “REDIS” 字符串开头的AOF文件识别出此文件是由RDB和AOF组合而成的,Redis
#先加载RDB部分,然后再加载AOF部分,默认值yes
aof-use-rdb-preamble yes



4)运行同mysql

3.3. es

es不能使用root用户运行

#1--创建elasticsearch用户
  useradd elasticsearch;

  #2--赋予用户目录权限
  chown -R elasticsearch:elasticsearch elasticsearch-6.8.6;

  #3--切换至elasticsearch用户
  su elasticsearch
 #4修改最大文件打开数,不然es可能不能运行
 vim /etc/security/limits.conf
#在limits.conf添加以下两行,elasticsearch  表示用户
elasticsearch  hard nofile 65536
elasticsearch soft nofile 65536
#5验证
ulimit -H -n

在这里插入图片描述
#6vim /etc/sysctl.conf 添加

vm.max_map_count=262144

#7立即生效
/sbin/sysctl -p
在这里插入图片描述

1)建立如下目录
在这里插入图片描述

2)

version: '3'
services:
    # search engine
    elasticsearch: 
        image: elasticsearch:7.7.0
        container_name: elasticsearch
        environment:
            - "discovery.type=single-node"
            - http.port=9200
            - http.cors.enabled=true
            - http.cors.allow-origin=*
            - ES_JAVA_OPTS=-Xms512m -Xmx512m
        volumes:
            - /opt/es/data:/usr/share/elasticsearch/data
            - /opt/es/plugins:/usr/share/elasticsearch/plugins
            - /opt/es/logs/:/user/share/elasticsearch/logs
            - /opt/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        restart: always
        ports:
            - 9200:9200
            - 9300:9300
    # elasticsearch browser
    dejavu:
        image: appbaseio/dejavu:3.2.3
        container_name: dejavu
        restart: always
        ports:
            - 1358:1358
        links:
            - elasticsearch

4)配置文件
在这里插入图片描述
elasticsearch.yml

http.host: 0.0.0.0

5)启动同上

3.4.rabbitmq

1)建立如下目录

rabbitmq 宿主机上的log目录需要 chmod 777 - R log 赋权,data目录不要额外赋权容易出现问题。
在这里插入图片描述
在这里插入图片描述

2)docker-compose.yml

myplugins 用于延迟队列插件在容器重新构建后不丢失。

rabbitmq:
    container_name: rabbitmq
    image: rabbitmq:3.9-management
    ports:
      - 15672:15672   #客户端连接端口映射
      - 5672:5672
    restart: always
    privileged: true
    volumes:
        - ./rabbitmq/log/:/var/log/rabbitmq/
        - ./rabbitmq/data/:/var/lib/rabbitmq  #数据卷映射
        -  ./rabbitmq/plugins:/myplugins
    environment:
   	  # 指定自定义插件目录
      RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'
      RABBITMQ_DEFAULT_USER: root
      RABBITMQ_DEFAULT_PASS: root


docker-compose up  运行起来即可在网页 ip:15672 中访问rabbitmq后台了。
账号 RABBITMQ_DEFAULT_USER 配置的值
密码  RABBITMQ_DEFAULT_PASS 配置的值

4)下载对应版本的延时队列插件 rabbitmq_delayed_message_exchange
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
放入**./rabbitmq/plugins**目录下
5)进入容器

docker exec -it rabbitmq /bin/bash

6)启动插件

#启动插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

3)启动同上

3.5.consul

1)docker-compose.yml

version: '2.0'
services:
  consul:
    image: consul:1.6.1
    container_name: 'consul'
    ports:
      - 8500:8500   #换成其他端口外网无法访问,具体原因未知
    restart: always
    volumes:
      - /opt/consul/data:/consul/data
    command: agent -server -ui -datacenter=dc -domain=ci -bootstrap -client=0.0.0.0 

2)启动同上

3.6:nginx

docker-compose:

version: '2'
services:
  nginx:
    container_name: nginx
    image: nginx
    restart: always
    ports:
      - 80:80
      - 90:90
    volumes:
        -  /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
        - /data/nginx/conf.d:/etc/nginx/conf.d
        -  /data/nginx/html/dist:/usr/share/nginx/html
        -  /data/nginx/logs:/data/logs/nginx
    environment:
      - TZ=Asia/Shanghai

conf文件夹下的nginx.conf

user  nginx;
worker_processes  2;

error_log  /data/logs/nginx/error/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format logstash_json  '{'
                              '"@timestamp":"$time_iso8601",'
                              '"remote_addr":"$remote_addr",'
                              '"ip":"$http_x_forwarded_for",'
                              '"remote_user":"$remote_user",'
                              '"request_method":"$request_method",'
                              '"http_referer":"$http_referer",'
                              '"request":"$request_uri",'
                              '"body_bytes_sent":"$body_bytes_sent",'
                              '"status":"$status",'
                              '"request_time":"$request_time",'
                              '"http_user_agent":"$http_user_agent"'
                              '}';

    access_log /data/logs/nginx/access.log  logstash_json;

    client_max_body_size 60M;

    sendfile        on;

    keepalive_timeout  65;

    gzip on;
    gzip_buffers 4 16k;
    gzip_min_length 2k;
    gzip_comp_level 5;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary on;

    server {
        listen 80;

        server_name  ip;

        keepalive_timeout 600;

        root /usr/share/nginx/html/draw;

        location / {
           index  index.html;
      	   try_files $uri $uri/ /index.html;
        }

        location /drawBatchInfo/ {
            proxy_pass http://ip:8080/drawBatchInfo/;
        }

        location /drawDetails/ {
            proxy_pass http://ip:8080/drawDetails/;
        }

        location /enterpriseWechatOperate/ {
            proxy_pass http://ip:8080/enterpriseWechatOperate/;
        }

    }
 
 //server  内容如果很多可以分模块放在单独的conf中用 include /etc/nginx/conf.d/*.conf 引入

   server {
        listen 90;

        server_name  ip;
        

        keepalive_timeout 600;

        rootusr/share/nginx/html/draw-backend;

        location / {
            auth_basic "please input manager name and password";
            auth_basic_user_file /home/nginxpasswd.db;
            index  index.html;
      	    try_files $uri $uri/ /index.html;
        }

        location /drawBatchInfo/ {
            proxy_pass http://ip2:8080/drawBatchInfo/;
        }

        location /drawDetails/ {
            proxy_pass http://ip2:8080/drawDetails/;
        }
    }

}

我们在安装nginx时经常会遇到配置不对或者修改doocker-compose文件的情况,这时需要更新镜像。
1.停止容器 docker-compose stop nginx
2.编译镜像启动容器 docker-compose up --build -d nginx

3.8 安装minio

minio:
      image: minio/minio
      container_name: minio
      restart: always
      ports:
        #暴露API接口
        - 9000:9000
        #暴露Web接口控制台端口
        - 9001:9001
      command: minio server /data --console-address ":9001"

      environment:
        MINIO_ACCESS_KEY: wikiminio    #管理后台用户名
        MINIO_SECRET_KEY: jxhyroot #管理后台密码,最小8个字符
      volumes:
        - /data/wiki/minio:/data           #映射当前目录下的data目录至容器内/data目录
        - ./minio/config:/root/.minio/     #映射配置目录
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐