常见环境部署
这里整理一些我个人常用环境的部署命令,随用随补节省部署时间,命令涉及到:
绑定默认左侧物理机右侧容器
# 个人习惯将容器都放在网桥上,在创建容器之前应该先创建网桥,启动容器时使用--network指定网桥
$ docker network create mynet
$ docker run --network mynet ....
容器可能面对时区问题,可在创建容器时通过环境变量指定时区,如果无效就使用物理机的时区文件覆盖掉容器内的时区文件
# 环境变量指定时区
$ docker run -e TZ=Asia/Shanghai ...
# CentOS发行版的命令
$ docker run -v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro ...
# Ubuntu发行版的命令
......
# 开发相关
# Java
启用jar包的命令
docker run --name practice \
--restart always \
-e TZ=Asia/Shanghai \
-p 8080:8080 \
-v ./practice:/app \
-d openjdk:17 java -jar /app/practice.jar
# MySQL
代码块中使用的是MySQL5版本,MySQL8同理,经测试8.0.36-debian
按照这个流程同样可以成功
# 下载镜像
$ docker pull mysql:5.7.41
# 初始化目录
$ mkdir -p ./mysql
# 裸启动
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d mysql:5.7.41
# 拷贝文件
$ docker cp mysql:/etc/mysql ./mysql/conf
$ docker cp mysql:/var/lib/mysql ./mysql/data
# 删除后重启容器
$ docker rm -f mysql
$ docker run --name mysql \
--restart always \
-e TZ=Asia/Shanghai \
-p 3306:3306 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/logs:/var/log/mysql \
-v ./mysql/conf:/etc/mysql \
-d mysql:5.7.41
这里补充一个可能会用到的操作,例如我使用的是国外的服务器,国内访问延迟较高备份较慢,因为Navicat是依次获取每张表的表结构和数据,延迟较高时会影响效率,可以直接在远程服务器中使用dump
命令将数据库转存为SQL文件,然后使用FPT工具将SQL文件下载下来即可,这里记录一下操作命令
# 进入到MySQL容器中
$ docker exec -it mysql /bin/bash
# 将指定库导出SQL到指定位置,推荐`/var/lib/mysql/`目录下,因为与宿主机做了目录映射可以直接下载
$ mysqldump -u [用户名] -p [数据库名] > /var/lib/mysql/[文件名].sql
# Redis
Redis镜像中并没有提供配置文件,要想自定义配置需要手动下载配置文件 (opens new window),然后上传到服务器
# 在执行命令前请先将配置文件上传至服务器
# 注意修改配置文件中的bind与requirepass
# 设置bind为0.0.0.0为允许外网访问,requirepass为访问密码
# 下载镜像
$ docker pull redis:5.0.10
# 初始化目录,将redis.conf配置文件上传至./redis/conf/redis.conf
$ mkdir -p ./redis/conf
# 启动容器
$ docker run --name redis \
--restart always \
-e TZ=Asia/Shanghai \
-p 6379:6379 \
-v ./redis/data:/data \
-v ./redis/conf:/opt/conf \
-d redis:5.0.10 redis-server /opt/conf/redis.conf
# Nginx
# 下载镜像
$ docker pull nginx:1.22.0
# 初始化目录
$ mkdir -p ./nginx/ssl
# 裸启动
$ docker run -d --name nginx nginx:1.22.0
# 拷贝文件
$ docker cp nginx:/etc/nginx ./nginx/conf
$ docker cp nginx:/usr/share/nginx ./nginx/webs
# 删除裸启的容器
$ docker rm -f nginx
# 正式启动容器
$ docker run --name nginx \
--restart always \
-e TZ=Asia/Shanghai \
-p 80:80 \
-p 443:443 \
-v ./nginx/conf/:/etc/nginx \
-v ./nginx/webs/:/usr/share/nginx \
-v ./nginx/logs/:/var/log/nginx \
-v ./nginx/ssl/:/ssl \
-d nginx:1.22.0
# Nacos
单机模式鉴权启动
# 下载镜像
$ docker pull nacos-server:v2.2.3
# 初始化目录
$ mkdir -p ./nacos
# 裸启容器
$ docker run --name nacos \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-p 8848:8848 \
-d nacos/nacos-server:v2.2.3
# 拷贝配置文件
$ docker cp nacos:/home/nacos/conf ./nacos/conf
$ docker cp nacos:/home/nacos/data ./nacos/data
# 删除裸启的容器
$ docker rm -f nacos
# 正式启动容器,访问地址为http://ip:8848/nacos
$ docker run --name nacos \
--restart always \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-p 8848:8848 \
-p 9848:9848 \
-v ./nacos/conf:/home/nacos/conf \
-v ./nacos/data:/home/nacos/data \
-v ./nacos/logs:/home/nacos/logs \
-d nacos/nacos-server:v2.2.3
Nacos启动后默认没有权限校验,所有人可访问操作,可以编辑conf
目录下的application.properties
配置文件,在底部添加配置即可实现鉴权,具体参考官方文档:https://nacos.io/zh-cn/docs/v2/guide/user/auth.html
# 开启Nacos鉴权
nacos.core.auth.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.plugin.nacos.token.secret.key=Token密钥要求Base64编码后长度超过32位
nacos.core.auth.server.identity.key=
nacos.core.auth.server.identity.value=
# RabbitMQ
# RabbitMQ配置文件参考地址
https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbit/docs/rabbitmq.conf.example
# 裸启容器
$ docker run --name rabbitmq --hostname rabbitmq -d rabbitmq:3.8.34-management
# 拷贝配置文件
$ mkdir -p ./rabbitmq
$ docker cp rabbitmq:/etc/rabbitmq ./rabbitmq/conf
$ docker cp rabbitmq:/var/lib/rabbitmq ./rabbitmq/data
# 删除裸启的容器
$ docker rm -f rabbitmq
# 启动RabbitMQ
$ docker run --name rabbitmq \
--hostname rabbitmq \
--restart always \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=guest \
-p 5672:5672 \
-p 15672:15672 \
-v ./rabbitmq/conf:/etc/rabbitmq \
-v ./rabbitmq/data:/var/lib/rabbitmq \
-d rabbitmq:3.8.34-management
# 启用管理地址,镜像以management结尾表示自带管理地址,如果没有管理地址可执行该命令启动插件
$ docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management
端口 | 作用 |
---|---|
15672 | 管理界面UI使用的端口 |
15671 | 管理监听端口 |
5672,5671 | AMQP 0-9-1 without and with TLS client 端通信口 |
4369 | ( epmd ) 代表 Erlang 端口映射守护进程,erlang 发现口 |
25672 | ( Erlang distribution ) server 间内部通信口 |
# Minio
高版本 Minio 将管理地址和 API 请求地址分开了,需要在运行容器时指定端口号才能映射,console-address 为管理地址,address 为 API 请求地址
# 下载镜像
$ docker pull minio/minio:latest
# 启动容器
$ docker run --name minio \
--restart always \
-e TZ=Asia/Shanghai \
-e MINIO_ACCESS_KEY=admin \
-e MINIO_SECRET_KEY=123456789 \
-p 9000:9000 \
-p 9001:9001 \
-v ./minio/data:/data \
-v ./minio/conf:/root/.minio \
-d minio/minio:latest server /data --console-address ":9000" --address ":9001"
# ElasticSearch
# 下载镜像
$ docker pull elasticsearch:7.12.1
# 初始化目录
$ mkdir ./es
# 裸启动
$ docker run --name es \
-e TZ=Asia/Shanghai \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-d elasticsearch:7.12.1
# 拷贝文件
$ docker cp es:/usr/share/elasticsearch/data ./es
$ docker cp es:/usr/share/elasticsearch/plugins ./es
# 删除后重启容器
$ docker rm -f es
$ docker run --name es \
--restart always \
-e TZ=Asia/Shanghai \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-p 9200:9200 \
-p 9300:9300 \
-v ./es/data:/usr/share/elasticsearch/data \
-v ./es/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.12.1
Kibana
$ docker run --name kibana \
--restart always \
-e TZ=Asia/Shanghai \
-e ELASTICSEARCH_HOSTS=http://192.168.1.10:9200 \
-p 5601:5601 \
-d kibana:7.12.1
# PHP-FPM
# 下载镜像
$ docker pull php:7.2-fpm
# 初始化目录
$ mkdir -p ./php
# 裸启容器
$ docker run -d --name php php:7.2-fpm
# 拷贝配置文件
$ docker cp php:/usr/local/etc/php ./php/conf
# 删除裸启的容器
$ docker rm -f php
# 正式启动容器
$ docker run -d --name php \
--restart always \
-e TZ=Asia/Shanghai \
-p 9000:9000 \
-v ./nginx/webs:/var/www/html \
-v ./php/conf:/usr/local/etc/php \
php:7.2-fpm
# Typecho
# 下载镜像
$ docker pull 80x86/typecho:v1.2.1-rc.2-amd64
# 裸启容器
$ docker run --name typecho -d 80x86/typecho:v1.2.1-rc.2-amd64
# 拷贝数据,data对应typecho的usr,app对应typecho的根目录,因为镜像内对usr做了软连接,所以这里需要分别映射出来
$ docker cp typecho:/data ./typecho/data
$ docker cp typecho:/app ./typecho/app
# 删除裸启的容器
$ docker rm -f typecho
# 启动容器
$ docker run --name typecho \
--restart always \
-e PHP_TZ=Asia/Shanghai \
-e PHP_MAX_EXECUTION_TIME=600 \
-p 80:80 \
-v ./typecho/app:/app \
-v ./typecho/data:/data \
-d 80x86/typecho:v1.2.1-rc.2-amd64
# 青龙面板
# 下载镜像(新版本的青龙面板配置文件以及数据库目录发生改变,注意版本)
$ docker pull whyour/qinglong:2.16.5
# 启动容器(2.16.5及以前的版本有效)
$ docker run --name ql \
--restart always \
-p 5700:5700 \
-v ./ql:/ql/data \
-dit whyour/qinglong:2.16.5
# Baiduwp
# 下载镜像
$ docker pull yuantuo666/baiduwp-php:3.0.2
# 启动容器
$ docker run --name baiduwp \
--restart always \
-p 80:80 \
-d yuantuo666/baiduwp-php:3.0.2
# ChatGPT-Next-Web
# 下载镜像
$ docker pull yidadaa/chatgpt-next-web
# 启动容器
$ docker run --name chatgpt-web \
--restart always \
-e OPENAI_API_KEY=OpenAI-KEY \
-e CODE=Password \
-p 3000:3000 \
-d yidadaa/chatgpt-next-web
# PandoraNext
该镜像内部做了限制,需要访问 DockerHub (opens new window) 或者 Github (opens new window) 文档按照要求创建配置文件并写入license_id
# 下载镜像
$ docker pull pengzhile/pandora-next
# 初始化目录
$ mkdir -p ./pandora
# 启动容器
$ docker run --name pandora \
--restart always \
-p 8181:8181 \
-v ./data:/data \
-v ./sessions:/root/.cache/PandoraNext \
-d pengzhile/pandora-next
配置文件示例
{
"bind": "0.0.0.0:8181",
"tls": {
"enabled": false,
"cert_file": "",
"key_file": ""
},
"timeout": 600,
"proxy_url": "",
"license_id": "",
"public_share": false,
"site_password": "",
"setup_password": "",
"server_tokens": true,
"proxy_api_prefix": "",
"isolated_conv_title": "*",
"captcha": {
"provider": "",
"site_key": "",
"site_secret": "",
"site_login": false,
"setup_login": false,
"oai_username": false,
"oai_password": false
},
"whitelist": null
}
# EasyImage
# v2.8.3-r4
$ docker run --name easyimage \
--restart always \
-e TZ=Asia/Shanghai \
-e PUID=1000 \
-e PGID=1000 \
-e DEBUG=false \
-v ./easyimage/config:/app/web/config \
-v ./easyimage/i:/app/web/i \
-itd ddsderek/easyimage:latest
# Halo
docker run --name halo \
-p 8090:8090 \
-v ./halo:/root/.halo2 \
-it -d halohub/halo:2.11 --spring.r2dbc.url=r2dbc:pool:mysql://192.168.1.10:3306/halo --spring.sql.init.platform=mysql --spring.r2dbc.username=root --spring.r2dbc.password=mysql --halo.external-url=http://192.168.1.10:8090
上次更新: 2024-06-19, 23:33:40