http://www.reibang.com/p/530d00f97cbf
https://blog.csdn.net/qq_32616177/article/details/80452456
http://www.reibang.com/p/6a1b06ab8734
http://www.reibang.com/p/33f7a3333118
1、加上-v參數(shù)
$ docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql
還可以指定配置文件
docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql
這樣较剃,即可修改配置文件渐苏,還能把數(shù)據(jù)存在本地目錄,一舉兩得骄呼,-v 參數(shù)可以多次使用共苛,每次映射一個目錄,通過這種方式蜓萄,很容易進行配置隅茎。。
docker run -d -p 3306:3306 -v /home/walter/softwares/tutum-docker-mysql/data:/var/lib/mysql -e MYSQL_PASS="mypass" -t 53cb780844a3
Docker MySQL 把數(shù)據(jù)存儲在本地目錄绕德,很簡單患膛,只需要映射本地目錄到容器即可
1、加上-v參數(shù)
$ docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql
還可以指定配置文件
docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql
這樣耻蛇,即可修改配置文件踪蹬,還能把數(shù)據(jù)存在本地目錄,一舉兩得臣咖,-v 參數(shù)可以多次使用跃捣,每次映射一個目錄,通過這種方式夺蛇,很容易進行配置疚漆。。
docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mysql -v /data/mysql/my.cnf:/etc/mysql/my.cnf -v /data/mysql/data:/var/lib/mysql -p 3306:3306 mysql --lower_case_table_names=1
解釋如下:
-d 容器在后臺運行
-e MYSQL_ROOT_PASSWORD=admin 配置mysql root的密碼
-v 對mysql 的配置文件和數(shù)據(jù)存儲路徑進行映射到宿主機刁赦,對數(shù)據(jù)持久化
-p 端口映射
--name 定義容器的名稱
--lower_case_table_names=1 定義數(shù)據(jù)庫不區(qū)分表名大小寫
通過上一節(jié)的學(xué)習(xí)娶聘,我們知道了如何部署一個不帶數(shù)據(jù)庫的靜態(tài)nginx頁面;但一般的web應(yīng)用中甚脉,還需要部署mysql數(shù)據(jù)庫丸升,本節(jié)我們將學(xué)習(xí)如何使用容器部署mysql數(shù)據(jù)庫。
01
mysql獨立部署
我們可以將mysql與web應(yīng)用部署在同一個容器內(nèi)牺氨,但更一般的用法是將mysql獨立部署一個容器狡耻。
獲取mysql5.6.36官方鏡像
(mysql5.7變動較大墩剖,推薦使用5.6)
docker pull mysql:5.6.36
我們可以進入mysql:5.6.36容器進行mysql遠程登錄的相關(guān)設(shè)置。
運行mysql:5.6.36容器,-p映射為宿主機3306端口
docker run -it -p 3306:3306 mysql:5.6.36 /bin/bash
開啟mysql進程
root@0950cf64b8e6:/# service mysql start
進入mysql
root@0950cf64b8e6:/# mysql
修改root用戶密碼為123456
mysql> update user set password=password("123456") where user='root';
允許遠程用戶訪問(一般應(yīng)當設(shè)置為白名單IP夷狰,此處為所有IP)
mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
驗證是否設(shè)置成功岭皂,host中含有%
mysql> select host, user from user;
保存退出
mysql> flush privileges;
mysql> exit;
停止容器后,保存當前鏡像為webmysql
root@0950cf64b8e6:/# docker stop 0950cf64b8e6
root@0950cf64b8e6:/# docker commit 0950 webmysql
以上設(shè)置完成后沼头,我們在宿主機上安裝mysql客戶端爷绘,就可以通過宿主機的IP進行mysql數(shù)據(jù)庫的使用了。
02
mysql數(shù)據(jù)持久化
對于容器數(shù)據(jù)庫來說瘫证,一旦容器停止揉阎,容器中的數(shù)據(jù)就會消失,不利于數(shù)據(jù)存儲背捌,雖然我們可以通過定時commit的方法來保存容器中的數(shù)據(jù)毙籽,但我們有更好的實現(xiàn)方法。
使用-v共享存儲
mysql默認的數(shù)據(jù)存儲目錄為/var/lib/mysql,我們可以通過宿主機共享容器/var/lib/mysql目錄的方式來實現(xiàn)數(shù)據(jù)的持久化毡庆。
帶-v參數(shù)啟動webmysql
docker run -it -v /var/mysql/data:/var/lib/mysql -p 3306:3306 mysql:5.6.36 /bin/bash
鏡像啟動后坑赡,我們啟動mysql服務(wù),發(fā)現(xiàn)mysql無法啟動么抗。查找官方文檔毅否,因SElinux服務(wù)開啟,需要在宿主機執(zhí)行如下命令:
chcon -Rt svirt_sandbox_file_t /var/mysql/data
或者關(guān)閉SElinux也可以蝇刀。
臨時關(guān)閉
setenforce 0
修改配置文件螟加,需要重啟
vim /etc/selinux/config
SELINUX=disabled
上述配置完成后,仍然無法啟動mysql吞琐,結(jié)合mysql日志查看可能是文件權(quán)限的問題捆探,在宿主機上給予共享文件夾對應(yīng)的權(quán)限:
賦予本地存儲對應(yīng)的權(quán)限,單讀寫權(quán)限不行
chmod 777 -R /var/mysql/data/
設(shè)置完成后站粟,容器可以啟動mysql服務(wù)黍图。
在宿主機查看/var/mysql/data/文件夾下,發(fā)現(xiàn)已經(jīng)將/var/lib/mysql/文件夾內(nèi)容同步奴烙,使用stop關(guān)閉容器后助被,文件夾數(shù)據(jù)不會消失。再次啟動容器mysql后切诀,數(shù)據(jù)庫內(nèi)容仍然存在揩环。數(shù)據(jù)持久化設(shè)置完成。
03
連接mysql容器
3.1 mycentos容器使用link連接
啟動mysql容器
docker run --name=mysql_server -it -v /var/mysql/data:/var/lib/mysql -p 3306:3306 webmysql /bin/bash
--name=mysql_server指定了容器運行的name
啟動mycentos容器
docker run --link=mysql_server:db -it -p 80:80 mycentos /bin/bash
--link=mysql_server:db幅虑,指定了能夠與mysql數(shù)據(jù)庫容器繼續(xù)連接丰滑,db指定了一個連接的別名
在mycentos上安裝mysql客戶端后就可以使用命令行登錄mysql:
mysql -h db -uroot -p123456
MySQL [(none)]>
在web應(yīng)用的配置文件中,更改數(shù)據(jù)庫的配置即可:
host: db
username: root
password: 123456
3.2 宿主機使用IP連接
部分情況下翘单,我們可能需要使用宿主機連接登錄mysql容器吨枉,這樣顯然不能使用link的方法。
容器與宿主機之間是通過bridge進行的網(wǎng)絡(luò)連接哄芜,我們可以通過使用內(nèi)網(wǎng)IP地址連接容器mysql貌亭。
查看webmysql容器的IP地址,e79dd0dc4f1f為其docker ps顯示的ID
docker inspect --format '{ { .NetworkSettings.IPAddress } }' e79dd0dc4f1f
172.17.0.a
其地址為172.17.0.a认臊,我們可以使用該IP地址登錄容器mysql
mysql -h 172.17.0.a -uroot -p123456
MySQL [(none)]>
值得注意的是圃庭,這種使用IP的方法也適用于容器與容器之間的mysql的連接,容器連接宿主機mysql失晴。
04
更多主題探討
通過這幾節(jié)的學(xué)習(xí)剧腻,我們能夠使用容器部署網(wǎng)站與數(shù)據(jù)庫,然而對于docker技術(shù)而言涂屁,這只是其中最基礎(chǔ)的使用书在。以下是與web部署強相關(guān)的主題:
1、通過commit拆又,我們能夠保存對容器的更改存儲在宿主機儒旬,但當宿主機出現(xiàn)問題時,就需要進行使用鏡像恢復(fù)帖族。這涉及到如何備份與恢復(fù)images鏡像栈源。
2、我們創(chuàng)建容器mycentos與webmysql竖般,都是通過手動的方式甚垦,而docker更一般的用法是使用Dockerfile,我們可以嘗試這種更簡便的使用方法涣雕。
05
參考資料
1艰亮、MySQL 官方 Docker 鏡像的使用,https://www.cnblogs.com/cfrost/p/6241892.html
2胞谭、自己學(xué)Docker:8.容器的持久化,http://blog.csdn.net/mungo/article/details/51472130
3垃杖、mysql,https://hub.docker.com/_/mysql/
4、查看 SELinux狀態(tài)及關(guān)閉SELinux,http://blog.51cto.com/bguncle/957315
5丈屹、docker容器鏈接宿主機mysql调俘,https://segmentfault.com/a/1190000008701796
6、Docker中容器的備份旺垒、恢復(fù)和遷移彩库,http://www.linuxidc.com/Linux/2015-08/121184.htm
7、Docker使用link建立容器之間的連接先蒋,http://www.reibang.com/p/13752117ff97