docker安裝與啟動MYSQL
1 docker安裝MYSQL
到官網(wǎng)上查找想要的MYSQL鏡像

docker pull mysql:5.7

可以看到已經(jīng)有MySQL5.7這個(gè)鏡像了
2 啟動MYSQL鏡像
2.1 啟動
docker run -v /d_data/mysqldb/conf:/etc/mysql/conf.d -v /d_data/mysqldb/logs:/logs -v /d_data/mysqldb/data:/var/lib/mysql -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD='root' --name mysql mysql:5.7
解釋
-v 映射數(shù)據(jù)卷 其中/etc/mysql/conf.d是docker mysql存儲配置文件的地方, /logs是docker mysql存儲日志的地方, /var/lib/mysql是數(shù)據(jù)庫存儲數(shù)據(jù)庫信息包括數(shù)據(jù)庫表,數(shù)據(jù)庫、視圖之類的數(shù)據(jù)的地方
-d 后臺運(yùn)行
-p 做端口映射,因?yàn)槲业奶摂M機(jī)還要另外一個(gè)mysql所以要用3307端口來映射。
-e 啟動時(shí)執(zhí)行的命令,設(shè)置root的密碼。要啟動數(shù)據(jù)庫必須給root一個(gè)密碼,隨機(jī)密碼也行。如果沒有密碼是無法啟動mysql的。
連接

地址填寫虛擬機(jī)的地址
2.2 配置
另外,要給mysql添加其他的配置,例如設(shè)置字符集否則默認(rèn)字符集是拉丁文的。(可以從網(wǎng)上拷貝一份配置文件)
到對應(yīng)的文件夾下面創(chuàng)建,因?yàn)槲业氖窃?/p>



重啟


3 數(shù)據(jù)卷相關(guān)內(nèi)容
3.1 什么是容器數(shù)據(jù)卷?
數(shù)據(jù)卷存在于宿主機(jī)中,獨(dú)立于容器,和容器的生命周期是分離的 數(shù)據(jù)卷可以目錄也可以是文件 容器可以利用數(shù)據(jù)卷與宿主機(jī)進(jìn)行數(shù)據(jù)共享,實(shí)現(xiàn)了容器間的數(shù)據(jù)共享和交換
3.2 容器數(shù)據(jù)卷的特點(diǎn)
1、容器啟動時(shí)初始化數(shù)據(jù)卷,如果容器使用的鏡像包含了數(shù)據(jù),這些數(shù)據(jù)也會拷貝到數(shù)據(jù)卷中 2、對 數(shù)據(jù)卷 的修改會立馬生效 3、數(shù)據(jù)卷的變化不會影響鏡像的更新 4、數(shù)據(jù)卷是宿主機(jī)中的一個(gè)目錄
3.3 數(shù)據(jù)卷的運(yùn)用場景
1、在多個(gè)運(yùn)行容器之間共享數(shù)據(jù)。如果您沒有明確創(chuàng)建它,則會在第一次將其裝入容器時(shí)創(chuàng)建卷。當(dāng)該容器停止或被移除時(shí),該卷仍然存在。多個(gè)容器可以同時(shí)安裝相同的卷,無論是讀寫還是只讀。僅當(dāng)您明確刪除卷時(shí)才會刪除卷
2、當(dāng)您想要將容器的數(shù)據(jù)存儲在遠(yuǎn)程主機(jī)或云提供商上而不是本地時(shí)
3、當(dāng)您需要備份,還原或?qū)?shù)據(jù)從一臺Docker主機(jī)遷移到另一臺時(shí),卷是更好的選擇。您可以停止容器,然后備份卷的目錄
3.4 數(shù)據(jù)卷的相關(guān)命令
3.4.1 創(chuàng)建容器數(shù)據(jù)卷
docker volume create 數(shù)據(jù)卷名稱
注意
容器卷默認(rèn)保存在宿主機(jī)的/var/lib/docker/volumes路徑下
3.4.2 創(chuàng)建容器時(shí)指定數(shù)據(jù)卷
docker run -it
--mount source=數(shù)據(jù)卷名稱,target=容器中的掛載路徑,type=volume
--name 容器別名 鏡像名稱
參數(shù)介紹:
source 指定宿主機(jī)中數(shù)據(jù)卷的名稱 target 指定容器中對應(yīng)的掛載路徑 type 指定為數(shù)據(jù)卷的方式掛載,還可以選擇bind、tmpfs,默認(rèn)為volume
注意:
1、如果掛載一個(gè)空的數(shù)據(jù)卷到容器中的一個(gè)非空目錄中,那么這個(gè)目錄下的文件會被復(fù)制到數(shù)據(jù)卷中 2、如果掛載一個(gè)非空的數(shù)據(jù)卷到容器中的一個(gè)目錄中,那么容器中的目錄中會顯示數(shù)據(jù)卷中的數(shù)據(jù)。如果原來容器中的目錄中有數(shù)據(jù),那么這些原始數(shù)據(jù)會被隱藏掉
3.4.3 直接在創(chuàng)建容器時(shí)指定數(shù)據(jù)卷
docker run ... [-v 宿主機(jī)數(shù)據(jù)卷:docker容器路徑:ro] []...
注意:
1、通過這種方式可以任意指定宿主機(jī)的數(shù)據(jù)卷位置 2、如果隨意指定數(shù)據(jù)卷的位置,容器中對應(yīng)路徑的文件就不會復(fù)制到宿主機(jī)的數(shù)據(jù)卷中,而是全部被清空 3、:ro表示以只讀的方式掛載容器卷,不寫再表示以讀寫的方式掛載 4、可以通過-v連續(xù)設(shè)置多個(gè)容器卷路徑
總結(jié):
數(shù)據(jù)卷未顯示聲明路徑(默認(rèn)在/var/lib/docker/volumes下)
1、數(shù)據(jù)卷為空,對應(yīng)的容器路徑有數(shù)據(jù),則容器中的數(shù)據(jù)直接同步到數(shù)據(jù)卷中 2、數(shù)據(jù)卷有數(shù)據(jù),對應(yīng)的容器路徑不存在,則啟動容器時(shí),自動創(chuàng)建該容器路徑,并且將數(shù)據(jù)卷的數(shù)據(jù)同步到該路徑下 3、數(shù)據(jù)卷有數(shù)據(jù),對應(yīng)的容器路徑也有數(shù)據(jù)(數(shù)據(jù)不同),會把數(shù)據(jù)卷中的數(shù)據(jù)同步到容器路徑中,容器路徑中的文件會被隱藏(宿主機(jī) 覆蓋 容器)
如果宿主機(jī)的數(shù)據(jù)卷為空,容器覆蓋宿主機(jī),如果數(shù)據(jù)卷不為空,則宿主機(jī)覆蓋容器
數(shù)據(jù)卷聲明指定路徑
1、數(shù)據(jù)卷為空,對應(yīng)的容器路徑有數(shù)據(jù),則直接將容器路徑中的數(shù)據(jù)隱藏 2、數(shù)據(jù)卷有數(shù)據(jù),對應(yīng)的容器路徑不存在,則啟動容器時(shí),自動創(chuàng)建該容器路徑,并且將數(shù)據(jù)卷的數(shù)據(jù)同步到該路徑下 3、數(shù)據(jù)卷有數(shù)據(jù),對應(yīng)的容器路徑也有數(shù)據(jù)(數(shù)據(jù)不同),會把數(shù)據(jù)卷中的數(shù)據(jù)同步到容器路徑中,容器路徑中的文件會被隱藏(宿主機(jī) 覆蓋 容器)
無論情況如何,永遠(yuǎn)是宿主機(jī) 覆蓋 容器路徑
數(shù)據(jù)卷是文件的情況
1、數(shù)據(jù)卷指定一個(gè)文件,對應(yīng)的容器文件不存在,直接將數(shù)據(jù)卷文件覆蓋到容器中 2、數(shù)據(jù)卷指定的文件不存在,容器的文件存在,啟動容器會報(bào)錯(cuò)
如果需要綁定文件,則必須保證宿主機(jī)的數(shù)據(jù)卷中文件必須存在