1. 程式人生 > 其它 >資料卷之dockerfile

資料卷之dockerfile

一)自己建立一個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

結論:容器之間配置資訊的傳遞、資料卷容器的生命週期一直持續到沒有人使用為止。
但是一旦持久化到了本地上、這個時候、本地的資料是不會刪除的。