首頁  >  文章  >  運維  >  Docker總結分享之資料卷技術

Docker總結分享之資料卷技術

WBOY
WBOY轉載
2022-01-14 18:44:581743瀏覽

這篇文章為大家帶來了Docker總結分享之資料卷技術的相關知識,希望對大家有幫助。

Docker總結分享之資料卷技術

Docker資料卷技術

Docker總結分享之資料卷技術

什麼是容器資料卷

Docker總結分享之資料卷技術

#docker的概念回顧

將應和環境打包成一個映像!

資料?如果資料都在容器中,那麼我們容器刪除,資料就會遺失!需求:資料可以持久化MySQL,容器刪了,刪庫跑路--->需求:MySQL資料可以儲存在本地!

容器之間可以有一個資料共享的技術! Docker容器中產生的數據,同步到本地!

這就是磁碟區技術!目錄的掛載,將我們容器內的目錄,掛載到Linu×上面!

Docker總結分享之資料卷技術

總結:容器的持久化和同步操作!容器間也是可以實現資料共享的!

Docker總結分享之資料卷技術使用資料卷

docker run -it -v 宿主机目录: 容器目录 -p 主机端口:容器端口 容器id

實戰演練Docker總結分享之資料卷技術

inspect查看同步詳細資料

在容器中建立一個文件,看是否同步到本機資料夾

#在關閉容器的情況下,對本機文件進行修改,看修改的是不是會同步到容器中檔案

#Mysql實戰

Docker總結分享之資料卷技術#

docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

參數

-d 後台運行

Docker總結分享之資料卷技術-p 連接埠對映

-v 資料卷掛載:同步資料

-e  設定環境變數:這裡時設定的時MySQL的登陸密碼

--name  容器起名字

測試結果:連線成功

遇到的問題首先使用的時mysql的最新版本:8.0----在使用navicat進行連接的時候,總是報莫名其妙的錯誤

#解決方式:換成5.7版本,沒有任何問題在我們run鏡像mysql的時候,沒有加上-e MYSQL_ROOT_PASSWORD=123456進行密碼的設置,容器一直會處於關閉狀態,即使重新start也不會開啟加上-e MYSQL_ROOT_PASSWORD=123456這個參數完美開啟

#即使我們將容器刪除,我們掛載到本地的資料卷依舊沒有遺失,這就實現了容器資料的持久化功能

具名掛載與匿名掛載

Docker總結分享之資料卷技術

#匿名掛載

-v 容器內的路徑!

docker run -d --name nginx01 -v /etc/nginx nginx

這裡我們發現,這種就是匿名掛載,我們在-v的後面只是寫上了容器內的路徑,沒有寫容器外的路徑

查看所有捲的情況

docker volume ls
Docker總結分享之資料卷技術

具名掛載

Docker總結分享之資料卷技術#-v 掛載磁碟區的名稱:容器內的路徑

docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx nginx

這裡我們發現,這種就是匿名掛載,我們在-v的後面既寫上了容器內的路徑,沒有容器外的路徑,但是有一個名稱

docker的內容目錄:/var/lib/docker

所有的docker容器內的捲,沒有指定目錄的情況下都是在:/var/lib/docker/volume /xx/_data

我們可以透過具名掛載方便的找到我們的一個卷,並且在使用卷的時候最多的使用方式就是具名掛載

額外知識

如何區分時具名掛載或匿名掛載,指定路徑掛載

###-v 容器內路徑    #匿名掛載######-v 磁碟區名:容​​器內路徑    #具名掛載#######-v /容器外路徑:容器內路徑    #指定路徑掛載#######擴充## #####-v 容器內路徑:ro rw 改變讀寫權限######ro  readonly  唯讀######rw  readwrite 可讀可寫###

一旦设置了这个容器权限,容器对我们挂载出来的内容就有限定了

docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:ro nginx
docker run -d --name nginx01 -v 具名挂在名称:/etc/nginx:rw nginx

Ro 只要看到ro就说明这个路径只能通过宿主机来进行操作,容器内是无法操作的!

初识Dockerfile

dockerfile

dockerfile就是用来构建docker镜像文件的!命令脚本!先体验一下

通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令,每个命令都是一层!

写一个dockerfile

# 创立一个dockerfile文件,名字可以随便的取,最好叫做dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos
VOLUME ["volme01","volume02"]
CMD echo "--------end----------"
CMD /bin/bash
#这里每个指令就是镜像的一层

使用dockerfile生成镜像

docker build -f dockerfile文件位置 -t 镜像名称和版本 镜像生成的位置

Docker總結分享之資料卷技術

进入镜像查看详情

Docker總結分享之資料卷技術

查看卷的同步目录

docker ps -a

docker inspect 容器id

Docker總結分享之資料卷技術

最后测试两个文件夹中是不是同步

同步成功

总结

使用dockerfile构建镜像的方式在我们未来的使用中非常的多,因为我们通常会构建自己的镜像

假设构建镜像时候没有挂载卷,要手动镜像挂载-v

数据卷容器

实际上即使保证的容器之间的数据共享的问题

Docker總結分享之資料卷技術

数据卷容器实际上就是被拷贝数据的容器(A- volumes-from ->B,B是数据卷容器)

测试两个镜像之间同步

首先先开三个容器

创建docker01

Docker總結分享之資料卷技術

创建docker02  --volumes-from docekr01

Docker總結分享之資料卷技術

创建docker03  --volumes-from docekr02

Docker總結分享之資料卷技術

查看docker01和docker03之间的数据共享

Docker總結分享之資料卷技術

接着我们将docker02删除,查看docker01和docker03之间的数据共享

Docker總結分享之資料卷技術

总结:

Docker總結分享之資料卷技術

实现多个mysql之间的数据共享

  docker run -d -p 3310:3306 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
  docker run -d -p 3310:3306 --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123456 --name 
  mysql02 mysql:5.7

总结:

容器之间配置信息的传递。数据卷容器的声明周期一直持续到没有容器使用位置

理解:容器之间只要是共享就会数据copy,即使有的容器被删除,数据依然存在,直到所有共享 的容器都删除,数据才会被彻底删除

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。

推荐学习:《docker视频教程

以上是Docker總結分享之資料卷技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除