docker 鏡像源、docker compose、Dockerfile、docker導出MySQL數據庫
docker鏡像源
https://zhuanlan.zhihu.com/p/24461370776
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
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
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 openjdk:8
#設置容器內部工作目錄為 /java,后續命令將在該目錄下執行操作
WORKDIR /app
#置容器的時區為亞洲/上海,以確保正確的時間設置。
ENV TZ=Asia/Shanghaoi
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=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號