MySQL在Docker內(nèi)的訪(fǎng)問(wèn)優(yōu)化
配置MySQL容器網(wǎng)絡(luò)
在Docker中,容器的網(wǎng)絡(luò)默認(rèn)是隔離的。如果要連接MySQL容器,必須將其網(wǎng)絡(luò)設(shè)置為可訪(fǎng)問(wèn)的。我們可以使用--network選項(xiàng)創(chuàng)建一個(gè)新的網(wǎng)絡(luò)環(huán)境。
docker network create mynetwork
將MySQL容器加入到mynetwork中
docker run --name mysql-container --network mynetwork …
這樣,我們就可以在同一網(wǎng)絡(luò)環(huán)境中的其他容器中直接使用“mysql-container”作為MySQL的主機(jī)名(host)。
使用外置數(shù)據(jù)卷
使用外置數(shù)據(jù)卷可將MySQL數(shù)據(jù)文件存儲(chǔ)在宿主機(jī)上,而不是存儲(chǔ)在容器中。這樣具有以下好處:
容器掛掉后,數(shù)據(jù)庫(kù)不會(huì)丟失;
容器內(nèi)的數(shù)據(jù)可以方便的備份;
外部直接按照數(shù)據(jù)文件進(jìn)行恢復(fù)。
我們可以在Dockerfile中添加VOLUME指令,將MySQL數(shù)據(jù)存儲(chǔ)在外置數(shù)據(jù)卷中。
Dockerfile:
VOLUME /var/lib/mysql
然后將外置數(shù)據(jù)卷和MySQL容器綁定在一起:
docker run -v /host/data/mysql:/var/lib/mysql --name mysql-container …
這樣我們就可以將數(shù)據(jù)文件掛載在宿主機(jī)的“/host/data/mysql”目錄下,實(shí)現(xiàn)數(shù)據(jù)文件的備份和恢復(fù)等操作。
使用最新的版本
MySQL每個(gè)版本可能會(huì)出現(xiàn)一些已知的Bug。要避免這些問(wèn)題,我們應(yīng)該使用MySQL的最新版本。可以在MySQL官方網(wǎng)站中下載最新穩(wěn)定版。
然后在Dockerfile中創(chuàng)建容器時(shí)直接從源中拉取MySQL最新版:
FROM mysql/mysql-server:8.0
這樣我們就可以保證使用MySQL最新版。
限制內(nèi)存資源使用
限制MySQL容器的內(nèi)存資源使用可防止它占用過(guò)多內(nèi)存,避免其他服務(wù)受到影響。可以在docker-compose中使用“mem_limit”來(lái)指定MySQL容器的內(nèi)存限制。
docker-compose.yml:
services:
mysql:
mem_limit: 512m
這樣,MySQL容器最多只會(huì)使用512MB的內(nèi)存資源。