使用Docker快速搭建Mysql,並進行數據卷分離


1、搜索鏡像

docker search mysql

 

2、下載mysql的官方鏡像

docker pull mysql

 

3、查看自己的鏡像

[root@localhost mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              e6bc04e5d2ab        4 weeks ago         442MB
mysql               latest              5195076672a7        7 weeks ago         371MB
hello-world         latest              f2a91732366c        5 months ago        1.85kB

 

4、啟動MySQL容器

docker run -d --name myMysql -v /data/mysql:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.6

d : --detach,后台運行。
--name : 為你的鏡像創建一個別名,該別名用於更好操作。
-p : 映射端口,一般我們會將默認端口進行更改,避免與本機的mysql端口沖突,如果你宿主機有mysql,請更改端口,如 -p 33060:3306。
-e : 環境變量。為mysql的root用戶設置密碼為123456。
-v : 指定數據卷,意思就是將mysql容器中的/var/lib/mysql(這個是數據庫所有數據信息文件)映射到宿主機/data/mysql里面。

 

5、進入到myMysql容器中

docker exec -ti myMysql /bin/bash

-i : --interactive,交互界面。
-t : --tty,偽終端界面。 

 

6、登錄到mysql服務器中

mysql -uroot -p -h127.0.0.1

 

7、查看myMysql容器的IP

[root@localhost mysql]# docker inspect myMysql | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

 

8、-v參數

這時,其實數據卷已經進行了分離,還記得啟動容器時我們攜帶的“-v”參數么。
# 在宿主機執行

ls /data/mysql

刪除容器,看數據卷是否還在

docker rm myMysql

依然還在,這說明如果我們創建新的mysql容器,那么只需要指定數據卷就可以了。

 

9、細節處還需深入研究

docker -v /data/mysql:/var/lib/mysql

以上這條命令到底是咋運行的。
第一次,啟動mysql容器時,宿主機的/data/mysql是空的。是docker容器中的/var/lib/mysql會自動映射到宿主機/data/mysql,讓宿主機有了對應的文件信息。
第二次,我刪除了docker容器,這時宿主機的/data/mysql是有文件的。然后我創建了mysql容器,並設置對應的映射關系。這時,宿主機的/data/mysql文件映射到了容器中,保持數據一致。
這就產生疑問了?到底是以哪一個為主要的數據呢?

總結 基本上可以了解為這樣一個流程,當指定-v參數時,在啟動容器時會首先檢查宿主機中是否有數據文件:

如果有的話,則判斷是否是數據庫文件,如果符合數據庫文件系統的文件目錄。那么則會使用;如果不符合數據庫文件系統的文件目錄,那么則會無法啟動,直接報錯。 如果沒有的話則會初始化數據庫文件,生成一個干凈的數據庫系統並進行宿主機和docker容器間的互通。

 

10、docker相關命令

docker ps  默認顯示運行的容器
docker ps -a 顯示所有容器
docker stop myMysql  停止容器
docker rm -fv myMysql 刪除容器,連卷也一起刪除
docker logs myMysql 查容器啟動失敗日志
docker inspect mysql 查鏡像詳情
docker pull mysql:5.6

 

11、注意事項

不這樣操作 容器運行不起來

在使用-v選項映射目錄時,宿主機需關閉SElinux:

# setenforce 0

或者給數據目錄添加相關selinux權限:

chcon -Rt svirt_sandbox_file_t /data/mysql

最后自己發現還都不行,需要把自己手動創建的目錄/data/mysql刪除了,再成功啟動容器 

補充,還有可能是用了最新版本的MySQL8.0 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM