Docker swarm 管理 secrets
Docker 管理 Swarm
2023-09-11 14:15:45 时间
Docker swarm 管理 secrets
文章目录
1. 初始化 swarm
默认情况下,Docker作为一个隔离的单节点工作。所有容器仅部署在引擎上。群模式将它变成了一个多主机集群感知引擎。为了使用秘密功能,Docker必须处于“群模式”。这是通过
$ docker swarm init
Swarm initialized: current node (o6ngy0xskvvhxaaiyfye21znh) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4oa8jjlavmoihusp73vgu71mhjek6ut1qkapzqnhtxdq5xzv0t-04anuyasgyv0p4xiqn4ga16fe 172.17.0.9:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2. 创建 secrets
下面的命令将首先创建一个随机的64个字符的令牌,该令牌将存储在一个文件中以供测试之用。令牌文件用于创建名为deep_thought_answer_secure
的秘密文件
$ < /dev/urandom tr -dc A-Za-z0-9 | head -c64 > tokenfile
$ docker secret create deep_thought_answer_secure tokenfile
5yk3llezwli4atuua81dw6hg5
例如,还可以使用stdin创建秘密
$ echo "the_answer_is_42" | docker secret create lesssecure -
sxzk4itvh9dwvcenfz037uwab
注意,这种方法将在用户bash历史文件中保留the_answer_is_42
的值。
所有的秘密名称都可以使用
$ docker secret ls
ID NAME DRIVER CREATED UPDATED
5yk3llezwli4atuua81dw6hg5 deep_thought_answer_secure About a minute ago About a minute ago
sxzk4itvh9dwvcenfz037uwab lesssecure 53 seconds ago 53 seconds ago
这将不会暴露底层的secrets的values,这个秘密可以在通过Swarm部署服务时使用。例如,deploy让Redis服务可以访问这个秘密。
$ docker service create --name="redis" --secret="deep_thought_answer_secure" redis
llfxs9rk9e88n7jh99q971uwb
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged
secret作为一个文件出现在secrets目录中。
$ docker exec $(docker ps --filter name=redis -q) ls -l /run/secrets
ls: cannot access '/run/secrets': Operation not permitted
这可以作为一个普通文件从磁盘读取。
$ docker exec $(docker ps --filter name=redis -q) cat /run/secrets/deep_thought_answer_secure
SbrptUbQhcF7oWdfhmlSn70XCDvCNH2REuYSRv55tgUPEjPjKvB1zeLDTZTTcAxf$
3. 用Compose创建Docker stack
使用Docker Compose Stacks
也可以使用secrets
功能。在下面的例子中,观众服务可以访问我们的Swarm Secret _deep_thoughtanswer
。它被安装并被称为deep_thoughtanswer
version: '3.1'
services:
viewer:
image: 'alpine'
command: 'cat /run/secrets/deep_thought_answer_secure'
secrets:
- deep_thought_answer_secure
secrets:
deep_thought_answer_secure:
external: true
4. 部署访问 secrets
Docker Compose Stack的部署使用Docker CLI。作为部署的一部分,堆栈将配置为对秘密的访问。使用以下命令部署任务:
docker stack deploy -c docker-compose.yml secrets1
docker logs $(docker ps -aqn1 -f status=exited)
如果命令错误与“docker日志”需要精确的1个参数。这意味着容器还没有启动并返回秘密。
5. File Based Secret
另一种创建秘密的方法是通过文件。既然如此,我们有个秘密。需要从容器中访问的CRT文件。
echo "my-super-secure-cert" > secret.crt
更新docker-compose Stack
以使用基于机密的文件
version: '3.1'
services:
test:
image: 'alpine'
command: 'cat /run/secrets/secretcert'
secrets:
- secretcert
secrets:
secretcert:
file: ./secret.crt
6. 使用Compose部署和访问secrets
和前面一样,部署Docker Compose stack
docker stack deploy -c docker-compose.yml secrets2
下面的命令将获取为新创建的服务退出的最后一个容器的日志文件
docker logs $(docker ps -aqn1 -f name=secrets2 -f status=exited)
参考:
相关文章
- docker脚本自动化安装
- 【Docker异常】ERROR: dial unix docker.raw.sock: connect: connection refused
- Docker 集群Swarm创建和Swarm Web管理
- 创建docker公共仓库
- [Docker] Run Stateless Docker Containers (Volumes with docker compose)
- docker 应用篇————docker 的文件系统[十]
- Docker 制作docker file的最佳实践
- 【GO】K8s 管理系统项目35[Docker方式–应用部署]
- 谈谈 Docker Volume 之权限管理(一)
- Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 【docker】解决 Failed with result ‘exit-code‘和Start request repeated too quickly和Failed to start Docker
- Docker集群管理之Swarm介绍
- Docker 问题汇总
- 使用Docker 安装配置Zabbix 监控,实现局域网主机监控告警
- Docker入门与应用系列(四)数据卷管理
- 删除docker网络docker0
- 010-docker-安装-elasticsearch:5.4.3
- 77.第十七章 企业级容器技术docker -- Docker 镜像制作和管理(五)
- y25.第二章 Docker从入门到精通 -- docker镜像制作和管理(七)
- y22.第二章 Docker从入门到精通 -- Cgroups和docker 的资源限制(四)
- 【云原生之Docker实战】使用Docker部署Linux管理平台webmin
- 【创作赢红包】云原生之使用Docker部署YApi接口管理服务平台
- 【云原生之Docker实战】自动化运维管理平台——spug的搭建和日常使用
- 【云原生之Docker实战】使用docker部署 Searxng个人搜索引擎平台
- 【云原生之Docker实战】使用docker部署Jellyfin个人影音服务器
- Docker+Jenkins 超简单 超详细教程
- Docker学习笔记07:docker使用之容器使用
- 【Docker系列】3.docker-compose安装redis
- 云原生之部署Docker可视化管理工具docker.ui
- Docker图形化管理和监控神器Portainer