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 用戶的密碼。請(qǐng)務(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)部,請(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ù)庫操作
連接成功后,你可以執(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
文件所在的目錄下,使用簡(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ù)庫)。 | 每次復(fù)制都需要 I/O 操作,不適合頻繁更改的數(shù)據(jù)。 |
使用場(chǎng)景 | 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 |
簡(jiǎn)單類比:
- 數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(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-01Docker部署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-07Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式
docker打包springboot鏡像,并不是簡(jiǎn)單的將springboot項(xiàng)目的jar包上傳容器里,然后啟動(dòng),這個(gè)操作很簡(jiǎn)單,但是如果我每次要查看容器中的日志就需要每次都進(jìn)入容器內(nèi)部進(jìn)行查看,這就非常麻煩了,所以本文介紹了Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式,需要的朋友可以參考下2024-03-03Docker中部署Redis集群與部署微服務(wù)項(xiàng)目的詳細(xì)過程
這篇文章主要介紹了Docker中部署Redis集群與部署微服務(wù)項(xiàng)目,主要包括使用docker部署的好處以及Docker與Kubernetes對(duì)比分析,需要的朋友可以參考下2022-06-06docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
這篇文章主要為大家介紹了docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04