資料卷之dockerfile
阿新 • • 發佈:2021-07-13
一)自己建立一個dockerfile
dockerfile就是用來構建docker映象的構建檔案、用下面的案例來體驗一下。通過這個指令碼可以生成映象、映象是一層一層的、指令碼是一個個的命令、每個命令都是一層。
基於centos環境建立一個ztsq/centos1.0映象
[root@xiaozhang1999 ~]# cd /home [root@xiaozhang1999 home]# ll total 0 drwxr-xr-x 2 root root 37 Jun 24 15:27 ceshi drwxr-xr-x 4 root root 30 Jun 25 14:55 mysql [root@xiaozhang1999 home]# mkdir docker-test-volume [root@xiaozhang1999 home]# ls ceshi docker-test-volume mysql [root@xiaozhang1999 home]# cd docker-test-volume # 建立一個dockerfile檔案、名字最好就為dockerfile [root@xiaozhang1999 docker-test-volume]# vim dockerfile1 [root@xiaozhang1999 docker-test-volume]# cat dockerfile1 FROM centos VOLUME ["Volume01","Volume02"] CMD echo ".................end........................" CMD /bin/bash [root@xiaozhang1999 docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t ztsq/centos1.0 . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 300e315adb2f Step 2/4 : VOLUME ["Volume01","Volume02"] ---> Running in 8ff322dce9cb Removing intermediate container 8ff322dce9cb ---> e02a6a5af26b Step 3/4 : CMD echo ".................end........................" ---> Running in c56b03a03b68 Removing intermediate container c56b03a03b68 ---> 4faf06ace140 Step 4/4 : CMD /bin/bash ---> Running in 883fb14b0216 Removing intermediate container 883fb14b0216 ---> 513eba9a38ec Successfully built 513eba9a38ec Successfully tagged ztsq/centos1.0:latest [root@xiaozhang1999 docker-test-volume]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ztsq/centos1.0 latest 513eba9a38ec 5 minutes ago 209MB tomcattunc latest 276239fa14a3 4 days ago 672MB
生成dockerfile時報錯、報錯資訊為
[root@xiaozhang1999 docker-test-volume]# docker run -it 513eba9a38ec /bin/bash docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:Volume01 Type:bind Source:/var/lib/docker/volumes/dc606ec3f8bad69571589a2d8ddc0a70234496cb20f17218b802dca89b6ebd7b/_data Options:[rbind]}: mount destination Volume01 not absolute: unknown. ERRO[0000] error waiting for container: context canceled
解決報錯方法::VOLUME ["/Volume01","/Volume02"](屬匿名掛載)內容加斜槓.刪除513eba9a38ec後再重新建立映象
檢視生成的資料卷Volume1、Volume2
二)資料卷容器
退出ztsq/centos1.0映象建立個docker02掛載在ztsq/centos1.0的docker01下
建立個dockercopy檔案、驗證容器內資料同步性
同理新建個docker03掛載在ztsq/centos1.0下、docker02、docker03、及ztsq/centos1.0下的docker01資料都是同步的
可以刪除資料卷docker01 ztsq/centos1.0後。docker02和docker03的資料依然存在。
"雙向繫結"
實際生產場景舉例:利用資料卷容器同步mysql資料
docker run -d -p 3310:3306 -v /home/mysql/comf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -v /home/mysql/comf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volume-from mysql01
結論:容器之間配置資訊的傳遞、資料卷容器的生命週期一直持續到沒有人使用為止。
但是一旦持久化到了本地上、這個時候、本地的資料是不會刪除的。