Docker中部署與配置MySQL 5.7的詳細(xì)指南
使用 Docker 來管理數(shù)據(jù)庫非常方便,它可以將數(shù)據(jù)庫環(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 用戶的密碼。請務(wù)必將 your_strong_password 替換為你自己的強(qiáng)密碼!-d: 在后臺(tái)運(yùn)行容器。
第三步:連接到你的 MySQL 數(shù)據(jù)庫
你可以通過主機(jī)上的 MySQL 客戶端(如 Navicat, DataGrip)或進(jìn)入容器內(nèi)部進(jìn)行連接。
- 主機(jī)/IP:
127.0.0.1 - 端口:
3306 - 用戶:
root - 密碼: 你設(shè)置的密碼
要進(jìn)入容器內(nèi)部,請使用 docker exec -it my-mysql bash,然后運(yùn)行 mysql -u root -p。
第四步:數(shù)據(jù)持久化(非常重要?。?/h2>
為了防止容器刪除后數(shù)據(jù)丟失,我們需要將數(shù)據(jù)目錄掛載到主機(jī)上。如果你已通過第二步啟動(dò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ù)庫操作
連接成功后,你可以執(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ù)庫),使用 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文件的語法版本。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 文件所在的目錄下,使用簡單的命令就可以管理你的 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ù)庫)。 | 每次復(fù)制都需要 I/O 操作,不適合頻繁更改的數(shù)據(jù)。 |
| 使用場景 | 1. 數(shù)據(jù)庫文件 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 |
簡單類比:
- 數(shù)據(jù)卷掛載就像在你電腦上為某個(gè)文件夾創(chuàng)建了一個(gè)快捷方式。你通過快捷方式修改文件,實(shí)際上修改的是原始文件。刪除快捷方式,原始文件不受影響。
- 文件拷貝就像你把一個(gè)文件復(fù)制粘貼到另一個(gè)地方。之后你有了兩個(gè)獨(dú)立的文件副本,修改其中一個(gè)不會(huì)影響另一個(gè)。
對(duì)于數(shù)據(jù)庫這種需要持久化且數(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署postgresql的方法實(shí)現(xiàn)
本文主要介紹了Docker部署postgresql的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)
這篇文章主要介紹了Docker部署Kafka以及Spring Kafka實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
在云服務(wù)器上基于docker安裝jenkins的實(shí)現(xiàn)步驟
本文主要介紹了在云服務(wù)器上基于docker安裝jenkins的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式
docker打包springboot鏡像,并不是簡單的將springboot項(xiàng)目的jar包上傳容器里,然后啟動(dòng),這個(gè)操作很簡單,但是如果我每次要查看容器中的日志就需要每次都進(jìn)入容器內(nèi)部進(jìn)行查看,這就非常麻煩了,所以本文介紹了Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式,需要的朋友可以參考下2024-03-03
Docker中部署Redis集群與部署微服務(wù)項(xiàng)目的詳細(xì)過程
這篇文章主要介紹了Docker中部署Redis集群與部署微服務(wù)項(xiàng)目,主要包括使用docker部署的好處以及Docker與Kubernetes對(duì)比分析,需要的朋友可以參考下2022-06-06
docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
這篇文章主要為大家介紹了docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04

