使用 Docker 镜像构建 App

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 本文主要为大将讲解如何使用 Docker 镜像创建 App 以及如何更新镜像。

118.jpg
镜像下载、域名解析、时间同步请点击 阿里巴巴开源镜像站

一、准备 App 的 Docker 镜像

1. 制作 Docker 镜像

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

  • 使用 Dockfile 制作镜像
  • 使用容器快速制作镜像

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

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

2. 本地调试Docker镜像

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

3. 推送到镜像仓库

可以将制作好的 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
1.png
如上图所示,在创建 App 时,选择镜像类型为 Docker,填写 Docker 镜像的名称,以及 OSS Registry 的路径。

2. 使用 SDK 创建 App

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

#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.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 信息的ImageRegistryOSSPath

三、Docker 镜像更新

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

1. 使用控制台更新

2.png
如上图所示,在 App 列表中找到需要更新的 App,点击修改按钮进入 App 的修改页面。
3.png
如上图所示,在修改页面,修改 App 的 Docker 镜像名称后,点击提交即可完成 App 的更新。

2. 使用 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 版本号的情况,推荐使用控制台,操作更简单。

阿里巴巴开源镜像站 提供全面,高效和稳定的镜像下载服务。钉钉搜索 ' 21746399 ‘ 加入镜像站官方用户交流群。”

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3天前
|
关系型数据库 MySQL 应用服务中间件
Docker 镜像的创建(二)
Docker 镜像的创建(二)
|
3天前
|
缓存 Linux Apache
Docker 镜像的创建(一)
Docker 镜像的创建(一)
|
3天前
|
运维 监控 Docker
构建高效微服务架构:从理论到实践构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第31天】 在当今软件开发的世界中,微服务架构已经成为了实现可伸缩、灵活且容错的系统的关键策略。本文将深入探讨如何从零开始构建一个高效的微服务系统,涵盖从概念理解、设计原则到具体实施步骤。我们将重点讨论微服务设计的最佳实践、常用的技术栈选择、以及如何克服常见的挑战,包括服务划分、数据一致性、服务发现和网络通信等。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们构建出既健壮又易于维护的微服务系统。
|
4天前
|
Kubernetes 开发者 Docker
构建高效微服务架构:Docker与Kubernetes的协同应用
【5月更文挑战第30天】 在当今软件开发领域,微服务架构已成为实现系统模块化、提升可维护性及扩展性的关键策略。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理,共同构建一个既高效又可靠的后端微服务环境。我们将剖析Docker和Kubernetes的核心功能,以及它们如何相辅相成,支撑起现代化的云原生应用程序部署和管理。文章还将提供具体实践案例,帮助开发者理解将理论应用于实际开发过程中的步骤和考虑因素。
|
5天前
|
Kubernetes Cloud Native 开发者
构建高效的云原生应用:Docker与Kubernetes的完美搭档
【5月更文挑战第29天】 在现代软件开发领域,"云原生"这一术语已经成为高效、可扩展和弹性的代名词。本文将深入探讨如何通过Docker容器化技术和Kubernetes集群管理工具实现云原生应用的构建和管理。我们将剖析Docker的核心原理,揭示其轻量级和易于部署的特点,并进一步探索Kubernetes如何为这些容器提供编排,保证应用的高可用性与自动扩缩容。文章不仅讨论了二者的技术细节,还提供了实践案例,帮助开发者理解并运用这些技术构建和维护自己的云原生应用。
|
4天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的实践
【5月更文挑战第30天】 在当今的快速迭代和持续部署的软件发布环境中,自动化运维的重要性愈发凸显。本文旨在探讨如何利用容器化技术与微服务架构,特别是Docker和Kubernetes,来构建一个高效、可伸缩且自愈的自动化运维体系。通过详细分析容器化的优势及Kubernetes的集群管理机制,文章将提供一个清晰的指南,帮助读者理解并实现现代软件部署的最佳实践。
|
5天前
|
Docker 容器
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
5 0
|
5天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【5月更文挑战第29天】 在现代云计算环境中,自动化运维已成为提升服务效率、确保系统稳定性的关键因素。本文深入探讨了如何利用Docker容器化技术和Kubernetes集群管理工具来构建一个高效且灵活的自动化运维体系。通过分析具体实施步骤和策略,我们旨在为读者提供一个清晰的指导框架,以支持他们在不断变化的技术需求中快速部署和扩展应用程序。本指南不仅涉及技术的基础知识,还涵盖了持续集成/持续部署(CI/CD)流程的集成,以及监控和日志管理的优化实践。
|
5天前
|
运维 监控 持续交付
构建高效自动化运维系统:基于Docker Swarm的策略与实践
【5月更文挑战第29天】 在现代企业IT基础架构管理中,自动化运维已成为提升效率、确保稳定性的关键因素。本文通过探讨基于Docker Swarm的集群管理和自动化部署策略,旨在为读者提供一个构建和维护高效自动化运维系统的全面视角。文章不仅涵盖了Docker Swarm的基础概念和关键特性,还深入分析了如何结合持续集成/持续部署(CI/CD)流程,实现无人工干预的服务部署和横向扩展。此外,文中也讨论了监控、日志和故障恢复等运维实践,以期帮助读者构建一个既可靠又灵活的自动化运维平台。
|
6天前
|
运维 监控 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【5月更文挑战第28天】 在当今快速演变的IT环境中,自动化已成为维护系统稳定性与提高效率的关键。本文将探讨如何通过结合Ansible和Docker技术构建一个高效的自动化运维体系。文章不仅介绍两者的基本概念,还详细阐述了集成实践,以及通过真实案例分析其优势和潜在挑战,旨在为读者提供一套可行的解决方案,以优化他们的DevOps流程。