Distroless Images
Distroless Images 指的是整个镜像里面只有你的应用和运行时依赖,不要把其他任何包括 package manager,shell,其他可以在标准 Linux Distribution 里面找到的程序丢进去。这是很多大公司的实践,好处是可以减少 CVE 噪音,减少镜像源头。
- 由于 Distroless 没带 shell,所以你要在 Dockerfile 中指定一个 ENTRYPOINT
- 格式:
ENTRYPOINT ['myapp']
, 如果用ENTRYPOINT myapp
会被 container runtime prefix 一个 shell - 使用 multi-stage build 的小技巧来丢掉构建过程的产物,只留下构建结果。
- 其实还是建议保留一个
sh
在镜像里面万一真要查问题时死活进不去会很麻烦。docker run --entrypoint=sh -it …
LXD 简介
本文是 LXD Introduction。LXD 是 system container manager, 使用 linux container 提供类似 virtual machine 的使用体验。可用的镜像可在 https://images.linuxcontainers.org/ 查看,常见版本的 alpine, cents, ubuntu, debian, gentoo 什么都有。
LXD 的核心就是一个 daemon, 通过 unix socket 或者网络 提供 REST API 服务。这个 REST API 服务的功能由 LXC 提供, 它通过 liblxc 和 go …
read morePython 实现 BitCoin BlockChain
本文实践了如何从头构建一个 Blockchain 网络。
- 基础知识:
- Double-Spending 难题:在点对点网络上,一笔钱怎么确保只能消费一次?
- BitCoin 解决方案:打包 10 分钟内的多个交易到一个块,矿工给块签名(Proof of Work),第一个算出 nonce 的矿工将其广播到网络。只要好矿工多于半数,就能确保不会出现 Double-Spending。
- 解决冲突:如果有人同时算出来,我们通过再下一个块的矿工决定。
- ECDSA: 基础的加密算法。目前来看比较安全。Alice 把她的块用自己的私钥签名,别人用她附带的公钥确信这确实是她的块。
- Block 有父节点的哈希地址,所以这些 Block 一个一个串起来组成了 BlockChain。
- BlockChain 可能会遭到的攻击:Race Attack, Finney Attack, Majority Attack。
- Race Attack: 建议收到至少一个 …
Python calendar.timegm 与 time.mktime 的区别
time.mktime()
和 calendar.timegm()
都接受一个 timetuple 返回一个时间戳,不过前者假设传进来的值是本地时间,后者假设传进来的是 GMT/UTC 的时间。
calendar.timegm 的文档表明,这个函数其实是 time.gmtime()
的逆函数。
PostgreSQL 不要做这些事情
本文介绍了 PostgreSQL 的一些不建议做的事情:
- 不要 psql -W or psql --password
- 不要用 timestamp 存时间戳,用 timestamptz, 除非你不需要计算时间戳,只是单纯存储这个值。
- 不要用 timetz,用 timestamptz.
- 不要用 Money 存钱,用 Numeric, 除非你只处理一种货币并且只加减钱不乘除钱。
- 表名或者列名不用大写, 真有需求 Select 的时候
select character_name as "Character Name" from foo
。 - 不用 char(n), 用 text, 前者会打空格给缺的部分。
- 不用 varchar(n), 用 varchar 或者 …