swarm 使用 local volume

本节源码,两个文件
docker-compose.yml

  1. version: "3.8"
  2. services:
  3. db:
  4. image: mysql:5.7
  5. environment:
  6. - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_pass
  7. secrets:
  8. - mysql_pass
  9. volumes:
  10. - data:/var/lib/mysql
  11. volumes:
  12. data:
  13. secrets:
  14. mysql_pass:
  15. file: mysql_pass.txt

mysql_pass.txt

  1. vagrant@swarm-manager:~$ more mysql_pass.txt
  2. abc123
  3. vagrant@swarm-manager:~$

使用local volume

  • 使用docker stack创建服务,服务在worker2

    1. [vagrant@swarm-manager ~]$ ls
    2. docker-compose.yaml mysql_pass.txt
    3. [vagrant@swarm-manager ~]$
    4. [vagrant@swarm-manager ~]$
    5. [vagrant@swarm-manager ~]$ docker stack deploy --compose-file docker-compose.yaml db
    6. Creating network db_default
    7. Creating secret db_mysql_pass
    8. Creating service db_db
    9. [vagrant@swarm-manager ~]$
    10. [vagrant@swarm-manager ~]$ docker stack ls
    11. NAME SERVICES ORCHESTRATOR
    12. db 1 Swarm
    13. [vagrant@swarm-manager ~]$ docker service ls
    14. ID NAME MODE REPLICAS IMAGE PORTS
    15. j6wqdraaxnkt db_db replicated 0/1 mysql:5.7
    16. [vagrant@swarm-manager ~]$
    17. [vagrant@swarm-manager ~]$ docker service ps db_db
    18. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
    19. l6ogf9p9o0cl db_db.1 mysql:5.7 swarm-worker2 Running Running 15 seconds ago
    20. [vagrant@swarm-manager ~]$
  • 在worker2中查看volume

    1. [vagrant@swarm-worker2 ~]$ docker container ls
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 584b0fe14812 mysql:5.7 "docker-entrypoint.s…" 20 seconds ago Up 20 seconds 3306/tcp, 33060/tcp db_db.1.l6ogf9p9o0cl6ug8j5mp32i3g
    4. [vagrant@swarm-worker2 ~]$
    5. [vagrant@swarm-worker2 ~]$ docker volume ls
    6. DRIVER VOLUME NAME
    7. local db_data
  • 在其他节点查看volume是没有的

    [vagrant@swarm-worker1 ~]$ docker volume ls
    DRIVER    VOLUME NAME
    [vagrant@swarm-worker1 ~]$
    [vagrant@swarm-manager ~]$ docker volume ls
    DRIVER    VOLUME NAME
    [vagrant@swarm-manager ~]$
    
  • 查看volume目录

    [vagrant@swarm-worker2 ~]$ docker container inspect 58 | grep Source
                      "Source": "db_data",
                  "Source": "/var/lib/docker/volumes/db_data/_data",
    [vagrant@swarm-worker2 ~]$
    [vagrant@swarm-worker2 ~]$ sudo ls /var/lib/docker/volumes/db_data/_data
    auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
    ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem
    

    删除stack,volume依旧存在,实现数据持久化

    ``` [vagrant@swarm-manager ~]$ docker stack rm db Removing service db_db Removing secret db_mysql_pass Removing network db_default [vagrant@swarm-manager ~]$ [vagrant@swarm-manager ~]$ [vagrant@swarm-manager ~]$ docker stack ls NAME SERVICES ORCHESTRATOR [vagrant@swarm-manager ~]$ [vagrant@swarm-manager ~]$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS


[vagrant@swarm-worker1 ~]$ [vagrant@swarm-worker1 ~]$ docker volume ls DRIVER VOLUME NAME [vagrant@swarm-worker1 ~]$ ```