首页 > 代码库 > 体验 Docker 之以前的工作日志汇总

体验 Docker 之以前的工作日志汇总

n# 2014/09/02 安装 CentOS 7

网络配置

CentOS 7 安装完成后,网络不可以。CentOS 7 网络配置和 6 有些不同。CentOS 7 虚拟机安装完成后有一个随机的网卡,在我这叫 ens35。静态 IP 没有配置成功。简单的启用网络的方式是使用默认的 DHCP 方式,只需要设置网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-xxx 中的 ONBOOT=yes,默认是 no。
之后配置 DNS,和 6 中一样。

安装 Docker

在 CentOS 7 中,安装 Docker 非常简单,只需要执行 sudo yum install docker 即可

运行 Docker

安装完 Docker 之后,需要启动 Docker 的服务
sudo service docker start

设置开机自动启动
sudo chkconfig docker on

下载 CentOS 的镜像
sudo docker pull centos

然后就可以启动 Docker 容器,在其中执行命令了
sudo docker run -i -t centos /bin/bash

2014/09/03 体验 Docker

对 Docker 资源隔离特性的了解

Docker 使用 Linux 的 cgroup 对资源进行隔离,对容器内的进程进行资源(CPU、内存、磁盘、网络)限制,使用 namespace 对属于同一个容器的进程分为同一组。Docker 在这些 Linux 核心技术上面,对它们进行封装,简化它们的使用。

用 Docker 启动一个 web 应用

根据 Docker 官网提供的教程,通过 Docker 启动一个 Web 应用很是简单和快速
sudo docker run -d -P training/webapp python app.py

当然,第一次运行是需要先下载镜像的。

2014/09/04 准备演示 Docker

演示目标

  1. 用 Docker 在一个主机里快速启动多个应用实例
  2. 限制 Docker 的 CPU 和内存的使用
  3. Docker 之间相互通信

限制 Docker 的 CPU 和内存的使用

在启动一个 Docker 容器之后,我们可以查看这个容器的 IP 地址
sudo docker inspect -f ‘{{ .NetworkSettings.IPAddress }}‘ container_name

制定 -m 参数之后,top 无法显示被限制了的容器的内存大小

编写示例程序

目标是编写两个示例程序,一个是 device,提供一个 REST 接口,传入一个 device ID,返回带有这个 ID 的设备名称。另外一个是 conference 模块,调用 device 模块。使用 Spring Boot 来实现。有段时间没有用 Spring Boot 写程序,有些生疏。记录一下编写这两个简单的不能再简单的示例程序时遇到的坑

Gradle buildscript

当你的构建过程需要引入第三方的类库时,需要在如下代码

buildscript {
    ext {
        springBootVersion = ‘1.1.5.RELEASE‘
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

打 Jar 包时的命令

gradle build 而不是 gradle jar

2014/09/09 Docker 初步演示

初步演示了用 Docker 容器封装一个 Java Web 应用,并在一个 Host OS 上快速启动多个容器的能力。进一步演示目标:

  1. 容器之间共享目录
  2. 数据持久化
  3. 深入了解 cgroups
  4. 内存资源限制:限制容器内存大小,再启动大于此内存的 Java 进程

2014/09/15

容器间以及 Host 之间的目录共享

这个特性的调研破费了一番周折,后来发现 CentOS 的 EPEL Repository 中的 Docker 的版本其实只有 0.11,而最新的则是 1.2.0。在换了新的 Binary 的最新的 Docker 之后,顺利实现了容器之间以及和 Host 之间的目录共享。

命令:docker run -i -t -v /host_dir:/container_dir centos /bin/bash

在实现容器和 Host 之间的目录共享之后,数据的持久化也自然实现了。在容器中在共享目录之上做的操作会自然而然的体现在 Host 中所对应的目录之上。在容器被停止或销毁之后,这个目录上的文件还是存在的。

2014/09/16

容器集群的管理是一个问题,虽然 Polycom 产品集群的规模不可能达到互联公司的规模,但是考虑到云时代的到来。为客户提供 SaaS 形式的会议服务是可以预见到的。在这种情况下,Docker 容器集群管理是需要考虑的一个技术。在这方面,已有的技术包括 Google 开源的 Kubernetes、Apache 的 Mesos 等。

体验 Docker 之以前的工作日志汇总