1. 程式人生 > 其它 >docker file,docker網路和容器資料卷

docker file,docker網路和容器資料卷

容器資料卷

docker的理念是應用和環境包打包城映象.
那麼如果資料在容器中,容器被刪除跑路,就嗝屁了,所以資料可以持久化的儲存在容器外部
容器資料卷就可以讓容器之間有一個數據共享技術.把docker容器產生的資料同步到本地.
注意這個本地是的是作業系統linux不是docker.這是個目錄掛載技術,把我們容器內的目錄掛載到linux上


使用資料卷,就會把mysql容器內下的/user/mysql資料同步到linux下的/home/mysql中
實現容器之間資料共享以及同步操作

  1. 方式1 使用命令掛載 -v

docker run -it -v 主機目錄:容器內目錄
docker run -it --name centos01 -v /home/ceshi:/home centos /bin/bash

此時我們隨意在容器內部增刪資料夾和檔案,在外部映象的/home/ceshi中就可以看到響應的變動
當容器關閉的時候,我們在主機內對檔案進行資料寫入,容器在重啟後一樣會更新,雙向更新

  • 安裝實戰 mysql

執行mysql,需要配置root的賬號密碼(檢視dockerhub的官方文件)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
我們配置掛載
docker run -d -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql03 mysql:5.7
用navicat什麼的可以嘗試連線下埠並建立一個數據庫看是否有同步掛載

具名掛載和匿名掛載

匿名掛載

-v 容器內路徑
不指定主機路徑,讓他隨機生成
docker run -d -P --name tomcat01 -v /ect/nginx nginx

檢視所有的volume

$ docker volume --help

Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
匿名掛載格式如下

具名掛載

可以看到匿名會隨機生成一大串字串,不利於後期查詢和識別
我們可以給匿名掛載生成的匿名掛載自定義名字,這裡注意 /zidingyi:/ect/nginx 如果是/zidingyi 代表的是路徑,沒有反斜槓代表起別名.
docker run -d -P --name tomcat02 -v zidingyi:/ect/nginx nginx

用docker volume inspect命令檢視這個自定義的卷名路徑在哪裡
例:docker volume inspect zidingyi

掛載語法格式一共有4種
匿名掛載 -v 容器內路徑
具名掛載 -v 具名/容器內路徑
在上述三種路徑後面加:rw或者:ro 例:具名掛載 -v 具名/容器內路徑:ro ,ro是read only,rw是read write,指定許可權
指定路徑掛載 -v /本機路徑:/容器內路徑

  1. 方式2 使用dockerfile命令方式掛載

  • 首先隨便建立一個資料夾和名字,這裡我們在建立一個/home/myvolume/dockerfile1 建議檔名用dockerfile
    指令碼命令如下: 指令都是大寫
    FROM mysql #填寫基於哪個映象
    VOLUME ["/volume01","/volume02"] #同-v 容器內路徑 ,是一種匿名掛載方式
    CMD echo"---end----" #輸出end
    CMD /bin/bash #切回交互介面
  • docker build 命令用來建立生成dock file
    docker build -f dockerfile的檔案路徑 -t 映象名字:tag
    docker build -f /home/myvolume/dockfile1 -t sxf/mysql:1.0 . 最後一點要加個空格和點

  • 啟動下自己的容器映象


    映象進去後 ls -l 檢視當前目錄檔案,發現下面2個掛載目錄,這2個目錄一定和本地有對應的同步目錄

    我們在這2個目錄下分別建立111,222資料夾,然後去本地用docker inspect 容器id查詢是否有同步更新的資料夾位置
    注意這裡查詢的是映象ID 不是容器ID

容器資料卷2

容器資料捲上面講的是容器內和本地系統資料共享.這裡舉得例子是容器和容器之間的資料共享.
容器1 --volumes-from 容器2 這裡容器2是父容器, 容器1是子容器,繼承關係.容器之間資料共享,只要有一個容器在使用共享資料,其他容器停止或者刪除都不會對正在使用共享資料的容器產生影響.
每個容器的共享資料是相互拷貝的概念,而不是單獨存在某一個容器中的.
首先拿下載的centos映象為例,我們先建立一個容器
docker run --name centos01 -v /home/pc_data:/home/container_data -it centos:7.6.1810 /bin/bash
建立了一個映象和本機的資料卷.接下來我們再開一個映象,命名為centos02
docker run -it --name docker02 --volumes-from centos01 centos:7.6.1810
這裡因為centos01已經建立了,我們只是用--volumes-from 完全拷貝他而已,所以-v的那些資料卷路徑不用重複
語法格式 docker run -it --name docker02 --volumes-from 父容器id 映象名:tag

例2: 我們現在建立一個多個數據庫共享資料的案例
第一臺mysql建立docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:tag -p 8080:3306 -v /etc/mysql:/home/mysql_data mysql:5.7
第二胎mysql建立docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=root -d -p 8080:3307 --volumes-from mysql01 mysql:5.7

docker file

docker file 就是通過命令,指令碼用來構建docker映象的構建檔案

docker網路