美文网首页容器技术
六十五、Docker Swarm-使用local volume

六十五、Docker Swarm-使用local volume

作者: InsaneLoafer | 来源:发表于2022-01-16 15:37 被阅读0次

    swarm 使用 local volume

    本节源码,两个文件

    docker-compose.yml

    version: "3.8"
    
    services:
      db:
        image: mysql:5.7
        environment:
          - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql_pass
        secrets:
          - mysql_pass
        volumes:
          - data:/var/lib/mysql
    
    volumes:
      data:
    
    secrets:
      mysql_pass:
        file: mysql_pass.txt
    

    mysql_pass.txt

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

    使用local volume

    • 使用docker stack创建服务,服务在worker2
    [vagrant@swarm-manager ~]$ ls
    docker-compose.yaml  mysql_pass.txt
    [vagrant@swarm-manager ~]$
    [vagrant@swarm-manager ~]$
    [vagrant@swarm-manager ~]$ docker stack deploy --compose-file docker-compose.yaml db
    Creating network db_default
    Creating secret db_mysql_pass
    Creating service db_db
    [vagrant@swarm-manager ~]$
    [vagrant@swarm-manager ~]$ docker stack ls
    NAME      SERVICES   ORCHESTRATOR
    db        1          Swarm
    [vagrant@swarm-manager ~]$ docker service ls
    ID             NAME      MODE         REPLICAS   IMAGE       PORTS
    j6wqdraaxnkt   db_db     replicated   0/1        mysql:5.7
    [vagrant@swarm-manager ~]$
    [vagrant@swarm-manager ~]$ docker service ps db_db
    ID             NAME      IMAGE       NODE            DESIRED STATE   CURRENT STATE            ERROR     PORTS
    l6ogf9p9o0cl   db_db.1   mysql:5.7   swarm-worker2   Running         Running 15 seconds ago
    [vagrant@swarm-manager ~]$
    
    • 在worker2中查看volume
    [vagrant@swarm-worker2 ~]$ docker container ls
    CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                 NAMES
    584b0fe14812   mysql:5.7   "docker-entrypoint.s…"   20 seconds ago   Up 20 seconds   3306/tcp, 33060/tcp   db_db.1.l6ogf9p9o0cl6ug8j5mp32i3g
    [vagrant@swarm-worker2 ~]$
    [vagrant@swarm-worker2 ~]$ docker volume ls
    DRIVER    VOLUME NAME
    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 ~]$
    

    相关文章

      网友评论

        本文标题:六十五、Docker Swarm-使用local volume

        本文链接:https://www.haomeiwen.com/subject/crwxcrtx.html