idea破解 監聽地址
阿新 • • 發佈:2022-05-17
容器資料卷
一、什麼是容器資料卷
我們知道,docker是把應用和環境一起打包成一個映象釋出出去。如果我們的資料都在容器中,那麼我們把容器刪除之後,資料就會丟失。所以我們想要資料持久化。假如我們搞了個MySQL容器,如果一不小心將MySQL容器刪除了,就會很危險。所以我們需要MySQL的資料可以儲存在本地。於是基於上述兩種需求,我們就出現了容器資料卷的技術,容器之間有一個數據共享的技術。docker容器產生的資料同步到本地。說白了就是目錄的掛載,將我們容器的目錄掛載到Linux上面。
二、使用資料卷
方式一:直接使用命令來掛載 -v
命令
docker run -it -v 宿主機目錄:容器內目錄
測試
docker run -it -v /home/ceshi:/home centos /bin/bash
docker ps # 檢視容器id
docker inspect 87e46c7dd4df
測試檔案的同步
再來測試
停止容器,在宿主機修改檔案,就算容器內關閉了,也會同步修改
修改宿主機上的檔案
再次啟動centos映象檢視檔案是否改變
好處:我們以後修改只需要在本地修改即可,容器內會自動同步!
三、實戰MySQL資料同步
思考:MySQL的資料持久化的問題!
1、獲取映象
docker search mysql # 搜尋MySQL docker pull mysql:5.7 # 拉取MySQL5.7
2、執行容器,需要做資料掛載! 安裝啟動mysql 需要配置密碼
官方測試: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
-d 後臺執行
-p 埠對映
-v 卷掛載 可配置多個 -v
-e 環境配置
--name 容器名字
測試連線(Navicat)
在本地測試建立一個test資料庫,在本地檢視是否存在。
即使容器刪除,宿主機資料依舊存在,這就實現了容器資料持久化功能!
四、具名和匿名掛載
1、匿名掛載
-v 容器內路徑!
docker run -d -P --name nginx01 -v /etc/nginx nginx docker volume ls # 檢視所有的 volume 的情況
2、具名掛載
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx # -v 容器內路徑
檢視宿主機
docker 容器中所有的卷,在沒有指定目錄的情況下,都在"var/lib/docker/volumes/xxxxx/_data"
我們可以通過具名掛載找到卷的位置,大多數情況下,我們使用具名掛載
關於docker的掛載問題,有三個比較容易混淆的概念: (區分的方式) (1)具名掛載:-v 引數 卷名:容器內路徑 (2)匿名掛載:-v 引數後面 沒有寫上容器之外的地址, docker 自己會在docker內部給你找個位置 (3)指定路徑掛載: -v /宿主機路徑::容器內路徑
拓展:
-v 容器內路徑:ro/rw 改變讀寫許可權
ro readonly # 只讀 rw readwrite # 可讀可寫
設定許可權之後,容器對我們掛載出來的內容就有限定(只能通過宿主機改變,容器內部無法改變)
例: docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:ro nginx # 只能通過宿主機操作,容器內無法操作 docker run -d -P --name nginx03 -v juming-nginx:/etc/nginx:rw nginx