1. 程式人生 > >swarm管理應用資料

swarm管理應用資料

將宿主機資料掛載到容器

以資料卷形式掛載資料:

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掛載:(掛載宿主機目錄到容器)

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,叢集 共用資料
所有機器 全部裝上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 \
<IMAGE>
例如:
 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