Docker批量删除已停止的容器
方法一
1 | #显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID, |
方法二
1 | #删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了) |
方法三
1 | #根据容器的状态,删除Exited状态的容器 |
方法四
1 | #Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。 |
1 | #删除所有镜像 |
参考:
1 | #显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID, |
1 | #删除所有未运行的容器(已经运行的删除不了,未运行的就一起被删除了) |
1 | #根据容器的状态,删除Exited状态的容器 |
1 | #Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。 |
1 | #删除所有镜像 |
参考:
SASL:简单认证和安全层
SASL是一种用来扩充C/S模式验证能力的机制认证机制,全称 Simple Authentication and Security Layer
。
当你设定sasl时,你必须决定两件事;一是用于交换“标识信 息”(或称身份证书)的验证机制;一是决定标识信息存储方法的验证架构。
sasl验证机制规范client与server之间的应答过程以及传输内容的编码方法,sasl验证架构决定服务器本身如何存储客户端的身份证书以及如何核验客户端提供的密码。
如果客户端能成功通过验证,服务器端就能确定用户的身份, 并借此决定用户具有怎样的权限。
比较常用的机制plain:plain是最简单的机制,但同时也是最危险的机制,因为身份证书(登录名称与密码)是以base64字符串格式通过网络,没有任何加密保护措施。因此,使用plain机制时,可能会想要结合tls。
参考:
1 | address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373 |
-k 跳过证书校验。
1 | kes key dek my-key-1 -k |
参考:
1 | $ openssl version -a |
1. https 单项认证:
server: server.crt + server.key
client: server_ca.crt
2. https 双向认证:
server: server.crt + server.key + client_ca.crt
client: server_ca.crt + client.crt + client.key
在使用 CA 证书进行签署证书时加入-extfile
和-extensions
选项,具体命令如下:
1 | openssl x509 -req -days 365 -sha256 -extfile openssl.cnf -extensions v3_req |
证书详情信息:
1 | Version: 版本号 |
一般证书的签发流程是:
申请者把自己的申请做成证书申请文件 csr(csr 中放入了申请者的公钥以及申请者的信息)
然后把 csr 发送给签发者 CA 进行证书签发,签发过程就是 CA 用自己的私钥给 csr 生成签名,然后制作为证书文件(.crt 或.pem)
nginx 判定证书的时候,是根据证书中的两个字段:Issuer 和 Subject
如果 Issuer == Subject 那么 nginx 就会认为这是一个自签名的根证书
如果 Issuer != Subject 那么 nginx 就会认为这不是一个自签名的证书,验证时需要带上签发这个证书的根证书
正式使用时,subject 中的 CN 字段需要填写使用者的域名,也就是 nginx 所在主机的域名。
流程:自签 CA,由自签 CA 签发二级 CA,最后由二级 CA 签发网站证书。
openssl 参数参考:
1 | -extensions v3_req 指定 X.509 v3版本 |
在本文中,我们将探索Hashicorp的Vault - 一种用于在现代应用程序体系结构中安全地管理机密信息的流行工具。
我们将讨论的主要议题包括:
在深入了解Vault之前,让我们试着了解它试图解决的问题:机密信息管理。
大多数应用程序需要访问机密数据才能正常工作。例如,电子商务应用程序可以在某处配置用户名/密码以便连接到其数据库。它还可能需要API密钥才能与其他服务提供商集成,例如支付网关,物流和其他业务合作伙伴。
数据库凭证和API密钥就是我们需要以安全的方式存储和提供给我们的应用程序的机密信息。
一个简单的解决方案是将这些信息存储在配置文件中,并在启动时读取它们。但是这种方法的问题显而易见:有权访问此文件的人共享我们的应用程序具有的数据库权限 - 通常可以完全访问所有存储的数据。
我们可以尝试通过加密这些文件来使事情变得更加困难。但是,这种方法在整体安全性方面不会增加太多。主要是因为我们的应用程序必须能够访问主密钥。当以这种方式使用时,加密仅是一种“错误”的安全感。
现代应用程序和云环境往往会增加一些额外的复杂性:分布式服务,多个数据库,消息传递系统等等,所有敏感信息都在各处传播,从而增加了安全漏洞的风险。
例如:
配置 upstream 的 location 代码:注意添加了 ~*
1 | #代理后端接口 |
单节点 location 代码:
1 | #代理后端接口 |
1 | # max_conns 最大连接数 |
1 | version: "3" |
执行:
1 | # 启动 |