20131021 Docker 初探



  • 本文作者是 QingCloud 用户 roger

    对 Docker 好奇很久了,今天最终自己动手尝试一下,系统要求 Ubuntu Server 12.04 LTS 64bit,本想用本地的 VirtualBox 但不支持 64bit(不知道为什么),那就用云服务了,QingCloud 的控制页面确实简洁,很容易使用。

    1. 在 QingCloud 中创建测试机器

    • 创建一个 Ubuntu 12.04.2 主机(映像 ID 为 precisex64a)
    • 申请一个公网 IP、并捆绑至该主机
    • 创建一个 SSH 密钥、并捆绑至该主机
    • 以下操作需要 root 权限,如果你使用的帐号不是 root,那么需要 sudo.

    2. 安装 Docker

    • 刷新:
    apt-get update
    apt-get install python-software-properties
    
    • 添加 PPA:
    add-apt-repository ppa:dotcloud/lxc-docker
    apt-get update
    
    • 安装:
    apt-get install lxc-docker
    

    3. 下载两个 image (境外网络可能比较慢、甚至中途挂,多试几次,或挂后台)

    docker pull ivarvong/redis
    docker pull kstaken/apache2
    

    4. 启容器中的服务

    docker run -d -p 6379 ivarvong/redis /usr/bin/redis-server
    docker run -d -p 80:80 kstaken/apache2
    

    5. 查看运行的容器

    docker ps
    

    记录容器的 IP 地址

    docker inspect 08821c6ffb4a
    

    6. 为连接 redis 安装一下 cli

    apt-get install redis-server
    

    7. 连接 redis 测试一下

    redis-cli -p 6379 -h 172.17.0.17
    set foo bar
    get foo
    exit
    

    8. 看看 apache 是否起来

    curl localhost
    

    如果可用那么两个容器都正常运行了。

    好了,总结一下 Docker 的常用命令:

    • docker search
      用于搜索是否有可用的images,实际从 index.docker.io查找,放回查询结果
      例如:docker search apache

    • docker pull
      index.docker.io 下载一个 image ,下载过程会有好几个 fs 层,因为 Docker 生成的容器是可以不断修改保存的,每一次的保存生成fs,一个完整的容器可以是多次的 fs 的叠加。

    • docker inspect
      查看容器的信息,实际是lxc容器的配置参数

    • docker run
      在容器中运行一个命令,如果容器中有常驻任务会直接启动容器本身
      docker run 有诸多的选项,介绍常用的必要选项
      -e 设置容器的运行env环境变量
      -v 映射服务的一个目录到容器中
      -p 容器对服务器暴露的端口
      -c cpu使用的权重
      -m 限制容器的内存使用量
      -i 标准输出到当前term
      -t 分配一个tty
      一般情况 -i -t 一起使用将容器的输出到term
      参考截图:


    例如:docker run -d -p 80:80 -v /tmp:/var/www kstaken/apache2
    将系统的80端口映射到容器的80端口,访问系统的 localhsot 就访问到容器的 apache 服务, apache 会读取 /tmp/index.html 访问

    • docker ps -a
      列出所有的容器,包括运行的和已经停止的。

    • docker rm
      删除容器
      如果容器不在需要可以用删除容器操作

    • docker start
      开启停止的容器

    • docker stop
      停止运行的容器

    • docker rmi
      删除 image

    • docker info
      查看系统的容器和 images

    • docker commit
      修改容器后提交保持

    • docker push
      将 image 推送到 index.docker.io 保持

    • docker build
      用 Dockerfile 文件创建一个 image,具体的 Dockerfile 语法不在介绍,很简单参考官网就可以了。

    后续:

    Docker 确实可以快速构建一个容器,很快的构建一个 PaaS 容器,对不同的环境使用不同的 Docker 容器即可。不过呢Docker 必须用 root 权限运行,Docker 虽然可以控制容器映射到系统的目录,但容器写服务输出的文件依然是隶属root(非 root 用户无法运行 Docker)。

    如果对同一台服务上的少数应用需要控制资源的直接使用 cgroup 是较好的选择,可以按用户或用户组控制系统资源。如果服务需要指出多种环境,那么 Docker 就是最好的。

    推荐参考:
    http://dockerbook.com/TheDockerBook_sample.pdf


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待