• 实践Docker部署


    实践Docker部署
    一键Docker安装

    可以使用如下两种命令之一,注意容器内东八区时间配置

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    或者
    curl -sSL https://get.daocloud.io/docker | sh
    常用服务1
    MySQL

    创建并更改配置文件 /home/dockerFiles/mysql/conf/my.cnf
    命令创建并执行该容器
    
    • 1
    • 2

    [mysqld]
    default_authentication_plugin=mysql_native_password

    创建数据库不指定默认UTF8,默认latin-1

    character_set_server=utf8

    大小写不敏感,默认0为敏感

    lower_case_table_names=1

    配置不使用only full group by

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    最大连接数

    max_connections=9999

    docker pull mysql:8.0
    docker run --name mysql
    -p 3306:3306
    -v /home/dockerFiles/mysql/conf:/etc/mysql
    -v /home/dockerFiles/mysql/logs:/var/log/mysql
    -v /home/dockerFiles/mysql/data:/var/lib/mysql-files
    -v /etc/localtime:/etc/localtime
    -e MYSQL_ROOT_PASSWORD=123456
    -d --restart=always mysql:8.0

    ▶ 如果容器被删除,重新运行即可,数据本地储存
    ▶ 如果配置文件配置,在 conf/ 下创建 my.cnf【Windows中为my.ini】
    
    • 1
    • 2

    Redis

    创建 /home/dockerFiles/redis/redis.conf 文件,官网下载
    修改关键配置信息,如下
    命令创建并执行该容器
    
    • 1
    • 2
    • 3

    注释掉这部分,这是限制redis只能本地访问

    bind 127.0.0.1

    默认yes,开启保护模式,限制为本地访问

    protected-mode no

    默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败

    daemonize no

    默认no,改redis持久化(可选)

    appendonly yes

    配置 redis 访问密码

    requirepass {你的访问密码!!!}

    docker pull redis:7.0.0
    docker run --name redis
    -p 6379:6379
    -v /home/dockerFiles/redis/redis.conf:/etc/redis/redis.conf
    -v /home/dockerFiles/redis/data:/data
    -v /etc/localtime:/etc/localtime
    -d --restart=always redis:7.0.0
    redis-server /etc/redis/redis.conf
    –appendonly yes

    ▶ 后两句含义:①指定配置文件启动,默认为无配置文件启动,②启动数据持久化
    ▶ 最后使用版本:6.2.6
    
    • 1
    • 2

    Nginx(单配置)

    创建 /home/dockerFiles/nginx/nginx.conf 文件
    命令创建并执行该容器
    
    • 1
    • 2

    user nginx;
    worker_processes auto;

    error_log /var/log/nginx/error.log notice;
    pid /var/run/nginx.pid;

    events {
    worker_connections 1024;
    }

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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log  /var/log/nginx/access.log  main;
    
    sendfile        on;
    #tcp_nopush     on;
    
    keepalive_timeout  65;
    
    #gzip  on;
    
    ## default
    server {
        listen 80;
        server_name localhost;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
    
    ## SSL + Proxy
    server {
        listen 80;
        if ($server_port !~ 443){
            rewrite ^(/.*)$ https://$host:443$1 permanent;
        }
    
        listen 443 ssl;
        server_name xx.xx.xx;
    
        ssl_certificate      cert/xx.xx.xx_chain.crt;
        ssl_certificate_key  cert/xx.xx.xx_key.key;
    
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
    
        location / {
            client_max_body_size     50m;
            
            proxy_set_header HOST $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            proxy_pass http://172.17.0.1:8090;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    }

    docker pull nginx:1.21.6
    docker run --name nginx
    -p 10080:80 -p 10443:443
    -v /home/dockerFiles/nginx/nginx.conf:/etc/nginx/nginx.conf
    -v /home/dockerFiles/nginx/logs:/var/log/nginx
    -v /home/dockerFiles/nginx/html:/etc/nginx/html
    -v /home/dockerFiles/nginx/cert:/etc/nginx/cert
    -v /etc/localtime:/etc/localtime
    -d --restart=always nginx:1.21.6

    ▶ 做本地 HTTP 反向代理服务,不做 HTTP 服务
    
    • 1

    Nginx(多配置)

    命令创建并执行该容器
    创建 /home/dockerFiles/nginx/conf.d/ 文件夹,此文件夹为主文件 includ 的分支文件 *.conf
    创建默认文件内容如下 default.conf
    
    • 1
    • 2
    • 3

    docker run --name nginx
    -p 10080:80 -p 10443:443
    -v /home/dockerFiles/nginx/conf.d:/etc/nginx/conf.d
    -v /home/dockerFiles/nginx/logs:/var/log/nginx
    -v /home/dockerFiles/nginx/html:/etc/nginx/html
    -v /home/dockerFiles/nginx/cert:/etc/nginx/cert
    -v /etc/localtime:/etc/localtime
    -d --restart=always nginx:1.21.6

    server {
    listen 80;
    server_name localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    • 1
    • 2
    • 3
    • 4

    }

    ▶ 根据实际情况调整 gzip、cert 全域名证书等
    
    • 1

    常用服务2
    MinIO

    命令创建并执行该容器
    
    • 1

    启动命令(有控制台的新版本)

    docker pull minio/minio
    docker run --name minio
    -v /home/dockerFiles/minio/data:/data
    -v /etc/localtime:/etc/localtime
    -p 9000:9000 -p 9001:9001
    -e “MINIO_ROOT_USER=admin”
    -e “MINIO_ROOT_PASSWORD=asdfghjkl”
    -d --restart=always quay.io/minio/minio
    server /data --console-address “:9001”

    启动命令(无控制台的旧版本)

    docker pull minio/minio:
    docker run --name minio
    -p 9000:9000
    -v /home/dockerFiles/minio/data:/data
    -v /home/dockerFiles/minio/config:/root/.minio
    -v /etc/localtime:/etc/localtime
    -e “MINIO_ACCESS_KEY=admin”
    -e “MINIO_SECRET_KEY=asdfghjkl”
    -d --restart=always minio/minio server
    /data
    Gogs

    创建 /home/dockerFiles/gogs 文件夹
    命令创建并执行该容器
    
    • 1
    • 2

    启动命令,再使用 ip:13000 请求就可以执行图像界面安装

    docker pull gogs/gogs:0.12.4
    docker run --name=gogs
    -p 10022:22 -p 13000:3000
    -v /home/dockerFiles/gogs:/data
    -v /etc/localtime:/etc/localtime
    -d --restart=always gogs/gogs
    项目 填写 说明
    数据库 实际情况 全部填写
    应用基本设置 应用名称 -
    域名 公网IP/域名 1.1.1.1
    SSH端口 映射后的端口号 10022
    HTTP端口号 映射前的端口号 3000
    应用URL 访问地址 http://1.1.1.1:13000
    可选设置 禁止用户注册
    启用登录访问限制 可以后期通过挂载的配置文件更改

    git/gogs/custom/conf 目录下的 app.ini文件

    禁止用户注册

    DISABLE_REGISTRATION = true

    启用登录访问限制

    REQUIRE_SIGNIN_VIEW = true

    产品名称(各地方都会显示的)

    BRAND_NAME = 超级研发部门

    定义域名访问:域名、访问域名

    [server]
    DOMAIN = example.org
    EXTERNAL_URL = http://example.org/git/

    ▶ 仓库迁移:由于公司需求,进行了一次仓库迁移。迁移过程出现各种情况,迁移仅需要迁移数据库和本地储存的文件夹到新机器,启动 docker 即可。由于配置了域名访问,当时忘记了,导致每次都 400 500 报错,一直很懵,后来才发现,访问路径有问题,域名配置
    
    • 1

    TDEngine(暂时不建议)

    创建 /home/dockerFiles/taos/taos.cfg 文件
    命令创建并执行该容器
    
    • 1
    • 2

    docker pull tdengine/tdengine:2.2.2.0
    docker run --name tdengine
    -p 16030:6030
    -v /home/dockerFiles/taos/taos.cfg:/etc/taos/taos.cfg
    -v /home/dockerFiles/taos/logs:/var/log/taos
    -v /home/dockerFiles/taos/data:/var/lib/taos
    -v /etc/localtime:/etc/localtime
    -d tdengine/tdengine:2.2.2.0

    1、客户端及服务端版本必须一致
    2、FQDN方式访问,需要更改自身hosts及hostname
    vim /etc/hosts 本地地址指向FQDN
    vim /etc/taos/taos.cfg 配置FQDN地址
    hostnamectl set-hostname FQDN 永久修改hostname为FQDN
    vim /etc/hostname 修改hostname,上一步应该已经修改了
    3、服务的方式启动:systemctl taosd start/service start taosd
    4、启动失败,可以检查目录
    cat /var/log/taos/xxxxx 检查错误日志
    vim /var/lib/taos/dnode/dnodeEps.json 如果hostname错误,修改这里
    5、检查参数:taosd -C
    6、连接服务:taos -h FQDN -P 端口 -u 用户 -p 密码

    注意事项:
    1、客户端、服务端、其他节点必须时区一致
    2、服务端需要同时开放TCP及UDP端口

    ▶ xxxxx
    
    • 1

    其他应用
    NPS

    创建 /home/dockerFiles/nps 文件夹,并放入各配置文件
    
    配置文件点击下载,或前往项目主页下载 conf 文件夹文件
    
    修改关键配置信息,如下【服务端配置文件详情】
    命令创建并执行该容器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果不想被占用80 443可以修改

    http_proxy_port=10080
    https_proxy_port=10443

    配置信息,常修改如下 WEB 登录相关信息

    web_username=xxx
    web_password=xxx

    docker pull ffdfgdfg/nps:v0.26.10
    docker run --name=nps
    –net=host
    -v /home/dockerFiles/nps:/conf
    -v /etc/localtime:/etc/localtime
    -d --restart=always ffdfgdfg/nps:v0.26.10

    ▶ 语法含义:语句 --net=host 用于标明端口使用同系统
    ▶ 端口的开放注意防火墙端口放行 firewall-cmd --zone=public --add-port=40000-40100/tcp --permanent
    ▶ 无法直接访问管理接口8080,可以通过Nginx 进行转发
    ▶ Windows 客户端可以通过 install 注册服务:nps.exe install -server=host:port -vkey=xxxx -type=tcp,然后设置服务–>恢复–>选择重新启动服务和 0 天/分钟
    ▶ 本地临时启动,可以下载 nps.exe,并配置一句命令到 bat 文件即可:npc.exe -server=xxxxxx:8024 -vkey=xxxxxxxx -type=tcp
    
    • 1
    • 2
    • 3
    • 4
    • 5

    Halo

    创建 /home/dockerFiles/halo/application.yaml 文件
    使用数据库,则创建数据库 create database halodb character set utf8mb4 collate utf8mb4_bin;
    命令创建并执行该容器
    
    • 1
    • 2
    • 3

    server:
    port: 8090
    spring:
    datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.17.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    halo:

    Your admin client path is https://your-domain/{admin-path}

    admin-path: admin

    memory or level

    cache: memory

    docker pull halohub/halo:1.5.1
    docker run --name halo
    -p 8090:8090
    -v /home/dockerFiles/halo:/root/.halo
    -v /etc/localtime:/etc/localtime
    -d --restart=always halohub/halo:1.5.1

    ▶ 注意考虑防盗及 Nginx 配置文件上传大小(默认 1MB,主题一般超过这个限制)
    
    • 1

    aliyun-webdav(项目无了)

    获取阿里云盘 RefreshToken,登录网页版,控制台执行代码获取(如下)
    命令创建并执行该容器
    
    • 1
    • 2

    JSON.parse(window.localStorage[“token”]).refresh_token

    docker pull zx5253/webdav-aliyundriver:2022-01-23
    docker run --name aliyun
    -p 18080:8080
    -v /etc/localtime:/etc/localtime
    -v /home/dockerFiles/aliyun/:/etc/aliyun-driver/
    -v /etc/localtime:/etc/localtime
    -e ALIYUNDRIVE_REFRESH_TOKEN=“Your Refresh Token”
    -e ALIYUNDRIVE_AUTH_USER_NAME=“admin”
    -e ALIYUNDRIVE_AUTH_PASSWORD=“admin”
    -e JAVA_OPTS=“-Xmx1g”
    -d zx5253/webdav-aliyundriver:2022-01-23

    ▶ 项目主页:https://github.com/zxbu/webdav-aliyundriver/
    ▶ 使用注意:大文件上传为分割上传,如进行 nginx 代理可能无法文件分割,导致出现BUG【建议不要使用 Nginx】
    
    • 1
    • 2

    Windows
    环境

    Windows 启动 Redis、MySQL、Nginx 的命令如下,执行之前需要先做好文件挂载(文件下载)

    记得添加磁盘 Shared-DockerSetting,默认密码都是 123456

    docker run --name mysql -p 3306:3306 -v D:/DockerFiles/mysql/conf:/etc/mysql -v D:/DockerFiles/mysql/logs:/var/log/mysql -v D:/DockerFiles/mysql/data:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 -d --restart=always mysql:8.0

    docker run --name redis -p 6379:6379 -v D:/DockerFiles/redis/redis.conf:/etc/redis/redis.conf -v D:/DockerFiles/redis/data:/data -d --restart=always redis:7.0.0 redis-server /etc/redis/redis.conf --appendonly yes

    docker run --name nginx -p 80:80 -p 443:443 -v D:/DockerFiles/nginx/nginx.conf:/etc/nginx/nginx.conf -v D:/DockerFiles/nginx/logs:/var/log/nginx -v D:/DockerFiles/nginx/html:/etc/nginx/html -v D:/DockerFiles/nginx/cert:/etc/nginx/cert -d --restart=always nginx:1.21.6

  • 相关阅读:
    从零开始写 Docker(十二)---实现 mydocker stop 停止容器
    让 GPT-4 来修复 Golang “数据竞争”问题 - 每天5分钟玩转 GPT 编程系列(6)
    极简的Http请求client推荐-OkHttp
    引领汽车潮改新风向,看“菱大师”柳州炫技
    C++ 内存管理 - std::allocator - 侯捷
    Java设计原则和设计模式
    Dubbo与SpringCloud和Feign的区别
    http和https请求总结
    网工内推 | 运维工程师,CCNP认证优先,周末双休,多次调薪机会
    【Vue】的基础入门与生命周期----详细简介
  • 原文地址:https://blog.csdn.net/gaochenglong1/article/details/125618489