Docker部署MySQL并實(shí)現(xiàn)客戶(hù)端連接
準(zhǔn)備工作
在docker內(nèi)部署任何應(yīng)用,都需要先下載對(duì)應(yīng)的鏡像;下載鏡像之前,需要先搜索鏡像來(lái)確認(rèn)該鏡像是否存在:
docker search mysql
從列表可以看到,docker已經(jīng)有了mysql的鏡像,名稱(chēng)是“mysql”,接下來(lái)下載鏡像:
docker pull mysql
下載完成后,查看一下本地鏡像:
如果在列表中看到mysql,鏡像下載就已經(jīng)成功了。
容器設(shè)置
在docker中,真正運(yùn)行的是容器,鏡像在我理解中是一種環(huán)境。我們?cè)谥付ǖ溺R像中運(yùn)行某個(gè)容器,然后編輯和配置這個(gè)容器,從而達(dá)到想要的效果。使用以下命令運(yùn)行一個(gè)mysql容器:
docker run -d -it -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 mysql
解釋一下
- -d:代表后臺(tái)運(yùn)行,并返回容器的ID;
- -it:是一個(gè)組合命令,可以使容器在運(yùn)行時(shí)不會(huì)阻塞當(dāng)前操作界面。(另一種寫(xiě)法是 -i -t );
- -p 3306:3306:將宿主機(jī)上的端口映射到容器對(duì)應(yīng)端口;
- -e MYSQL_ROOT_PASSWORD=123456:設(shè)置環(huán)境變量,此處是設(shè)置root用戶(hù)密碼為123456;
- --name mysql01:自定義容器名稱(chēng)為mysql01;
最后的mysql:鏡像的名稱(chēng)。
這行命令的結(jié)果是在mysql鏡像中運(yùn)行了一個(gè)名為mysql01的容器,并且root用戶(hù)的密碼是123456。接下來(lái)看一下容器有沒(méi)有正常運(yùn)行:
看到STATUS那一欄是Up開(kāi)頭就代表啟動(dòng)成功了。
Docker下的Mysql操作
容器創(chuàng)建好以后,可以使用exec命令進(jìn)入容器去操作:
docker exec -it mysql01 bash
進(jìn)入容器以后,使用剛才設(shè)置好的賬戶(hù)密碼登陸mysql:
登陸成功后,就可以按照mysql的命令去操作表庫(kù)了。因?yàn)閙ysql和dockers容器的退出指令都是exit,所以如果要回到根目錄,先輸入exit退出mysql,再輸入exit退出容器。
客戶(hù)端連接Docker容器下的Mysql
上面已經(jīng)實(shí)現(xiàn)了docker內(nèi)操作mysql,但全命令行的操作很費(fèi)時(shí),這顯然不符合高效開(kāi)發(fā)同學(xué)們的要求,所以現(xiàn)在有個(gè)簡(jiǎn)單的方法,就是使用客戶(hù)端連接docker容器下的mysql。
我們知道docker是運(yùn)行在虛擬機(jī)環(huán)境下的,虛擬機(jī)有單獨(dú)的IP地址和端口,只要找到docker所在虛擬機(jī)的IP即可使用客戶(hù)端連接到docker容器下的mysql。但是直接去連肯定會(huì)失敗,為什么??jī)蓚€(gè)原因:
- 1、因?yàn)閐ocker容器也擁有獨(dú)立的端口和IP,所以直接訪(fǎng)問(wèn)docker所在虛擬機(jī)的IP是訪(fǎng)問(wèn)不到的,因此需要將docker容器的端口映射到docker所在主機(jī)的端口上。
- 2、因?yàn)閙ysql默認(rèn)不允許遠(yuǎn)程連接。
端口映射在前面已經(jīng)做好了,所以現(xiàn)在只需要修改mysql允許所有連接即可。登陸docker容器的mysql,輸入以下命令:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
成功以后,另外打開(kāi)一個(gè)cmd,輸入ipconfig列出所有IP:
紅框圈起來(lái)的就是虛擬機(jī)在用的IP了,使用這個(gè)IP和剛才設(shè)置的賬戶(hù)密碼就可以用客戶(hù)端連接了:
(如果本機(jī)沒(méi)有MySql,直接用localhost也是可以成功登陸n(yōu)avicat的。)
測(cè)試
通過(guò)navicat創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)docker_mysql:
然后切換到docker環(huán)境,進(jìn)入mysql01容器,查看所有數(shù)據(jù)庫(kù):
使用客戶(hù)端創(chuàng)建的數(shù)據(jù)庫(kù)在容器內(nèi)也可以查到,測(cè)試成功。
需要注意的一點(diǎn)是,docker一但停止運(yùn)行,關(guān)聯(lián)的虛擬機(jī)也會(huì)被釋放,所有數(shù)據(jù)都會(huì)隨之消失。資料卷可以解決這個(gè)問(wèn)題,但是本文篇幅有限,后面幾篇文章會(huì)詳述這個(gè)問(wèn)題。
到此這篇關(guān)于Docker部署MySQL并實(shí)現(xiàn)客戶(hù)端連接的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Node.js查詢(xún)MySQL并返回結(jié)果集給客戶(hù)端的全過(guò)程
- docker?mysql關(guān)于配置文件、連接客戶(hù)端、/docker-entrypoint-initdb.d/目錄的使用
- MySQL客戶(hù)端軟件(DBeaver)連接報(bào)錯(cuò)解決方案
- MySQL 如何連接對(duì)應(yīng)的客戶(hù)端進(jìn)程
- 完美解決mysql客戶(hù)端授權(quán)后連接失敗的問(wèn)題
- MySQL 客戶(hù)端不輸入用戶(hù)名和密碼直接連接數(shù)據(jù)庫(kù)的2個(gè)方法
- MySQL如何查詢(xún)客戶(hù)端連接情況
相關(guān)文章
如何在mac上用docker對(duì)Oracle進(jìn)行部署使用
這篇文章主要介紹了如何在mac上用docker對(duì)Oracle進(jìn)行部署使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03解決docker run hello-world遇到錯(cuò)誤消息-error during&n
這篇文章主要介紹了解決docker run hello-world遇到錯(cuò)誤消息-error during conne問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Docker數(shù)據(jù)存儲(chǔ)之tmpfs mounts詳解
今天小編就為大家分享一篇關(guān)于Docker數(shù)據(jù)存儲(chǔ)之tmpfs mounts詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02docker安裝nginx之后無(wú)法訪(fǎng)問(wèn)的解決
這篇文章主要介紹了docker安裝nginx之后無(wú)法訪(fǎng)問(wèn)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09docker 查看進(jìn)程, 內(nèi)存, cup消耗的情況
這篇文章主要介紹了docker 查看進(jìn)程, 內(nèi)存, cup消耗的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03使用Docker構(gòu)建企業(yè)級(jí)自定義鏡像的方法
這篇文章主要介紹了使用Docker構(gòu)建企業(yè)級(jí)自定義鏡像的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05