如果 heapq 中放入的是元组,那么元组的第一个元素会用于大小比较。假设有这样一个问题,给定一个数组,返回前 k 小的数字所在数组中的位置。Top k 的问题的一个解法是使用堆,但是这里要求的是数字在数组中的位置而不是数字本身,所以不能直接将数组堆化,可以先将数组中的每个数字转换成一个包含2个元素的元组,元组的第一个元素是数字本身,第二个元素则是数字在数组中的位置。
1 2 3 4 5 6 7 8 9 10
import heapq
deftop_k(numbers, k): heap = [(n, i) for i, n inenumerate(numbers)] heapq.heapify(heap)
WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all dangling build cache
Are you sure you want to continue? [y/N]
该操作会删除所有停止的容器,所有未被至少一个容器使用的网络,所有的 dangling 镜像(在构建镜像时产生的 tag 为 none 的镜像,没有和任何其他有 tag 的镜像有关联),所有的 dangling 构建缓存(和 dangling 镜像同理)。
更激进一点,还可以执行 docker system prune -a,该操作还会删除没有和运行中的容器有关联的镜像。
镜像清理
Docker 镜像是某个应用(如数据库、某个程序语言的运行时)的磁盘快照,可以通过 docker image ls -a 查看所有的镜像(活跃的以及 dangling 的镜像):
1 2
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d1165f221234 4 months ago 13.3kB
可以通过 docker image rm <name_or_id> 来删除某个镜像,支持批量删除多个镜像,多个镜像 id 之间使用空格分隔即可。不过,删除镜像要求该镜像没有被某个容器所使用,否则会提示下述类似错误:
1 2
Error response from daemon: conflict: unable to delete 4cdc5dd7eaad (must be forced) - image is being used by stopped container 3d9f62acc483 Error response from daemon: conflict: unable to delete d1165f221234 (must be forced) - image is being used by stopped container 57027ba35bdd
可以通过在执行时增加 -f 来强制删除镜像。
容器清理
容器是某个镜像的一个运行实例,可以通过 docker container ls -a 查看所有的容器:
1 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3d9f62acc483 4cdc5dd7eaad "/docker-entrypoint.…" 11 minutes ago Exited (0) 11 minutes ago sleepy_babbage
Posted onWord count in article: 575Reading time ≈1 mins.
使用 SSH 连接到 Azure 的虚拟机时遇到错误:
1 2 3 4 5 6 7 8 9
➜ ~ ssh -i /path/to/some.pem xxx@x.x.x.x @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '/path/to/some.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "/path/to/some.pem": bad permissions xxx@x.x.x.x: Permission denied (publickey).
@Test publicvoidshouldAssertExceptionMessageByRule() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("a must be positive");