docker 镜像源、docker compose、Dockerfile、docker导出MySQL数据库
docker镜像源
https://zhuanlan.zhihu.com/p/24461370776
亲测可用
https://docker.1ms.run
config/mysql 非必需
[mysqld]
# 服务器端字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 禁用客户端握手自动检测(强制使用服务器字符集)
character-set-client-handshake=1
[client]
# 客户端默认字符集(影响 mysql 命令行等客户端)
default-character-set=utf8mb4
[mysql]
# MySQL 客户端工具字符集
default-character-set=utf8mb4
# 补充:强制连接字符集(针对所有客户端连接)
[mysqld_safe]
default-character-set=utf8mb4
nginx/nginx.conf
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
map $sent_http_content_type $json_charset {
~*application/json ";charset=utf-8";
default "";
}
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;
server_tokens off;
include /etc/nginx/conf.d/*.conf;
}
nginx/conf.d/app.conf
server {
listen 9999 default_server ssl; # 显式指定为 9999 端口的默认服务器(兼容所有 Host)
listen [::]:9999 default_server; # 适配 IPv6(可选)
server_name xxx.xxx.cn localhost; # 同时匹配域名、公网IP、内网IP、localhost
# allow 192.168.0.0/16;
# deny all;
ssl_certificate /etc/nginx/ssl/xxxxxx.crt;
ssl_certificate_key /etc/nginx/ssl/xxxxx.key;
# SSL 安全优化(避免弱加密告警)
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的 TLS 版本
ssl_prefer_server_ciphers on; # 优先使用服务器加密套件
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384; # 强加密套件
ssl_session_timeout 1d; # SSL 会话超时
ssl_session_cache shared:SSL:10m; # 会话缓存(提升性能)
ssl_session_tickets off; # 禁用会话票据(避免安全风险)
# HSTS 配置(强制浏览器后续优先用 HTTPS 访问
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains" always;
#charset koi8-r;
#access_log logs/host.access.log main;
# 关键配置:允许最大请求体大小(根据需求调整,如10MB=10m,20MB=20m)
client_max_body_size 512m;
# 可选:设置请求体缓冲区(优化大文件上传)
client_body_buffer_size 10m;
root /usr/share/nginx/html;
index index.html index.htm;
# 前端路由适配(单页应用必备)
location / {
try_files $uri $uri/ /index.html;
# add_header Cache-Control "no-cache, no-store, must-revalidate"; # 避免缓存导致的访问异常
}
# location / {
# root /usr/share/nginx/html;
# try_files $uri $uri/ /index.html;
# index index.html index.htm;
# }
location /prod-api {
proxy_pass http://127.0.0.1:8888/prod-api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_pass_request_headers on;
proxy_connect_timeout 30s;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: mysql
environment:
# 时区上海
TZ: Asia/Shanghai
LANG: C.UTF-8
MYSQL_ROOT_PASSWORD: xxx
MYSQL_DATABASE: xxx_sys
ports:
- "3306:3306"
volumes:
- ./data/mysql:/var/lib/mysql
- ./config/mysql:/etc/mysql/conf.d
- ./initdb:/docker-entrypoint-initdb.d
restart: always
networks:
- backend
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--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
# --sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
redis:
image: redis:latest
container_name: redis
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "6379:6379"
volumes:
- ./data/redis:/data
restart: always
networks:
- backend
command: redis-server --appendonly yes
backend:
build:
context: .
dockerfile: Dockerfile.backend
container_name: backend
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "9966:9966"
volumes:
- ./backend/logs:/app/logs
- ./backend/uploadPath:/app/uploadPath
depends_on:
mysql:
condition: service_started
redis:
condition: service_started
restart: always
networks:
- backend
nginx:
image: nginx:latest
container_name: nginx
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
- "1443:1443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/logs:/var/log/nginx
- ./frontend-dist:/usr/share/nginx/html
restart: always
networks:
- backend
networks:
backend:
driver: bridge
Dockerfile
#设置jdk版本
FROM eclipse-temurin:8-jre
#设置容器内部工作目录为 /app,后续命令将在该目录下执行操作
WORKDIR /app
#置容器的时区为亚洲/上海,以确保正确的时间设置。
ENV TZ=Asia/Shanghai
ENV LANG=en_US.UTF-8
#将本地的文件添加到容器中的 /java 目录。
COPY backend/admin.jar app.jar
#运行指令
ENTRYPOINT ["java", "-Dfile.encoding=utf-8", "-jar", "app.jar" ]
docker导出表
#!/bin/bash
# 配置参数
CONTAINER_NAME="mysql" # 容器名称或ID
DB_USER="root" # 数据库用户名
DB_PASSWORD="xxxx@" # 数据库密码
DB_NAME="db_name" # 数据库名称
TABLE_NAME="table" # 要导出的表名
OUTPUT_FILE="./${TABLE_NAME}_$(date +%Y%m%d).sql" # 导出文件路径
# 执行导出命令
docker exec $CONTAINER_NAME mysqldump -u$DB_USER -p$DB_PASSWORD --databases $DB_NAME --tables $TABLE_NAME > $OUTPUT_FILE
# 检查导出是否成功
if [ $? -eq 0 ]; then
echo "表 $TABLE_NAME 导出成功,文件保存至:$OUTPUT_FILE"
else
echo "表 $TABLE_NAME 导出失败"
fi
导出整个数据库
#!/bin/bash
# 导出Docker中MySQL数据库的完整SQL(包含结构和数据)
# 配置参数 - 根据实际情况修改
CONTAINER_NAME="mysql" # MySQL容器名称或ID
DB_USER="root" # 数据库用户名
DB_PASSWORD="xxxx@" # 数据库密码
DB_NAME="db_name" # 要导出的数据库名称
OUTPUT_DIR="./backups" # 导出文件保存目录
DATE_SUFFIX=$(date +%Y%m%d_%H%M%S) # 日期后缀,用于文件名
OUTPUT_FILE="${OUTPUT_DIR}/${DB_NAME}_full_${DATE_SUFFIX}.sql" # 完整输出路径
# 创建输出目录(如果不存在)
mkdir -p "${OUTPUT_DIR}"
# 检查容器是否运行
if ! docker inspect "${CONTAINER_NAME}" &> /dev/null; then
echo "错误:容器 ${CONTAINER_NAME} 不存在或未运行!"
exit 1
fi
# 执行导出命令
echo "开始导出数据库 ${DB_NAME} ..."
docker exec "${CONTAINER_NAME}" mysqldump -u"${DB_USER}" -p"${DB_PASSWORD}" \
--databases "${DB_NAME}" \
--default-character-set=utf8mb4 \
--routines \
--events \
--triggers > "${OUTPUT_FILE}"
# 检查导出结果
if [ $? -eq 0 ] && [ -f "${OUTPUT_FILE}" ] && [ -s "${OUTPUT_FILE}" ]; then
echo "数据库导出成功!"
echo "文件保存路径:${OUTPUT_FILE}"
echo "文件大小:$(du -h "${OUTPUT_FILE}" | awk '{print $1}')"
else
echo "错误:数据库导出失败!"
# 清理可能的空文件
if [ -f "${OUTPUT_FILE}" ]; then
rm -f "${OUTPUT_FILE}"
fi
exit 1
fi
偶做前堂客
祝你天天开心
在未知的时间
在未知的地点

浙公网安备 33010602011771号