将宿主机数据挂载到容器
Volume
创建容器和数据卷
docker service create --mount type=volume,src=nginx_vol,dst=/usr/share/nginx/html --replicas 1 --name test01 nginx
查看test01容器部署在那台机器上:然后去对应的机器上面去查看
docker service ps test01
查看数据卷
[root@localhost ~]# docker volume inspect nginx_vol
[
{
"CreatedAt": "2018-08-16T11:38:38+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/data/docker_data/volumes/nginx_vol/_data",
"Name": "nginx_vol",
"Options": null,
"Scope": "local"
}
]
查看数据卷物理路径:
ls /data/docker_data/volumes/nginx_vol/_data
50x.html index.html
此时我们可以进入容器内部也能看到:
[root@localhost ~]# docker exec -it 4bfb008e460c bash
root@4bfb008e460c:/# ls /usr/share/nginx/html/
50x.html index.html
Bind Mounts
# 读写挂载
创建挂载目录:
mkdir /data/wwwroot 注意三台机器全部要创建,因为swarm会随机创建到一台机器上
docker service create --mount type=bind,src=/data/wwwroot,dst=/usr/share/nginx/html --name myservice nginx
注意,bind形式挂载会覆盖容器中指定的内容,例如/usr/share/nginx/html 内容会被覆盖要重新写入
# 只读挂载
docker service create --mount type=bind,src=/data/wwwroot,dst=/usr/share/nginx/html,ro --name myservice nginx
单机没法共享数据,所以我们需要借助nfs,集群 共用数据
所有机器 全部装上nfs
yum install -y nfs-utils
在主节点上面编辑配置文件
vim /etc/export
/opt/container_data 192.168.1.0/24(rw,sync,no_root_squash)
代表nfs共享目录/opt/container_data,准许ip端192.168.1.0/24 并且拥有root权限
创建镜像模板:
docker service create \ --mount 'type=volume,src=,dst=,volume-driver=local,volume-opt=type=nfs,volumeopt=device=:,"volume-opt=o=addr=,vers=4,soft,timeo=180,bg,tcp,rw"' --name myservice \
例如:
docker service create --mount 'type=volume,src=nfs-vol,dst=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/opt/container_data/,"volume-opt=o=addr=192.168.1.39,vers=4,soft,timeo=180,bg,tcp,rw"' --name nginx-
nfs nginx
运行起来后,我们可以去es3主机里面去看看是否有数据
[root@master container_data]# docker service ps nginx-nfs
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
k4zbpfdr0dwr nginx-nfs.1 nginx:latest es3 Running Running less than a second ago
[root@es3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94df21b30e67 nginx:latest "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp nginx-nfs.1.k4zbpfdr0dwr067q9xfxngswz
[root@es3 ~]# docker exec -it 94df21b30e67 bash
root@94df21b30e67:/# ls /usr/share/nginx/html/
index.html
当我们扩容以后,一会发现使用的nfs共享目录:
docker service scale nginx-nfs=3
[root@master opt]# docker volume ls
DRIVER VOLUME NAME
local nfs-vol