1.secret management 的作用

  用来存储 其他人不想看到 的数据

2.secret management 

  存在 swarm manager 节点 raft database 里。

  secret 可以 assign 给一个 service (or container), 这个 sevice 就能看到这个secret了

  在 container 内部 secret 看起来像文件, 但实际是在内存中

3. secret 的 操作

  创建

    从文件内创建

      vim password

        #password  内容

          123456a

    创建 secret

      docker secret create my-pass password

docker secret docker secret manage_服务器

    删除 password 文件

      rm -rf ./password

 

    从命令行输入创建

      echo '123456a' | docker secret create my-pass2 -

docker secret docker secret manage_docker secret_02

  查看 

    docker secret ls

  删除

    docker secret rm my-pass2

4. secret 的使用

  创建 service 的时候指定 secret

    docker service create --name client --secret my-pass busybox sh -c "while true; do sleep 3600; done"

  查看 service 服务器 位置

    docker service ps client

  在 指定服务器 查看 container id

    docker ps

  进入容器

    docker exec -it [container_id] sh

  查看指定的密码

    cat /run/secrets/my-pass

 

5. mysql 案例

  创建 mysql service 指定文件根目录 密码文件为 /run/secrets/my-pass

docker service create --name db --secret my-pass -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pass mysql:5.7.27

  查看所在服务器位置

    docker service ps db

  在 指定服务器 查看容器id 并进入

    docker ps

    docker exec -it [container_id] sh

  查看docker secret 密码  并 进入mysql

      cat /run/secrets/my-pass

      mysql -uroot -p[my-pass]   

    或简写为:

mysql -uroot -p$(cat /run/secrets/my-pass)

 

6. 在 docker stack 中的使用

  编辑 docker-compose.yml

   在各个 service 下添加

    secrets 参数 和 environment 参数

    eg:

      services:

         web:

        image: wordpress

        secrets:

           - my-pass

        environment:

           WORDPRESS_DB_HOST: mysql

         WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pass

        ...

  eg: docker-compose.yml

version: '3.1'

 

services:

  db:

    image: mysql:5.7.27

    volumes:

      - db_data:/var/lib/mysql

    environment:

      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD_FILE: /run/secrets/db_password

    secrets:

      - db_root_password

      - db_password

 

  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    ports:

      - "8888:80"

    environment:

      WORDPRESS_DB_HOST: db:3306

      WORDPRESS_DB_USER: wordpress

      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password

    secrets:

      - db_password

 

secrets:

  db_password:

    file: password.txt

  db_root_password:

    file: password.txt

 

volumes:

  db_data:

 

6. 根据上述的 docker-compose.yml 创建 service

  docker stack deploy wordpress -c=docker-compose.yml

  查看 mysql 所在的服务器 

  docker service ls

  docker service [container_name | container id]

  查看所在服务器的 容器 id

  docker ps

  进入 mysql 容器

  docker exec -it [container_id] /bin/bash

  mysql -uroot -p[your setting password]

  能登陆即可

  或能访问 192.168.205.10 也行