docker-compose安裝MySQL8.0.39全過程
好的,這是一個使用 Docker Compose 安裝 MySQL 8.0.39 的詳細指南,包含數(shù)據(jù)持久化、自定義配置和基本安全設置。
1. 創(chuàng)建項目目錄
首先,創(chuàng)建一個獨立的目錄來存放所有相關文件,避免與其他項目混淆。
mkdir mysql-docker cd mysql-docker
2. 創(chuàng)建docker-compose.yml文件
這是核心配置文件,定義了MySQL服務、卷、端口映射等。
version: '3.8'
services:
mysql:
image: mysql:8.0.39 # 指定精確版本
container_name: mysql-8.0.39-container # 自定義容器名,便于管理
restart: unless-stopped # 總是重啟,除非手動停止
environment:
MYSQL_ROOT_PASSWORD: your_strong_root_password # !??!務必修改?。。?
MYSQL_DATABASE: my_app_db # 可選:容器啟動時創(chuàng)建的數(shù)據(jù)庫
MYSQL_USER: my_app_user # 可選:創(chuàng)建普通用戶
MYSQL_PASSWORD: your_strong_user_password # ?。?!務必修改!?。?
TZ: Asia/Shanghai # 可選:設置容器時區(qū)
ports:
- "3306:3306" # 將宿主機的3306端口映射到容器的3306端口
volumes:
- mysql_data:/var/lib/mysql # 持久化數(shù)據(jù)
- ./conf/my.cnf:/etc/mysql/conf.d/custom.cnf # 掛載自定義配置文件
- ./logs:/var/log/mysql # 可選:掛載日志目錄
networks:
- mysql-network # 加入自定義網(wǎng)絡(更安全)
volumes:
mysql_data: # 聲明一個命名卷,Docker會自動管理其位置
networks:
mysql-network: # 聲明一個自定義網(wǎng)絡
driver: bridge
3. (可選) 創(chuàng)建自定義配置文件
創(chuàng)建 conf 目錄并放入你的 my.cnf 文件,用于覆蓋默認的MySQL設置。
mkdir -p conf
編輯 conf/my.cnf 文件:
[mysqld] # 服務器字符集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 默認認證插件 (MySQL 8.0+ 默認使用 caching_sha2_password) default_authentication_plugin=mysql_native_password # 自定義其他參數(shù),例如最大連接數(shù)、緩沖區(qū)大小等 max_connections=200 innodb_buffer_pool_size=256M [client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4
4. 啟動 MySQL 容器
在包含 docker-compose.yml 文件的目錄下,運行以下命令來構建并啟動服務:
# 以后臺模式啟動 (-d 或 --detach) docker-compose up -d # 或者,如果你想在前臺啟動并查看日志,用于調(diào)試 # docker-compose up # 使用 Ctrl+C 停止后,容器也會停止
5. 管理及常用命令
容器啟動后,你可以使用以下命令進行管理:
# 查看容器運行狀態(tài) docker-compose ps # 查看MySQL容器的實時日志 docker-compose logs -f mysql # 停止服務(數(shù)據(jù)會保留在卷中) docker-compose down # 停止并刪除數(shù)據(jù)卷(警告:這會清除所有數(shù)據(jù)?。? # docker-compose down -v # 進入MySQL容器內(nèi)部的bash終端 docker-compose exec mysql bash # 使用MySQL命令行客戶端直接連接(推薦方式) # 方式一:在宿主機上連接(因為映射了端口) mysql -h 127.0.0.1 -P 3306 -u root -p # 然后輸入在yml文件中設置的 MYSQL_ROOT_PASSWORD # 方式二:通過exec在容器內(nèi)執(zhí)行mysql命令(無需網(wǎng)絡和密碼,安全快捷) docker-compose exec mysql mysql -u root -p
關鍵配置解釋
image: mysql:8.0.39:
- 明確指定版本,避免因拉取
latest標簽而意外升級。 - Docker Hub 會緩存此版本,如果本地沒有會自動拉取。
volumes:
mysql_data:/var/lib/mysql:這是最重要的部分,它將數(shù)據(jù)庫文件存儲在名為mysql_data的 Docker 管理卷中,即使容器被刪除,數(shù)據(jù)也不會丟失。./conf/my.cnf:/etc/mysql/conf.d/custom.cnf:將本地配置文件掛載到容器的配置目錄。MySQL會自動加載/etc/mysql/conf.d目錄下所有以.cnf結尾的文件。
environment:
MYSQL_ROOT_PASSWORD:必須設置,這是root用戶的密碼。MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD:可選,用于在啟動時自動創(chuàng)建數(shù)據(jù)庫和用戶。
ports:
"3306:3306":將容器服務的3306端口暴露給宿主機。- 如果宿主機3306端口已被占用,可以改為
"3307:3306"(用宿主機3307端口映射容器3306端口)。
networks:
- 使用自定義網(wǎng)絡
mysql-network可以提高安全性。 - 如果其他服務(如Web應用)也在同一個Compose文件中定義,它們可以通過服務名(
mysql)直接通信,而無需向宿主機暴露端口。
安全建議
- 強烈修改默認密碼:示例中的
your_strong_root_password一定要換成復雜且唯一的密碼。 - 謹慎暴露端口:如果MySQL只被其他Docker容器訪問,可以不映射端口到宿主機(刪除
ports部分),讓服務間通過Docker網(wǎng)絡內(nèi)部通信,更安全。 - 定期備份:雖然數(shù)據(jù)在卷中,但仍需定期備份Docker卷(
mysql_data)。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
docker-compose基于MySQL8部署項目的實現(xiàn)
這篇文章主要介紹了docker-compose基于MySQL8部署項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
Docker入門與進階(基礎+實戰(zhàn)+進階+Compose+Swarm)超詳細版
本文詳細介紹了Docker的基礎概念、安裝配置、鏡像與容器操作,包括數(shù)據(jù)卷、Dockerfile構建、網(wǎng)絡管理、Docker Compose單機部署和Swarm集群部署,感興趣的朋友跟隨小編一起看看吧2026-04-04

