docker-compose安裝MySQL8.0.39全過程
好的,這是一個(gè)使用 Docker Compose 安裝 MySQL 8.0.39 的詳細(xì)指南,包含數(shù)據(jù)持久化、自定義配置和基本安全設(shè)置。
1. 創(chuàng)建項(xiàng)目目錄
首先,創(chuàng)建一個(gè)獨(dú)立的目錄來(lái)存放所有相關(guān)文件,避免與其他項(xiàng)目混淆。
mkdir mysql-docker cd mysql-docker
2. 創(chuàng)建docker-compose.yml文件
這是核心配置文件,定義了MySQL服務(wù)、卷、端口映射等。
version: '3.8'
services:
mysql:
image: mysql:8.0.39 # 指定精確版本
container_name: mysql-8.0.39-container # 自定義容器名,便于管理
restart: unless-stopped # 總是重啟,除非手動(dòng)停止
environment:
MYSQL_ROOT_PASSWORD: your_strong_root_password # !??!務(wù)必修改!?。?
MYSQL_DATABASE: my_app_db # 可選:容器啟動(dòng)時(shí)創(chuàng)建的數(shù)據(jù)庫(kù)
MYSQL_USER: my_app_user # 可選:創(chuàng)建普通用戶
MYSQL_PASSWORD: your_strong_user_password # ?。?!務(wù)必修改!!!
TZ: Asia/Shanghai # 可選:設(shè)置容器時(shí)區(qū)
ports:
- "3306:3306" # 將宿主機(jī)的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)絡(luò)(更安全)
volumes:
mysql_data: # 聲明一個(gè)命名卷,Docker會(huì)自動(dòng)管理其位置
networks:
mysql-network: # 聲明一個(gè)自定義網(wǎng)絡(luò)
driver: bridge
3. (可選) 創(chuàng)建自定義配置文件
創(chuàng)建 conf 目錄并放入你的 my.cnf 文件,用于覆蓋默認(rèn)的MySQL設(shè)置。
mkdir -p conf
編輯 conf/my.cnf 文件:
[mysqld] # 服務(wù)器字符集 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 默認(rèn)認(rèn)證插件 (MySQL 8.0+ 默認(rèn)使用 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. 啟動(dòng) MySQL 容器
在包含 docker-compose.yml 文件的目錄下,運(yùn)行以下命令來(lái)構(gòu)建并啟動(dòng)服務(wù):
# 以后臺(tái)模式啟動(dòng) (-d 或 --detach) docker-compose up -d # 或者,如果你想在前臺(tái)啟動(dòng)并查看日志,用于調(diào)試 # docker-compose up # 使用 Ctrl+C 停止后,容器也會(huì)停止
5. 管理及常用命令
容器啟動(dòng)后,你可以使用以下命令進(jìn)行管理:
# 查看容器運(yùn)行狀態(tài) docker-compose ps # 查看MySQL容器的實(shí)時(shí)日志 docker-compose logs -f mysql # 停止服務(wù)(數(shù)據(jù)會(huì)保留在卷中) docker-compose down # 停止并刪除數(shù)據(jù)卷(警告:這會(huì)清除所有數(shù)據(jù)?。? # docker-compose down -v # 進(jìn)入MySQL容器內(nèi)部的bash終端 docker-compose exec mysql bash # 使用MySQL命令行客戶端直接連接(推薦方式) # 方式一:在宿主機(jī)上連接(因?yàn)橛成淞硕丝冢? mysql -h 127.0.0.1 -P 3306 -u root -p # 然后輸入在yml文件中設(shè)置的 MYSQL_ROOT_PASSWORD # 方式二:通過exec在容器內(nèi)執(zhí)行mysql命令(無(wú)需網(wǎng)絡(luò)和密碼,安全快捷) docker-compose exec mysql mysql -u root -p
關(guān)鍵配置解釋
image: mysql:8.0.39:
- 明確指定版本,避免因拉取
latest標(biāo)簽而意外升級(jí)。 - Docker Hub 會(huì)緩存此版本,如果本地沒有會(huì)自動(dòng)拉取。
volumes:
mysql_data:/var/lib/mysql:這是最重要的部分,它將數(shù)據(jù)庫(kù)文件存儲(chǔ)在名為mysql_data的 Docker 管理卷中,即使容器被刪除,數(shù)據(jù)也不會(huì)丟失。./conf/my.cnf:/etc/mysql/conf.d/custom.cnf:將本地配置文件掛載到容器的配置目錄。MySQL會(huì)自動(dòng)加載/etc/mysql/conf.d目錄下所有以.cnf結(jié)尾的文件。
environment:
MYSQL_ROOT_PASSWORD:必須設(shè)置,這是root用戶的密碼。MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD:可選,用于在啟動(dòng)時(shí)自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)和用戶。
ports:
"3306:3306":將容器服務(wù)的3306端口暴露給宿主機(jī)。- 如果宿主機(jī)3306端口已被占用,可以改為
"3307:3306"(用宿主機(jī)3307端口映射容器3306端口)。
networks:
- 使用自定義網(wǎng)絡(luò)
mysql-network可以提高安全性。 - 如果其他服務(wù)(如Web應(yīng)用)也在同一個(gè)Compose文件中定義,它們可以通過服務(wù)名(
mysql)直接通信,而無(wú)需向宿主機(jī)暴露端口。
安全建議
- 強(qiáng)烈修改默認(rèn)密碼:示例中的
your_strong_root_password一定要換成復(fù)雜且唯一的密碼。 - 謹(jǐn)慎暴露端口:如果MySQL只被其他Docker容器訪問,可以不映射端口到宿主機(jī)(刪除
ports部分),讓服務(wù)間通過Docker網(wǎng)絡(luò)內(nèi)部通信,更安全。 - 定期備份:雖然數(shù)據(jù)在卷中,但仍需定期備份Docker卷(
mysql_data)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
多云環(huán)境下的Docker部署策略實(shí)現(xiàn)
在多云環(huán)境下,Docker容器技術(shù)為應(yīng)用程序的部署提供了高度的靈活性和可擴(kuò)展性,本文就來(lái)介紹一下多云環(huán)境下的Docker部署策略實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
被棄用的 Docker 會(huì)被 Podman 取代嗎
Docker 是一種以容器化的方式打包、分發(fā)和部署應(yīng)用程序的方式。自 2013 年 3 月 13 日初始版本發(fā)布以來(lái),Docker 已成為容器業(yè)界的事實(shí)標(biāo)準(zhǔn)。而Kubernetes 是一款由 Google 開發(fā)的開源容器編排系統(tǒng)2020-12-12
檢查當(dāng)前Docker使用的默認(rèn)運(yùn)行時(shí)(default runtime)的三種方法
本文介紹了三種檢查當(dāng)前Docker使用的默認(rèn)運(yùn)行時(shí)的方法,方法一:查看Docker配置文件;方法二:使用Dockerinfo命令輸出;方法三:檢查特定容器的運(yùn)行時(shí),文中詳細(xì)的給大家介紹了這三種方法,需要的朋友可以參考下2025-05-05
docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2
docke roverlay2是Docker中的存儲(chǔ)驅(qū)動(dòng)之一,用于管理鏡像和容器層的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于docker的overlay2中存的都是什么及如何清理/var/lib/docker/overlay2的相關(guān)資料,需要的朋友可以參考下2024-04-04
Docker 數(shù)據(jù)持久化的三種方式小結(jié)
本文主要介紹了Docker 數(shù)據(jù)持久化的三種方式小結(jié),主要包括volume、bind mounts、tmpfs mounts這三種方式,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
使用docker的python基礎(chǔ)鏡像時(shí)要指定patch版本原理
這篇文章主要為大家介紹了使用docker的python基礎(chǔ)鏡像時(shí)要指定patch版本原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法
本文主要介紹了Docker容器搭建運(yùn)行python的深度學(xué)習(xí)環(huán)境的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10

