返回 登录
0

基于Mirantis OpenStack和原生Docker工具创建容器化应用程序

上个月,我们谈到了一些不同的方式来处理在OpenStack中的容器,其中包括原生工具,Murano 应用程序,以及基于Magnum操作方式的利弊。之前我们太深入于如何用OpenStack工具来创建不同类型的应用程序,我们认为现在或许可以来看看基于Docker原生工具在OpenStack上创建容器化应用时,背后到底是如何实现的。

Docker受欢迎程度正在急速飙升,同时也有非常多应用程序已经运行在它之上,约有数百万的开发人员以及组织正在他们的产品中使用它,尽管事实上现在有多种途径可以创建可靠和稳定的基础设施。

目前,部署Docker最常见的方法是,先提供一个虚拟机,然后在虚拟机上安装Docker以及相应的容器。这种方法的缺陷是在虚拟机上额外的时延,但是好处在于100%的隔离和安全性。OpenStack,主要用于在私有云上创建Docker主机,下面我们来看看这是如何实现的。

如何在OpenStack上部署Docker管理程序

在你可以执行一个具体的Docker容器之前,你会需要先安装一个Docker主机。你可以手工实现,或者使用Puppet或Ansible这样的工具,但是当前Docker自身已经发布了一个工具来实现这个功能,完全没有必要推倒从轮子开始造起。这就是所谓的Docker Machine。

Machine是一个可以在多种不同供应商(包括OpenStack)上创建Docker主机的二进制可执行文件,并最终创建可以同时运行在不同供应商主机上的分布式Docker基础设施。(可能你在想,“嘿,那是混合云,”是的,你说得对。)

使用Machine非常简单,下载并以正确的参数执行该二进制执行文件即可。仅有的要求是:

  • 一个OpenStack租户. 你需要对于这个租户的访问权限,或者是针对该项目,在其中你有权向可以启动一个中等实例。
  • Docker引擎. 安装Docker引擎最简单的方法就是键入:sudo apt-get install docker
  • 精确配置相应租户的安全选项. 我们稍后将会为该租户创建一个安全组。
    对于本教程的目的,您还需要:
  • 全新安装的Ubuntu. 这可以是一个小型的虚拟机运行在OpenStack或者VirtualBox之上,而不需要是一个实体。(这甚至不是一个严格的限制,你可以抹去这条假如你实现它有问题的话)
  • 基于Ubuntu Trusty Tahr镜像,确保内核版本是3.13+

你可以用yum,apt-get或者brew,非常轻松的安装Docker客户端在任何一个你喜欢的操作系统之上。

对于Machine,你只需要pull然后执行该二进制文件,校验版本号并列出当前机器列表。(根据你的操作系统版本自主选择,当前我们使用的是amd64 Linux)。步骤如下:

$ sudo su
$ curl -L https://github.com/docker/machine/releases/download/v0.5.6/docker-machine_linux-amd64 > /usr/local/bin/docker-machine 
$ chmod +x /usr/local/bin/docker-machine
$ docker-machine --version
docker-machine version 0.5.6, build 61388e9

检查当前安装:

$ docker-machine ls
NAME   ACTIVE   URL   STATE   URL   SWARM   DOCKER   ERRORS

当然,当前还没有任何machine。

Docker Machine使用端口tcp/2376和Docker的守护进程通讯,tcp/22作为主机的配置管理接口。它可以工作在内网或动态IP,个人更喜欢后者。一些安全选项必须被配置。你可以为Machine添加一个特殊的安全工作组,比如名为“Machine”,在Horizon中开放端口22和2376如下:
图片描述

等工作组创建完毕之后,你就可以开始创建访问规则:
图片描述

当以非管理员但是有租户访问权限的用户导入OpenStack证书之后,我们就可以通过openrc文件的环境变量OS_TENANT_ID,OS_TENANT_NAME,OS_USERNAME,OS_PASSWORD很容易创建一个OpenStack的Docker Machine,命令如下:

$ docker-machine create \
--driver openstack \
--openstack-image-id 98011e9a-fc46-45b6-ab2c-cf6c43263a22 \
--openstack-flavor-id 3 \
--openstack-floatingip-pool public \
--openstack-net-id 44ead515-da4b-443b-85cc-a5d13e06ddc85 \
--openstack-sec-groups machine \
--openstack-ssh-user ubuntu \
u1

当前我们正在创建的是一个基于Ubuntu 14.04 Trusty(http://releases.ubuntu.com/trusty/)名字为u1的中等大小Docker Machine主机,给它分配了动态IP,并且在Machine定义的安全组内启动实例。

$ docker-machine ls
NAME   ACTIVE   DRIVER      STATE     URL                        SWARM
u1     -        openstack   Running   tcp://172.18.186.56:2376   

Machine这里所做就是启动并且等待实例可用,然后再注入相应的值给云初始化、安全配置、证书和密钥,SSH到相应实例更新包,安装Docker并启动守护进程。你可以通过实例日志来检查进度:
图片描述

安装完成后,可能再需要几秒钟实例就可用了。假如你需要导入环境变量,命令如下:

$ eval "$(docker-machine env u1)"

现在,你可以在其中运行任何容器了:

$ docker run busybox echo “Hello from OpenStack”
Hello from OpenStack
$ docker images
REPOSITORY       TAG              IMAGE ID         CREATED          VIRTUAL SIZE
busybox          latest           2c5ac3f849df     15 hours ago     1.113 MB

例如,你甚至可以启动Docker UI。只需要确保你的安全组中相应所需的端口已经被打开。通常Docker UI跑在tcp/9000上,所以只需要在安全组中增加这条访问规则。端口访问完成之后,你就可以执行UI如下:

$ docker run -d -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock dockerui/dockerui

图片描述
就这样,你在OpenStack上的第一个Docker主机已经准备完毕。你可以运行如下命令检查Docker信息:

$ docker info
Containers: 4
Images: 6
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 14
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-55-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 2
Total Memory: 3.861 GiB
Name: u1
ID: QTYT:CLJH:RVZW:KHRJ:QEGW:OGSJ:3VXV:LZ6D:Z6BN:2HAJ:ZEV6:CWDX
WARNING: No swap limit support
Labels:
 provider=openstack

现在你已经知道如何使用Machine配置,接下来让我们来看看Docker的Compose工具。

设计Compose的应用程序

基于这个博客帖子的目的,我们将要在ownCloud上安装一个简单的容器化应用程序。
要做到这一点,我们将展示Docker生态系统的另一个工具使用方法:Compose。对于那些已经知道如何写Dockerfiles的人,Compose添加了一些不错的功能和有用的语法辅助。Compose的任务在于建立一套YAML写的依赖于本地配置的容器。

首先,在本地安装Compose:

$ sudo su
$ curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
$ chmod +x /usr/bin/docker-compose
$ docker-compose --version
docker-compose version: 1.4.2

现在,远端Docker主机是运行在本地OpenStack环境变量之上的,我们可以在此之上创建应用程序的环境。

网络上有无数的教程关于如何基于Compose快速设置微服务(比如:这里,这里,这里)。我们将通过使用ownCloud现成的YAML配置展示Compose的使用方法。让我们克隆以下github库,并建立相应的应用程序:

$ git clone https://github.com/sameersbn/docker-owncloud.git
$ cd docker-owncloud

现在,我们准备建立这个程序。结构相当简单:3个容器,其中一个Nginx的网络服务器,一个具有Postgres数据库服务器,以及一个具有Owncloud代码。它们会自动从Docker的compose.yml文件中的配置开始执行:

$ docker-compose up -d

-d选项指定要运行在守护进程模式的容器。然后Compose会下载镜像,创建容器,链接它们,做一些其他的操作。当命令完成,在我们的检查中,我们应该可以看到我们的Docker主机现在运行的容器如下:

$ docker ps
CONTAINER ID     IMAGE                      COMMAND               CREATED          STATUS           PORTS                                NAMES
e29ac6f6a394     sameersbn/nginx            "/sbin/entrypoint.sh "   7 minutes ago    Up 7 minutes     443/tcp, 0.0.0.0:80->80/tcp, 1935/tcp   dockerowncloud_nginx_1
91ffba8739fd     sameersbn/owncloud:latest  "/sbin/entrypoint.sh "   7 minutes ago    Up 7 minutes     9000/tcp                             dockerowncloud_owncloud_1
2d08e6679161     sameersbn/postgresql:latest   "/sbin/entrypoint.sh" 8 minutes ago    Up 8 minutes     5432/tcp                             dockerowncloud_postgresql_1

在Docker主机上,端口重定向是活动的。所以,假如OpenStack的安全组允许端口tcp/80和tcp/443数据访问,那么我们就可以登录到新的OwnCloud实例如下:

$ docker-machine ip u1
172.18.186.56

一旦你获得了IP地址,直接打到你的浏览器上即可。
图片描述

如你所见,它已经在工作了。

下一步

看到这里,你应该已经了解如何通过标准的Docker生态系统工具,建立一个能够托管Docker容器的OpenStack最小化的基础设施。你也看到了如何设定一个Docker主机,如何配置它,并最终如何部署三个简单的容器应用。

在即将到来的其他文章中,我们将着眼于其他在OpenStack中运行容器化应用程序的方法,比如OpenStack的 Magnum或者Murano和Kubernetes。

原文链接:https://www.mirantis.com/blog/build-containerized-app-mirantis-openstack-native-docker-tools/

责编:魏伟,关注OpenStack,欢迎加入OpenStack微信群,搜索微信号“k15751091376”拉入。

2016年3月18日-19日,由CSDN重磅打造的数据库核心技术与实战应用峰会、互联网应用架构实战峰会将在上海举行。这两场峰会将邀请业内顶尖的架构师和技术专家,共同探讨高可用/高并发系统架构设计、新技术应用、移动应用架构、微服务、智能硬件架构、云数据库实战、新一代数据库平台、产品选型、性能调优、大数据应用实战等领域的热点话题与技术。(报名参会

评论