Systemd 232 导致 Docker container 启动问题

问题

近期又一次在 Gentoo 下做了一个升级维护,遇到一个问题,Docker container 死活启动不起来

$ docker-compose up -d
Creating redis

ERROR: for redis  Cannot start service redis: containerd: container not started
ERROR: Encountered errors while bringing up the project.

查看日志

$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-01-21 13:52:27 CST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 16269 (dockerd)
    Tasks: 21 (limit: 4915)
   Memory: 17.8M
      CPU: 400ms
   CGroup: /system.slice/docker.service
           ├─16269 /usr/bin/dockerd -H fd://
           └─16275 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc


Jan 21 13:52:32 iMac dockerd[16269]: time="2017-01-21T13:52:32.431087496+08:00" level=warning msg="failed to retrieve docker-init version: unknown output format: tini version 0.13.2\n"
Jan 21 13:52:32 iMac dockerd[16269]: time="2017-01-21T13:52:32.823126391+08:00" level=error msg="containerd: start container" error="containerd: container not started" id=a863dc7a53c2ad23020187161f8f782072061550a7834b2a542e7d5a05584e47
Jan 21 13:52:32 iMac dockerd[16269]: time="2017-01-21T13:52:32.823493109+08:00" level=error msg="Create container failed with error: containerd: container not started"
Jan 21 13:52:33 iMac dockerd[16269]: time="2017-01-21T13:52:33.150447827+08:00" level=error msg="Handler for POST /v1.21/containers/a863dc7a53c2ad23020187161f8f782072061550a7834b2a542e7d5a05584e47/start returned error: containerd: container not started"

升级 CentOS 内核至 4.9

介绍

Linux Tovalds 于 2016 年 12 月 11 日发布了 Kernel 4.9 正式版本,带来了一些令人激动的特性以及一些驱动的更新。Linux 稳定内核维护者 Greg Kroah-Hartman 也早已宣布下一个长期支持版(LTS)内核将是 Linux 4.9。来自 Google 的 BBR (Bottleneck Bandwidth and RTT) TCP 拥塞控制 (congestion control) 算法也在这个版本并入了主线。为了体验 BBR TCP,迫不及待的需要将 CentOS 7 的内核升级至该版本。具体的更新可以查阅:Linux Kernel 4.9 release notes

安装

要在 CentOS 上安装最新的内核版本,我们需要增加一个 ELRepo 源。

首先,让我们添加 ELRepo GPG key:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

Docker 容器使用小结

目前也已经将生产环境中所有服务运行在 Docker 容器中,从一年前就一直想写一篇有关 Docker 的文章,可是年初以来一直没有时间,趁着这个中秋节假期,终于开始着笔。

介绍

Docker 是一个开源的应用容器引擎,使用轻量级的容器虚拟化技术,开发者可以方便的打包他们的应用以及依赖包到一个可移植的容器中,来发布到任何流行的 Linux 发行版上。

  • 命名空间: Docker 引擎采用 namespaces 来提供一个隔离的工作区,通过 kernel 的 pid、net、ipc、mnt、uts 等 namespaces 实现对进程、网络、消息、文件系统以及 HostName/DomainName 的隔离。
  • 资源配置:通过 cgroups 来控制容器的硬件资源。
  • 文件系统:利用 UnionFS,通过创建图层来实现对容器的轻量与快速更新。Docker 引擎可以使用多个 UnionFS 的变种,包括 AUFS、btrfs、vfs 与 DeviceMapper。
  • 容器格式:Docker 引擎结合 namespaces、cgroups、UnionFS 一起组成 libcontainer 容器格式,将来或许会支持更多的譬如 BSD Jails、Solaris Zones 容器格式。

Docker 已经成熟并被大量的应用到生产环境,所以概念部分就不阐述了,针对与 Virtual Machines 的区别说一下。

解决 Windows Thin PC 中无法更新的问题

虚拟机几乎已经变成必备工具,只不过,开启虚拟客户机的次数越来越少,到最后,唯有在网银支付的时候才会开启虚拟机应付一下。之前我的虚拟客户机 Windows XP 切换到 Windows 10,看着这个笨重的家伙,固态盘上占用的恐怖的体积,促使我寻找一个轻量级的虚拟客户机。

不得不承认,老了就跟不上时代了,通过搜索才发现,原来 Microsoft 早就提供了一款专门面向虚拟桌面基础架构消费者的操作系统 Windows Thin PC,该系统是 Windows 7 的超轻量级版本,主要面向企业客户。

闲话少说,MSDN 版下载:

ed2k://|file|en_windows_thin_pc_x86_697681.iso|1576980480|2D0E6A048EB3F314F556B4F0834A95E2|/

创建你自己的 DNS 缓存服务器

好长时间没写文章了,琢磨着写些啥。正好今天有个一个需求,需要自建 DNS 来避免污染。于是今天花了些时间,研究了下自建 DNS。也正好将一些过程与心得写下来,期间在两个发型版 ( CentOS 7、Gentoo ) 上尝试了下,正常使用。

自建 DNS 的方案可以多种搭配,不过如果项目团队内部使用的话,个人还是推荐 Dnsmasq + DNSCrypt-proxy 方案,小巧,部署方便。

  • Dnsmasq:
    • 提供 DNS 缓存和 DHCP 服务功能
  • DNSCrypt-proxy:
    • 在客户端与 DNS 服务端之间提供加密与认证

工具清楚了,那么开始动手