0
点赞
收藏
分享

微信扫一扫

Docker Secret管理和使用

1、什么secret

  • 用户名密码
  • SSH Key
  • TLS认证
  • 任何不想让别人看到的数据

2、Docker Swarm Mode Architecture

secret在docker中是如何管理的呢?重温一下这个图:



docker swarm里面有2个角色Manager 和 Worker,Worker这个节点有个内置的分布式存储,它是基于raft协议,强一致性的,唯一性,可以让manager下面的节点相互之前可以完成同步,manager这个在生产环境下强烈建议是2个manager,如果是一个是单点故障了,Internal分布式存储的它是加密之后放入硬盘的,天然的加密环境,manager和worker节点是通过TLS进行加密的。他们的key都是存在内置节点的分布式数据库节点上,通过加密以后存储在硬盘上的,我想存一些secret可以直接存在manager内置的分布式节点上边,比如一个数据库需要一个密码,我可以给它一个分布式数据库读取的权限。能够访问到这个secret就可以了。

3、secret management

  • 存在swarm manager 节点raft database里面
  • secret 可以assign给一个service,这个service就能看到这个secret
  • 在container内部secret看起来像文件,但是实际是在内存中

创建方式

  • 通过文件创建
  • 通过管道的方式复制

常用命令

#通过文件创建
#编辑password文件,按照你自己的要求写入密码保存
vi password
#通过docker secret create 名称 文件名
docker secret create my-pw password

#通过管道的方式复制
echo 'admin123' | docker secret create my-pw2 -

# 查看
docker secret ls

# 删除secret 
docker secret rm my-pw2

#指定secret的名称
docker service create --name client --secret my-pw busybox sh -c "while true;do sleep 36000;done" 
docker service ls
docker service  ps client
docker container ls 
#进入这个container中
docker exec -it  containerID sh
#进入run/secrets目录
cd /run/secets/
cat my-pw

4、secret 的 操作

创建

从文件内创建

vim password
  #password  内容
  123456a

创建 secret:

docker secret create my-pass password

删除 password 文件:

rm -rf ./password

从命令行输入创建:

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

查看:

docker secret ls

删除:

docker secret rm my-pass2

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

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)

在 docker stack 中的使用

编辑 docker-compose.yml
在各个 service 下添加:secrets 参数 和 environment 参数

#例如:
services:
    web:
    image: wordpress
    secrets:
        - my-pass
    environment:
        WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD_FILE: /run/secrets/my-pass
    ...

eg: docker-compose.yml,secrets是直接从文件中读取,这种方式是创建和使用一起做

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:

eg: docker-compose.yml,这种方式是password secrets先创建好,然后在使用

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:
      - my-pw

  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:
      - my-pw

volumes:
  db_data:

根据上述的 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 也行

参考:
https://blog.csdn.net/huangjun0210/article/details/86505002
https://www.cnblogs.com/zonehoo/p/11419823.html

举报

相关推荐

0 条评论