Docker中部署與配置MySQL 5.7的詳細(xì)指南
使用 Docker 來管理數(shù)據(jù)庫(kù)非常方便,它可以將數(shù)據(jù)庫(kù)環(huán)境與你的主機(jī)系統(tǒng)完全隔離,實(shí)現(xiàn)快速部署、輕松遷移和清理。本教程將帶你完成所有必要步驟。
第一步:拉取 MySQL 5.7 鏡像
首先,我們需要從 Docker Hub 上獲取官方的 MySQL 5.7 鏡像。打開你的終端或命令行工具,輸入以下命令:
docker pull mysql:5.7
第二步:運(yùn)行 MySQL 容器并設(shè)置密碼 (docker run 方式)
這是最關(guān)鍵的一步。在運(yùn)行容器時(shí),我們必須通過環(huán)境變量來設(shè)置 root 用戶的初始密碼。
docker run --name my-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_strong_password -d mysql:5.7
--name my-mysql: 給你的容器起一個(gè)好記的名字。-p 3306:3306: 將主機(jī)的 3306 端口映射到容器的 3306 端口。-e MYSQL_ROOT_PASSWORD=...: 設(shè)置 root 用戶的密碼。請(qǐng)務(wù)必將 your_strong_password 替換為你自己的強(qiáng)密碼!-d: 在后臺(tái)運(yùn)行容器。
第三步:連接到你的 MySQL 數(shù)據(jù)庫(kù)
你可以通過主機(jī)上的 MySQL 客戶端(如 Navicat, DataGrip)或進(jìn)入容器內(nèi)部進(jìn)行連接。
- 主機(jī)/IP:
127.0.0.1 - 端口:
3306 - 用戶:
root - 密碼: 你設(shè)置的密碼
要進(jìn)入容器內(nèi)部,請(qǐng)使用 docker exec -it my-mysql bash,然后運(yùn)行 mysql -u root -p。
第四步:數(shù)據(jù)持久化(非常重要?。?/h2>
為了防止容器刪除后數(shù)據(jù)丟失,我們需要將數(shù)據(jù)目錄掛載到主機(jī)上。如果你已通過第二步啟動(dòng)了容器,請(qǐng)先用 docker stop my-mysql 和 docker rm my-mysql 將其停止并刪除。
然后使用 -v 參數(shù)重新啟動(dòng):
docker run --name my-mysql \ -p 3306:3306 \ -v /my/custom/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your_strong_password \ -d mysql:5.7
-v /my/custom/mysql/data:/var/lib/mysql: 將主機(jī)上的 /my/custom/mysql/data 目錄(你可以自定義)掛載到容器內(nèi)的 /var/lib/mysql 目錄。
第五步:基本數(shù)據(jù)庫(kù)操作
連接成功后,你可以執(zhí)行標(biāo)準(zhǔn)的 SQL 命令,如 CREATE DATABASE my_app_db; 等。
第六步:使用 Docker Compose 管理 MySQL (推薦)
當(dāng)你的應(yīng)用變得復(fù)雜(例如,一個(gè)網(wǎng)站后端 + 一個(gè)數(shù)據(jù)庫(kù)),使用 docker run 命令來管理多個(gè)容器會(huì)非常繁瑣。Docker Compose 允許你使用一個(gè) YAML 文件來定義和運(yùn)行一個(gè)多容器的 Docker 應(yīng)用。
1. 創(chuàng)建docker-compose.yml文件
在你的項(xiàng)目目錄下,創(chuàng)建一個(gè)名為 docker-compose.yml 的文件,并填入以下內(nèi)容:
# 指定 docker-compose 文件版本
version: '3.7'
# 定義服務(wù)
services:
# 服務(wù)名稱,可以自定義,這里叫 db
db:
# 使用的鏡像
image: mysql:5.7
# 容器名稱
container_name: my-mysql-compose
# 設(shè)置容器在退出時(shí)總是重新啟動(dòng),以保證服務(wù)高可用
restart: always
# 環(huán)境變量,等同于 docker run 的 -e 參數(shù)
environment:
MYSQL_ROOT_PASSWORD: your_strong_password # 在這里設(shè)置你的密碼
# 你也可以在這里設(shè)置其他環(huán)境變量,例如:
# MYSQL_DATABASE: my_app_db
# MYSQL_USER: app_user
# MYSQL_PASSWORD: user_password
# 端口映射,等同于 docker run 的 -p 參數(shù)
ports:
- "3306:3306"
# 數(shù)據(jù)卷掛載,等同于 docker run 的 -v 參數(shù)
volumes:
- ./mysql-data:/var/lib/mysql
# 你也可以在這里定義一個(gè)頂層 volumes,更規(guī)范
# volumes:
# mysql_data:
# 然后在上面的 services.db.volumes 中使用 - mysql_data:/var/lib/mysql
文件解析:
version: 定義了docker-compose.yml文件的語(yǔ)法版本。services: 定義了應(yīng)用包含的所有服務(wù)(容器)。db: 我們?yōu)?MySQL 服務(wù)起的名字。image,container_name,ports,environment: 這些都與docker run命令中的參數(shù)一一對(duì)應(yīng)。restart: always: 這是一個(gè)非常有用的配置,它能確保在 Docker 重啟或容器因故退出后,自動(dòng)重新啟動(dòng)該容器。volumes: 定義數(shù)據(jù)卷掛載。這里的./mysql-data:/var/lib/mysql表示將當(dāng)前目錄下的mysql-data文件夾掛載到容器的/var/lib/mysql。Compose 會(huì)自動(dòng)為你創(chuàng)建這個(gè)文件夾。
2. 啟動(dòng)和停止服務(wù)
現(xiàn)在,你只需要在 docker-compose.yml 文件所在的目錄下,使用簡(jiǎn)單的命令就可以管理你的 MySQL 服務(wù)了。
啟動(dòng)服務(wù)(后臺(tái)運(yùn)行):
docker-compose up -d
查看服務(wù)狀態(tài)和日志:
docker-compose ps docker-compose logs -f db
停止并移除容器、網(wǎng)絡(luò):
docker-compose down
使用 docker-compose down 命令會(huì)停止并刪除容器,但通過 volumes 掛載的數(shù)據(jù)(即 mysql-data 文件夾)會(huì)保留下來,這正是我們想要的。
附錄:數(shù)據(jù)卷掛載 (Volume) vs. 文件拷貝 (COPY)
這是一個(gè)非常重要的概念,理解它們的區(qū)別有助于你正確地管理 Docker 數(shù)據(jù)。
| 特性 | 數(shù)據(jù)卷掛載 (Volume / Mount) | 文件拷貝 (COPY / docker cp) |
|---|---|---|
| 核心機(jī)制 | 實(shí)時(shí)映射/鏈接 | 一次性復(fù)制 |
| 數(shù)據(jù)流向 | 雙向同步。主機(jī)和容器的更改會(huì)立即互相反映。 | 單向。從主機(jī)復(fù)制到容器(或反向),之后兩者獨(dú)立。 |
| 生命周期 | 數(shù)據(jù)獨(dú)立于容器存在。刪除容器后,主機(jī)上的數(shù)據(jù)依然保留。 | 數(shù)據(jù)成為容器/鏡像的一部分。刪除容器,復(fù)制進(jìn)去的數(shù)據(jù)也會(huì)隨之刪除。 |
| 性能 | 通常性能更高,特別是對(duì)于大量讀寫操作(如數(shù)據(jù)庫(kù))。 | 每次復(fù)制都需要 I/O 操作,不適合頻繁更改的數(shù)據(jù)。 |
| 使用場(chǎng)景 | 1. 數(shù)據(jù)庫(kù)文件 2. 日志文件 3. 需要在主機(jī)上直接編輯的配置文件 | 1. 構(gòu)建鏡像時(shí) (COPY指令),將應(yīng)用代碼、靜態(tài)資源打包進(jìn)鏡像。 2. 運(yùn)行時(shí) (docker cp),從容器里取出一個(gè)日志快照,或向容器里傳入一個(gè)臨時(shí)文件。 |
| 命令示例 | docker run -v ... volumes: (in docker-compose) | COPY . /app (in Dockerfile) docker cp file.txt my-container:/tmp |
簡(jiǎn)單類比:
- 數(shù)據(jù)卷掛載就像在你電腦上為某個(gè)文件夾創(chuàng)建了一個(gè)快捷方式。你通過快捷方式修改文件,實(shí)際上修改的是原始文件。刪除快捷方式,原始文件不受影響。
- 文件拷貝就像你把一個(gè)文件復(fù)制粘貼到另一個(gè)地方。之后你有了兩個(gè)獨(dú)立的文件副本,修改其中一個(gè)不會(huì)影響另一個(gè)。
對(duì)于數(shù)據(jù)庫(kù)這種需要持久化且數(shù)據(jù)會(huì)頻繁變動(dòng)的應(yīng)用,永遠(yuǎn)應(yīng)該使用數(shù)據(jù)卷掛載。
到此這篇關(guān)于Docker中部署與配置MySQL 5.7的詳細(xì)指南的文章就介紹到這了,更多相關(guān)Docker部署與配置MySQL 5.7內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何修改docker官方鏡像內(nèi)部?jī)?nèi)容并重新build鏡像
這篇文章主要介紹了如何修改docker官方鏡像內(nèi)部?jī)?nèi)容并重新build鏡像問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Springboot打包docker的多種方法實(shí)現(xiàn)
本文介紹了SpringBoot項(xiàng)目打包為Docker鏡像的多種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-12-12
Dockerfile指令與基本結(jié)構(gòu)的講解
今天小編就為大家分享一篇關(guān)于Dockerfile指令與基本結(jié)構(gòu)的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
Docker?創(chuàng)建centos容器集群并實(shí)現(xiàn)遠(yuǎn)程登錄功能
這篇文章主要介紹了Docker?創(chuàng)建centos容器集群并實(shí)現(xiàn)遠(yuǎn)程登錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
docker啟動(dòng)報(bào)錯(cuò)問題OCI runtime create failed: c
這篇文章主要介紹了docker啟動(dòng)報(bào)錯(cuò)問題OCI runtime create failed: container_linux.go:380: starting container process,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署
本文主要介紹了Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-04-04
Docker?cp命令詳解之如何在Docker容器和主機(jī)之間復(fù)制文件/文件夾
要從Docker容器中復(fù)制文件,可以使用docker?cp命令,下面這篇文章主要給大家介紹了關(guān)于Docker?cp命令詳解之如何在Docker容器和主機(jī)之間復(fù)制文件/文件夾的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
宿主機(jī)無(wú)法訪問docker容器中nginx服務(wù)的問題解決
在虛擬機(jī)中部署Docker并安裝Nginx后,宿主機(jī)無(wú)法訪問容器內(nèi)的Nginx服務(wù),通過檢查端口映射、防火墻狀態(tài)、進(jìn)入容器內(nèi)部啟動(dòng)Nginx以及檢查/修改內(nèi)核的IP轉(zhuǎn)發(fā)設(shè)置,解決了該問題,感興趣的可以了解一下2024-11-11

