实践Docker部署

Posted gaochenglong1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实践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
命令创建并执行该容器

[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】

Redis

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

注释掉这部分,这是限制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

nginx(单配置)

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

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;
    

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 服务

Nginx(多配置)

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

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;

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

常用服务2
MinIO

命令创建并执行该容器

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

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 文件夹
命令创建并执行该容器

启动命令,再使用 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 报错,一直很懵,后来才发现,访问路径有问题,域名配置

TDEngine(暂时不建议)

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

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

其他应用
NPS

创建 /home/dockerFiles/nps 文件夹,并放入各配置文件

配置文件点击下载,或前往项目主页下载 conf 文件夹文件

修改关键配置信息,如下【服务端配置文件详情】
命令创建并执行该容器

如果不想被占用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

Halo

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

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,主题一般超过这个限制)

aliyun-webdav(项目无了)

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

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】

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部署的主要内容,如果未能解决你的问题,请参考以下文章

利用Docker/Ansible实现轻量集群服务部署

腾讯Gaia:万台规模的Docker应用实践

实践Docker部署

实践Docker部署

实践Docker部署

面向容器日志的技术实践