目錄
- 連接docker中MySQL容器
- docker中MySQL容器啟動
- 一 下拉鏡像
- 二 運行鏡像
連接docker中MySQL容器
我以gin web項目為例,演示在容器中運行時mysql的相關(guān)配置。
1. 登入MySQL修改訪問權(quán)限并刷新權(quán)限。
update user set host = '%' where user = 'root';
grant all on *.* to admin@'%' identified by 'root' with grant option;
允許所有用戶拿著密碼“root”去訪問。
flush privileges;
刷新權(quán)限
2. 修改密碼認(rèn)證配置。
由于docker上MySQL的版本是8.0.19
而我本地MySQL是5.7兩者的認(rèn)證方式不一樣(前者是caching_sha2_password,后者是my_native_password)因此我們對它進行修改。
我修改了所有用戶的密碼認(rèn)證配置后才起效。
3. 至此,我已經(jīng)可以用本地的數(shù)據(jù)庫圖形化界面連接docker中的MySQL容器。
但是在關(guān)聯(lián)運行g(shù)in_blog_docker_scrach時數(shù)據(jù)庫一直拒絕連接:
最后,我查閱資料得知:
在go應(yīng)用中使用localhost或則使用127.0.0.1地址都是無法找msyql服務(wù)的,因為該地址被解析成了當(dāng)前go應(yīng)用docker容器中的ip地址;
修改應(yīng)用配置中的ip地址:
再次運行容器:
無錯發(fā)生。
大功告成!
docker中MySQL容器啟動
一 下拉鏡像
docker pull mysql:5.7
docker images查看鏡像
二 運行鏡像
1. 運行鏡像,如果不掛載路徑運行執(zhí)行以下就可以
docker run -id --name mysql ?-p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
- -i:表示創(chuàng)建并運行容器
- -d:表示后臺運行
- -p:映射端口,相對于訪問宿主機ip:3306 就是訪問的mysql容器
- -e:配置mysql,這里設(shè)置了一下root密碼,當(dāng)然也可以也又其它設(shè)置選項,在這沒用到
- mysql:5.7:鏡像名和版本,如果這個鏡像不存在會自動下載鏡像
2. 掛載路徑
掛載路徑的好處一是方便我們修改和查看,比如修改mysql配置文件my.cnf,不掛載的話需要進入容器然后在修改,my.cnf掛載出來后可以直接在宿主機查看,日志文件也是同樣的,第二個好處是防止暑假丟失,如果容器不小心停止刪除了數(shù)據(jù)庫中的所有數(shù)據(jù)就丟失了。
docker run ?-id --name mysql? -v /docker/mysql/log/:/var/log ? -v /docker/mysql/data/:/var/lib/mysql ? -v /docker/mysql/my.cnf:/etc/my.cnf? -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
用了三個-v,分別掛載出來日志 mysql數(shù)據(jù)和my.cnf,-v 宿主機文件 容器中文件
直接運行上面命令可能啟動失敗,需要在宿主機中先創(chuàng)建一個my.cnf,即在宿主機docker/mysql中床新建一個文件my.cnf文件內(nèi)容為:
[mysqld] # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M skip-host-cache skip-name-resolve datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock secure-file-priv=/var/lib/mysql-files user=mysql ? # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 ? #log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [client] socket=/var/run/mysqld/mysqld.sock ? !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
docker ps查看運行的容器
使用可視化工具連接mysql測試
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持。