返回顶部
首页 > 资讯 > 精选 >Docker Secret怎么用
  • 786
分享到

Docker Secret怎么用

2023-06-14 05:06:52 786人浏览 安东尼
摘要

小编给大家分享一下Docker Secret怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是Docker Secret(一)情景展现 我们

小编给大家分享一下Docker Secret怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、什么是Docker Secret

(一)情景展现

 我们知道有的service是需要设置密码的,比如mysql服务是需要设置密码的:

version: '3'services: WEB:  image: Wordpress  ports:   - 8080:80  volumes:   - ./www:/var/www/html  environment:   WORDPRESS_DB_NAME=wordpress   WORDPRESS_DB_HOST: Mysql   WORDPRESS_DB_PASSWORD: root  networks:   - my-network  depends_on:   - mysql  deploy:   mode: replicated   replicas: 3   restart_policy:    condition: on-failure    delay: 5s    max_attempts: 3   update_config:    parallelism: 1    delay: 10s mysql:  image: mysql  environment:   MYSQL_ROOT_PASSWORD: root   MYSQL_DATABASE: wordpress  volumes:   - mysql-data:/var/lib/mysql  networks:   - my-network  deploy:   mode: global   placement:    constraints:     - node.role == managervolumes: mysql-data:networks: my-network:  driver: overlay

可以看到在这个docker-compose.yml中的两个service密码都是明文,这样就导致了不是很安全,那么究竟什么是Docker secret以及能否解决上面的问题呢?

(二)Docker Secret

Docker Secret怎么用

   我们知道manager节点保持状态的一致是通过Raft Database这个分布式存储的数据库,它本身就是将信息进行了secret,所以可以利用这个数据库将一些敏感信息,例如账号、密码等信息保存在这里,然后通过给service授权的方式允许它进行访问,这样达到避免密码明文显示的效果。

  总之,secret的Swarm中secret的管理通过以下步骤完成:

  • secret存在于Swarm Manager节点的的Raft Database里

  • secret可以assign给一个service,然后这个service就可以看到这个secret

  • 在container内部secret看起来像文件,实际上就是内存

二、Docker Secret的创建与使用

(一)创建

我们先看看创建的一些帮助说明:

[root@Centos-7 ~]# docker secret --helpUsage:  docker secret COMMANDManage Docker secretsCommands: create   Create a secret from a file or STDIN as content inspect   Display detailed infORMation on one or more secrets ls     List secrets rm     Remove one or more secretsRun 'docker secret COMMAND --help' for more information on a command.

第一个命令就是创建的命令,我们再来看看它有什么帮助信息:

[root@centos-7 ~]# docker secret create --helpUsage:  docker secret create [OPTIONS] SECRET [file|-]Create a secret from a file or STDIN as contentOptions: -d, --driver string      Secret driver -l, --label list        Secret labels   --template-driver string  Template driver

可以看到说明secret可以来自于一个文件或者一个标准输出。那么也就是Secret的创建有两种方式,分别是:

  • 基于文件的创建

  • 基于命令行创建

1、基于文件创建

首先先创建一个文件用于存放密码

[root@centos-7 ~]# vim mysql-passwordroot

然后再进行创建secret

[root@centos-7 ~]# docker secret create mysql-pass mysql-password texcct9ojqcz6n40woe97dd7k

  其中,mysql-pass是secret的名称,mysql-password是我们建立存储密码的文件,这样执行后就相当于将文件中的密码存储在Swarm中manager节点的Raft Database中了。为了安全起见,现在可以直接将这个文件删掉,因为Swarm中已经有这个密码了。

[root@centos-7 ~]# rm -f mysql-password

现在可以查看一下secret列表:

[root@centos-7 ~]# docker secret lsID             NAME        DRIVER       CREATED       UPDATEDtexcct9ojqcz6n40woe97dd7k  mysql-pass               4 minutes aGo    4 minutes ago

已经存在了。

2、基于命令行创建

[root@centos-7 ~]# echo "root" | docker secret create mysql-pass2 -hrtmn5yr3r3k66o39ba91r2e4[root@centos-7 ~]# docker secret lsID             NAME        DRIVER       CREATED       UPDATEDtexcct9ojqcz6n40woe97dd7k  mysql-pass               6 minutes ago    6 minutes agohrtmn5yr3r3k66o39ba91r2e4  mysql-pass2               5 seconds ago    5 seconds ago

这种方式还是很简单的就创建成功了

(二)其它操作

那么secret还有什么其它操作吗?

[root@centos-7 ~]# docker secret --helpUsage:  docker secret COMMANDManage Docker secretsCommands: create   Create a secret from a file or STDIN as content inspect   Display detailed information on one or more secrets ls     List secrets rm     Remove one or more secretsRun 'docker secret COMMAND --help' for more information on a command.

可以看到除了create命令外,还有inspect、ls、以及rm命令。

1、inspect

[root@centos-7 ~]# docker secret inspect mysql-pass2[  {    "ID": "hrtmn5yr3r3k66o39ba91r2e4",    "Version": {      "Index": 4061    },    "CreatedAt": "2020-02-07T08:39:25.630341396Z",    "UpdatedAt": "2020-02-07T08:39:25.630341396Z",    "Spec": {      "Name": "mysql-pass2",      "Labels": {}    }  }]

展示secret的一些详情信息

rm

[root@centos-7 ~]# docker secret rm mysql-pass2mysql-pass2[root@centos-7 ~]# docker secret lsID             NAME        DRIVER       CREATED       UPDATEDtexcct9ojqcz6n40woe97dd7k  mysql-pass               12 minutes ago   12 minutes ago

删除一个secret

(三)Secret在单容器中的使用

1、容器中查看secret

 我们创建了一个secret,如何在启动一个服务后,将其授权给特定的服务然后它才可以看到呢?先看看创建服务的命令中是否有类似的命令或者参数:

[root@centos-7 ~]# docker service create --helpUsage:  docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]Create a new serviceOptions:   --config config           Specify configurations to expose to the service... --secret secret           Specify secrets to expose to the service......

确实是有这样的命令,在创建服务时可以给服务暴露出secret。

2、创建服务

[root@centos-7 ~]# docker service create --name demo --secret mysql-pass busybox sh -c "while true; do sleep 3600; done"zwgk5w0rpf17hn77axz6cn8dioverall progress: 1 out of 1 tasks 1/1: running  verify: Service converged

查看这个服务运行在那个节点上:

[root@centos-7 ~]# docker service lsID         NAME      MODE        REPLICAS      IMAGE        PORTSzwgk5w0rpf17    demo      replicated     1/1         busybox:latest   [root@centos-7 ~]# docker service ps demoID         NAME      IMAGE  NODE     DESIRED STATE    CURRENT STATE   ERROR PORTSyvr9lwvg8oca    demo.1    busybox:latest   localhost.localdomain  Running  Running 51 seconds ago

可以看到这个服务运行在localhost.localdomain主机的节点上,我们去这个节点上进入到容器内部,看是否能查看secret:

[root@localhost ~]# docker psCONTAINER ID  IMAGE        COMMAND      CREATED       STATUS  PORTS        NAMES36573adf21f6 busybox:latest  "sh -c 'while true; …"4 minutes ago  Up 4 minutes demo.1.yvr9lwvg8ocatym20hdfublhd[root@localhost ~]# docker exec -it 36573adf21f6 /bin/sh/ # lsbin  dev  etc  home proc root run  sys  tmp  usr  var/ # cd /run/secrets/run/secrets # lsmysql-pass/run/secrets # cat mysql-pass root/run/secrets #

可以看到确实是可行的。

2、mysql服务

关于mysql镜像,详情查看https://hub.docker.com/_/mysql其中有关于secret的描述:

  作为通过环境变量传递敏感信息的替代方法,_FILE可以将其附加到先前列出的环境变量中,从而使初始化脚本从容器中存在的文件中加载那些变量的值。特别是,这可用于从/run/secrets/<secret_name>文件中存储的Docker Secret加载密码。例如:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag

目前,这仅支持MYSQL_ROOT_PASSWORD,MYSQL_ROOT_HOST,MYSQL_DATABASE,MYSQL_USER,和MYSQL_PASSWORD。

所以我们需要先创建一个文件secret用于存储数据库的敏感信息,因为之前已经创建过,这里无需再创建:

[root@centos-7 ~]# docker secret lsID             NAME        DRIVER     CREATED       UPDATEDtexcct9ojqcz6n40woe97dd7k  mysql-pass             4 hours ago     4 hours ago

启动mysql服务:

[root@centos-7 ~]# docker service create --name db --secret mysql-pass -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-pass mysqlsbpagzqvpwt8ifymavf8o5xmioverall progress: 1 out of 1 tasks 1/1: running  verify: Service converged

查看mysql服务在那个节点上:

[root@centos-7 ~]# docker service lsID         NAME        MODE        REPLICAS      IMAGE        PORTSsbpagzqvpwt8    db         replicated     0/1         mysql:latest    [root@centos-7 ~]# docker service ps dbID      NAME    IMAGE     NODE         DESIRED STATE CURRENT STATE ERROR  PORTSqlmfm6u7lg8u  db.1  mysql:latest  localhost.localdomain  Running Starting 2 seconds ago

在worker节点中进入该服务的容器中查看secret:

[root@localhost ~]# docker psCONTAINER ID  IMAGE        COMMAND         CREATED       STATUS       PORTS         NAMES2ac2a810e931 mysql:latest "docker-entrypoint.s…" 3 minutes ago Up 2 minutes 3306/tcp, 33060/tcp db.1.qlmfm6u7lg8u8i1v2m2c3ls3r[root@localhost ~]# docker exec -it 2ac2a810e931 /bin/sh# cd /run/secrets/# lsmysql-pass# cat mysql-passroot

这样知道了密码就可以进入到mysql数据库中了。

# mysql -uroot -pEnter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 9Server version: 8.0.19 MySQL CommUnity Server - GPLCopyright (c) 2000, 2020, oracle and/or its affiliates. All rights reserved.Oracle is a reGIStered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

(四)Secret在Stack中的使用

Stack利用的就是docker-compose.yml文件来部署stack,那么如何在docker-compose.yml中来定义secret呢?

version: '3'services: web:  image: wordpress  ports:   - 8080:80  secrets:   - my-pw  environment:   WORDPRESS_DB_HOST: mysql   WORDPRESS_DB_PASSWORD_FILE: /run/secrets/wordpress-pass  networks:   - my-network  depends_on:   - mysql  deploy:   mode: replicated   replicas: 3   restart_policy:    condition: on-failure    delay: 5s    max_attempts: 3   update_config:    parallelism: 1    delay: 10s mysql:  image: mysql  secrets:   - my-pw  environment:   MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-pass   MYSQL_DATABASE: wordpress  volumes:   - mysql-data:/var/lib/mysql  networks:   - my-network  deploy:   mode: global   placement:    constraints:     - node.role == managervolumes: mysql-data:networks: my-network:  driver: overlay

上面通过在environment中定义WORDPRESS_DB_PASSWORD_FILE以及MYSQL_ROOT_PASSWORD_FILE来制定secret,显然我们在运行这个docker-compose.yml文件之前必须先要进行对应的secret文件的创建。然后就可以通过docker stack deploy命令来部署这个stack了。

以上是“Docker Secret怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Docker Secret怎么用

本文链接: https://lsjlt.com/news/268232.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker Secret怎么用
    小编给大家分享一下Docker Secret怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、什么是Docker Secret(一)情景展现 我们...
    99+
    2023-06-14
  • Docker Secret的管理和使用详解
    一、什么是Docker Secret (一)情景展现  我们知道有的service是需要设置密码的,比如mysql服务是需要设置密码的: version: '3' ...
    99+
    2024-04-02
  • k8s中的secret怎么使用
    这篇文章主要讲解了“k8s中的secret怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s中的secret怎么使用”吧!secret可以加密用户名和密码文件,将其打包成一个sec...
    99+
    2023-07-06
  • docker启动mysql及-eMYSQL_ROOT_PASSWORD=my-secret-pw问题解决
    目录一、问题描述二、解决一、问题描述 今天用kitematic安装了最新版的mysql,自动启动报没设置密码错误 error: database is uninitialized a...
    99+
    2024-04-02
  • docker启动mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw问题解决
    目录一、问题描述二、解决一、问题描述 今天用kitematic安装了最新版的mysql,自动启动报没设置密码错误 error: database is uninitialized and password option ...
    99+
    2022-07-06
    docker启动mysql
  • docker中k8s如何配置secret拉取私仓镜像
    这篇文章主要介绍了docker中k8s如何配置secret拉取私仓镜像,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于公司内部的项目, 我们不可能使用公有开放的镜像仓库, ...
    99+
    2023-06-04
  • kubernetes中Secret如何使用
    小编给大家分享一下kubernetes中Secret如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一: 简介Secret 可以作为数据卷被挂载,或作为环境...
    99+
    2023-06-04
  • 云原生自动化应用于docker仓库私有凭据secret创建
    目录SecretSecret的创建应用于docker私有仓库的secret其他Secret Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 ...
    99+
    2024-04-02
  • k8s中secret的用法详解
    secret可以加密用户名和密码文件,将其打包成一个secret并在API服务器上创建对象 echo -n 'admin' > ./username.txt echo -n '...
    99+
    2023-05-15
    k8s secret使用 k8s secret
  • Kubernetes里的secret最基本的用法
    Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使用。使用如下命令行创建一个secret:ku...
    99+
    2023-06-04
  • 怎么在Docker中使用Docker命令
    这篇文章主要介绍“怎么在Docker中使用Docker命令”,在日常操作中,相信很多人在怎么在Docker中使用Docker命令问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Docker中使用Docke...
    99+
    2023-06-15
  • Docker中swarm怎么用
    这篇文章给大家分享的是有关Docker中swarm怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。swarm 三台虚拟机 132,133,134初始化一个集群 并把自己加入集群中# 初始化主节点do...
    99+
    2023-06-25
  • docker中k8s怎么用
    小编给大家分享一下docker中k8s怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   之前安装了一个master和两个nodes的k...
    99+
    2023-06-04
  • 怎么使用Docker UI
    这篇文章主要为大家展示了“怎么使用Docker UI”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么使用Docker UI”这篇文章吧。Docker提供一个平台来把应用程序当作容器来打包、分发...
    99+
    2023-06-04
  • docker compose怎么使用
    这篇文章主要介绍“docker compose怎么使用”,在日常操作中,相信很多人在docker compose怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”docker ...
    99+
    2023-06-30
  • Docker镜像构建中docker commit怎么使用
    这篇“Docker镜像构建中docker commit怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Doc...
    99+
    2023-06-29
  • Docker中怎么使用nodejs
    Docker中怎么使用nodejs,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Docker介绍Docker 是一个开源项目,诞生于 20...
    99+
    2024-04-02
  • docker update命令怎么用
    小编给大家分享一下docker update命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!docker update当你 docker run 了之后却...
    99+
    2023-06-16
  • Docker中的cgroup怎么用
    小编给大家分享一下Docker中的cgroup怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是cgroupLinux CGroup(Linux Cont...
    99+
    2023-06-21
  • docker search命令怎么用
    这篇文章主要介绍了docker search命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。docker search这个命令可以帮助你在命令行中方便的搜索 Dock...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作