Docker--初识
上周开始了解Docker,最近几天有事没看,今天发现Docker1.0都发布了,Goggle也出了容器管理工具Kubernetes和容器资源统计工具Cadvisor,真是日新月异。趁着今天后半夜加班,屁颠屁颠的升级到Docker1.0,争取早点把头挤进Docker的门缝。
虽然对PaaS了解不多,但是觉得这东西搞不好要革运维的命,如果运维的方向是把公司的资源搞成阿里云那样的,那么学学Docker就很有必要了。我也是刚接触,具体的说不清楚,边学边用边理解吧,网上有很多关于Docker的介绍:
官方的交互式教程和Dockerfile教程以及相关的文档也非常不错。
安装
安装比较简单,我直接按照官方文档和阿里云支持docker吗安装的,记录一下做个备忘。
# 修改DNS配置,默认的DNS连index.docker.io都解析不了,用8.8.8.8吧
$ vim /etc/resolv.conf
# 删除aliyun默认172.16网段的路由配置。docker需要用到该网段,不删除会有冲突
$ route del -net 172.16.0.0 netmask 255.240.0.0
# 注释对应route配置
$ vim /etc/network/interfaces
# 更新内核
$ apt-get update
$ apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring
$ reboot
# 安装docker
$ apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ apt-get update
$ apt-get install lxc-docker
# 测试,第一次运行需要pull ubuntu,较慢
$ docker run -i -t ubuntu /bin/bash
在Docker中搭建Web服务器
通过尝试在Docker中搭建一个Web服务来学习其基本用法。
-
使用最爱的Centos的镜像,然后部署Httpd服务。
$ docker pull centos # 使用images命令查看现有镜像 $ docker images # 使用Centos6的镜像启动一个容器并进入 $ docker run -it centos:centos6 /bin/bash [Container]$ yum install -y httpd vim [Container]$ echo "I come from docker" > /var/www/html/index.html # 由于容器在执行完一条命令后就会退出,需要写个脚本HOLD住 [Container]$ vim /home/http-start.sh #!/usr/bin/env bash service httpd start while true; do sleep 1000 done
-
提交快照。就像Git中提交代码一样,需要将容器提交为镜像才能进一步使用。
# 找到刚刚创建的容器的ID $ docker ps -a # 将该容器保存为镜像 $ docker commit 2bda2b092def jasee/httpd # 查看本地现有镜像 $ docker images
-
启动服务
$ docker run -d -p 80 jasee/httpd bash /home/http-start.sh $ docker ps #应该有个容器在运行了,还可以看到PORTS映射关系 # 使用以下命令也可以看到主机本地端口 $ docker port 02797434fa24 80
在我的环境里,此时通过主机的的49153端口就可以看到”I come from docker”了。
Dockerfile
之前的步骤都可以写在Dockerfile里,方便维护修改及分享和模板化,Dockerfile如下:
# VERSION 0.0.1
FROM centos:centos6
MAINTAINER jasee "jaseetao@gmail.com"
RUN yum install -y httpd
RUN echo "I come from docker" > /var/www/html/index.html
ADD http-start.sh /home/http-start.sh
EXPOSE 80
ENTRYPOINT bash /home/http-start.sh
其中ADD
命令可以将本地或URL提供的文件拷贝到容器中。在此例中已经在本地写好http-start.sh
并放到Dockerfile同一目录下。
有了Dockerfile之后,就可以使用如下命令建立镜像:
$ docker build -t jasee/httpd:0.0.1 .
尝试运行:
$ docker run -d -p 80 jasee/httpd:0.0.1
又一个Web服务建立起来了。
DockerHub
Docker1.0发布了,DockerHub也建起来了。感觉Docker的整个生命周期与生态模式和Git及GitHub非常类似。注册完DockerHub之后,可以建立仓库,将自己的镜像推送到上面。推送命令如下:
$ docker login
$ docker push jasee/httpd
看样子只会推送变更部分,不过就算这样速度也还是比较慢的。DockerHub好像支持从GitHub里读取Dockfile自动构建镜像,这个比较有意思,也许能缓解镜像上传的网络问题。 近期你可能能够看到我这次测试生成及上传的镜像。
后记
随着Docker1.0的及相关镜像构建、容器维护工具及共享协作平台的发布,其生态环境越来越成熟,已经可以正式部署到生产环境中了。云计算这波浪潮来势汹汹,不知道未来的运维之路走向何方啊。 努力向前,共勉。