使用 Docker 镜像构建 App

105 阅读3分钟

本文来自于【阿里云官方镜像站:developer.aliyun.com/mirror/?utm…

原文链接:developer.aliyun.com/article/762…

简介: 本文主要为大将讲解如何使用 Docker 镜像创建 App 以及如何更新镜像。

一、准备 App 的 Docker 镜像

  1. 制作 Docker 镜像

根据自己的需求,用户可以使用官方镜像仓库中的镜像作为基础镜像,安装需要的软件或算法,制作成 Docker 镜像,完成运行环境的定制;制作镜像有两种方法:

使用 Dockfile 制作镜像

使用容器快速制作镜像

具体制作方法可参考文章 Docker 镜像制作。

建议:在制作 Docker 镜像时,最好带上 Tag,后续版本有更新时,只需要更新 Tag 即可。

  1. 本地调试Docker镜像

Docker 镜像制作完成以后,可以参考 Docker 本地调试 进行本地调试,确保 Docker 镜像在 BatchCompute 的环境下可以正常使用。

  1. 推送到镜像仓库

可以将制作好的 Docker 镜像推送到 OSS 的镜像仓库。具体方法请参考 Docker镜像上传到 OSS 。

二、创建 App

BatchCompute提供了 API、SDK、控制台等三种方式创建 App,下面以控制台和 Python SDK 为例,分别介绍如何使用 Docker 镜像创建 App。

  1. 使用控制台创建 App

假如 Docker 镜像被推送到 OSS 镜像仓库的路径为oss://demo-bucket/dockers/,镜像名称为localhost:5000/demodockerimage:0.1。

如上图所示,在创建 App 时,选择镜像类型为 Docker,填写 Docker 镜像的名称,以及 OSS Registry 的路径。

  1. 使用 SDK 创建 App

使用 Python SDK 创建 App 时,参考如下的形式:

#encoding=utf-8import sys

from batchcompute import Client, ClientError

from batchcompute import CN_BEIJING as REGION

from batchcompute.resources import (

JobDescription, TaskDescription, DAG, AutoCluster, GroupDescription, ClusterDescription, AppDescription

)

ACCESS_KEY_ID='xxxx' # 填写您的 ACCESS_KEY_ID

ACCESS_KEY_SECRET='xxxx' # 填写您的 ACCESS_KEY_SECRETdef main():

try:

client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET)

app_desc = {

"Name":"Docker-app-demo",

"Daemonize":False,

"Docker":{

"Image":"localhost:5000/demodockerimage:0.1",

"RegistryOSSPath":"oss://demo-bucket/dockers/"

},

"CommandLine":"python test.py",

#其他参数这里不详细展示

}

appName = client.create_app(app_desc).Name

print('App created: %s' % appName)

except ClientError, e:

print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg())

if name == 'main':

sys.exit(main())

如上面的实例代码所示,在AppDescription中填写 Docker 信息的Image和RegistryOSSPath。

三、Docker 镜像更新

假如 App 中使用的 ISV 提供的软件或算法有更新,您只需要更新 Docker 镜像,并用 Tag 标识版本。然后更新 App 信息中的 Docker 镜像名称就可以。

  1. 使用控制台更新

如上图所示,在 App 列表中找到需要更新的 App,点击修改按钮进入 App 的修改页面。

如上图所示,在修改页面,修改 App 的 Docker 镜像名称后,点击提交即可完成 App 的更新。

  1. 使用 SDK 更新

使用 Python SDK 来更新 App 的 Docker 信息可参考如下示例:

#encoding=utf-8

import sys

from batchcompute import Client, ClientError

from batchcompute import CN_BEIJING as REGION

from batchcompute.resources import (

JobDescription, TaskDescription, DAG, AutoCluster, GroupDescription, ClusterDescription, AppDescription

)

ACCESS_KEY_ID='xxxx' # 填写您的 ACCESS_KEY_ID

ACCESS_KEY_SECRET='xxxx' # 填写您的 ACCESS_KEY_SECRET

def main():

try:

client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET)

app_desc = {

"Name":"Docker-app-demo",

"Daemonize":False,

"Docker":{

"Image":"localhost:5000/demodockerimage:0.2",

"RegistryOSSPath":"oss://demo-bucket/dockers/"

},

"CommandLine":"python test.py",

"EnvVars": {}

}

res = client.modify_app("Docker-app-demo", app_desc)

print res

except ClientError, e:

print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg())

if name == 'main':

sys.exit(main())

对于简单的修改 Docker 版本号的情况,推荐使用控制台,操作更简单。