docker 部署mysql

http://www.itdecent.cn/p/530d00f97cbf
https://blog.csdn.net/qq_32616177/article/details/80452456
http://www.itdecent.cn/p/6a1b06ab8734
http://www.itdecent.cn/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.itdecent.cn/p/13752117ff97

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容