容器、微服务、深度学习和阿里云

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: > 今年去参加Qcon上海2016开发者大会,发现大家都在讲容器、微服务、深度学习这些高端的东西,所以抓紧时间学习和总结了一下,给大家吹吹牛,算是不虚此行吧。 ### 容器 基于Linux内核中的[Control Groups](http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isola

今年去参加Qcon上海2016开发者大会,发现大家都在讲容器、微服务、深度学习这些高端的东西,所以抓紧时间学习和总结了一下,给大家吹吹牛,算是不虚此行吧。

容器

基于Linux内核中的Control Groupsnamespace技术,对运行的进程做隔离和控制。Linux内核还在不断创新中,《Unix 环境高级编程》没有包含这些新技术,所以很多人对此一无所知。

不同于一般的虚拟化技术,在host中可以看到容器里面运行的进程。image和container的关系就像是可执行程序和进程的关系。

22957 ?        Sl     0:00  |   \_ docker-containerd-shim 9f4669fd46ab076cca3b71d67f697b1e9768e351bc40be3a85fa4e02eb92720a /var/run/docker/libcontainerd/9f4669fd46ab076cca3b
22971 pts/4    Ss     0:00  |   |   \_ sh -c service ssh start; bash
23029 ?        Ss     0:00  |   |       \_ /usr/sbin/sshd
23032 pts/4    S+     0:00  |   |       \_ bash
23593 ?        Sl    29:49  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/h
24149 ?        Sl    36:09  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/usr/local/hadoop/logs -Dyarn.log.dir=/us
23065 ?        Sl     0:00  |   \_ docker-containerd-shim 1262b62afcac0c41ede4c28484a9697246e67c87c3945c1dd16cff3319689514 /var/run/docker/libcontainerd/1262b62afcac0c41ede4
23079 pts/5    Ss     0:00  |   |   \_ sh -c service ssh start; bash
23138 ?        Ss     0:00  |   |       \_ /usr/sbin/sshd
23141 pts/5    S+     0:00  |   |       \_ bash
23591 ?        Sl    29:02  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/h
24167 ?        Sl    35:48  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/usr/local/hadoop/logs -Dyarn.log.dir=/us

但是容器看不到host和别的容器的信息。

root@hadoop-master:~# ps xf
  PID TTY      STAT   TIME COMMAND
  579 ?        Sl     0:08 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoo
  120 ?        Ss     0:00 bash
  904 ?        R+     0:00  \_ ps xf
   93 ?        Ss+    0:00 bash
    1 ?        Ss     0:00 sh -c service ssh start; bash
   31 ?        Ss     0:00 /usr/sbin/sshd
   34 ?        S+     0:00 bash
  239 ?        Sl     0:05 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_namenode -Xmx1000m -Djava.net.pre
  428 ?        Sl     0:03 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_secondarynamenode -Xmx1000m -Djav

有了docker,学习真的是一件很容易的事情。比如要搭建一个多节点的Hadoop集群,社区早有人做好了镜像,pull下来就能跑得飞起。参考文章:基于Docker搭建Hadoop集群之升级版。例子中创建了三个容器,一个master(跑yarn),两个slave(跑dfs),这样就有了一个三节点的集群,然后把Hadoop集群跑起来。

还有比这更简单的Hadoop搭建的学习环境吗?

screenshot.png

root@hadoop-master:~# ./run-wordcount.sh 
16/11/08 12:28:32 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/172.20.0.2:8032
16/11/08 12:28:33 INFO input.FileInputFormat: Total input paths to process : 2
16/11/08 12:28:33 INFO mapreduce.JobSubmitter: number of splits:2
16/11/08 12:28:33 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1478607997885_0001
16/11/08 12:28:34 INFO impl.YarnClientImpl: Submitted application application_1478607997885_0001
16/11/08 12:28:34 INFO mapreduce.Job: The url to track the job: http://hadoop-master:8088/proxy/application_1478607997885_0001/
16/11/08 12:28:34 INFO mapreduce.Job: Running job: job_1478607997885_0001
16/11/08 12:28:43 INFO mapreduce.Job: Job job_1478607997885_0001 running in uber mode : false
16/11/08 12:28:43 INFO mapreduce.Job:  map 0% reduce 0%
16/11/08 12:28:52 INFO mapreduce.Job:  map 50% reduce 0%
16/11/08 12:28:53 INFO mapreduce.Job:  map 100% reduce 0%
16/11/08 12:28:59 INFO mapreduce.Job:  map 100% reduce 100%
16/11/08 12:28:59 INFO mapreduce.Job: Job job_1478607997885_0001 completed successfully
16/11/08 12:28:59 INFO mapreduce.Job: Counters: 49
    File System Counters
        FILE: Number of bytes read=56
        FILE: Number of bytes written=352398
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=258
        HDFS: Number of bytes written=26
        HDFS: Number of read operations=9
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters 
        Launched map tasks=2
        Launched reduce tasks=1
        Data-local map tasks=2
        Total time spent by all maps in occupied slots (ms)=14221
        Total time spent by all reduces in occupied slots (ms)=4203
        Total time spent by all map tasks (ms)=14221
        Total time spent by all reduce tasks (ms)=4203
        Total vcore-milliseconds taken by all map tasks=14221
        Total vcore-milliseconds taken by all reduce tasks=4203
        Total megabyte-milliseconds taken by all map tasks=14562304
        Total megabyte-milliseconds taken by all reduce tasks=4303872
    Map-Reduce Framework
        Map input records=2
        Map output records=4
        Map output bytes=42
        Map output materialized bytes=62
        Input split bytes=232
        Combine input records=4
        Combine output records=4
        Reduce input groups=3
        Reduce shuffle bytes=62
        Reduce input records=4
        Reduce output records=3
        Spilled Records=8
        Shuffled Maps =2
        Failed Shuffles=0
        Merged Map outputs=2
        GC time elapsed (ms)=141
        CPU time spent (ms)=1450
        Physical memory (bytes) snapshot=798035968
        Virtual memory (bytes) snapshot=2619658240
        Total committed heap usage (bytes)=509607936
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters 
        Bytes Read=26
    File Output Format Counters 
        Bytes Written=26

input file1.txt:
Hello Hadoop

input file2.txt:
Hello Docker

wordcount output:
Docker    1
Hadoop    1
Hello    2

aufs(Advanced multi layered unification filesystem)也是相当有意思。

~# docker pull xuyecan/ubuntu-shadowsocks
Using default tag: latest
latest: Pulling from xuyecan/ubuntu-shadowsocks
bf5d46315322: Already exists 
9f13e0ac480c: Already exists 
e8988b5b3097: Already exists 
40af181810e7: Already exists 
e6f7c7e5c03e: Already exists 
64995ac659ee: Pull complete 
Digest: sha256:0cfb5275581be3e6a5cce3f230ff9c3ef714f3c9291b76eb41e2f47d7362a994
Status: Downloaded newer image for xuyecan/ubuntu-shadowsocks:latest

Docker for Mac

Mac上使用Docker也是非常简单的呢。首先下载并安装https://download.docker.com/mac/stable/Docker.dmg,然后把App启动起来。因为官方源比较慢,可以配置一下阿里云的镜像:https://imuewcw.mirror.acs.aliyun.com

screenshot.png

配置完成之后,点击下方Apply & Restart就好了。以前想要在Linux环境下测试一些东西可麻烦了,现在有了Docker for Mac,在Mac上拉一个Ubuntu,用起来真的很方便。

[~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              05a60462f8ba        5 days ago          181.5 MB
ubuntu              latest              f753707788c5        4 weeks ago         127.2 MB
[~]$ docker run -ti f753707788c5
root@76cb78b38af5:/# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
NAME="Ubuntu"
VERSION="16.04.1 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.1 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
UBUNTU_CODENAME=xenial

CoreOS

CoreOS是一个非常极端的Linux发行版,它没有传统的包管理系统,比如yum和apt-get,完全使用docker来做包管理。比如要使用gcc,那么需要去pull一个gcc的image,然后通过目录贡献的方式来编译代码。

CoreOS自带了fleet做服务的管理,fleet大大方便了运维同学管理服务。CoreOS fleet之初体验这篇文章通过一个demo较好地讲述了fleet的使用。

阿里云与时俱进,也提供CoreOS镜像。

screenshot.png

微服务

这篇文章:微服务实战(一):微服务架构的优势与不足总结得非常到位。
再附上同参加Qcon的一位同事的理解:2016上海Qcon大会--我所看到的微服务

深度学习

screenshot.png

AWS 首席云计算技术顾问的AWS 首席云计算技术顾问介绍了一下深度学习的历史及如何搭建环境。

腾讯孙子荀分享的新媒体与深度学习给我留下了深刻的印象。通过深度学习给出适合每个人的最佳推送时间、合理裁切图片、分析文章质量等等。

目前有很多优秀的深度学习框架,比如Google开源的TensorFlow,被广泛应用于各种场景。其实我也想总结点啥,但是实在说不出来,大家自行去学习莫烦 tensorflow 神经网络 教程吧,这个TensorFlow的系列教程很赞。

Jupyter & TensorBoard对于初学者很有用。

screenshot.png

screenshot.png

阿里云

阿里云对容器有丰富的支持,包括Docker Registry容器服务HPC等等。阿里云使用Docker Swarm做服务编排。

轻松利用现有ECS实例大家容器服务集群。

screenshot.png

更是有大量关于TensorFlow的文章。

本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案

第一篇:打造TensorFlow的实验环境
第二篇:轻松搭建TensorFlow Serving集群
第三篇:打通TensorFlow持续训练链路

服务编排

用户只关心自己的服务,至于服务如何跑起来,并发和容错就要交给编排工具去做了。目前比较流行的编排工具有Docker Swarm、Google Kubernetes、Apache Mesos。(据我所知,搜索团队用的是自己开发的Hippo)

  1. 通过基于Docker搭建单机版Mesos/Marathon这篇文章,可以理解一下Mesos的基本原理及使用。
  2. 通过镜像创建 Nginx介绍了如何使用阿里云容器服务创建Nginx应用,可以了解一下Docker Swarm。把Nginx服务运行起来之后,可以到相应的机器上查看到对应的container。
root@cbb4515a0d85e4014b0a37d455793a89e-node1:~# docker ps -a | grep nginx
556348917c43        nginx:latest                                             "nginx -g 'daemon off"   2 weeks ago         Exited (0) 2 minutes ago                                                      nginx_nginx_1

推荐资料

  1. 书籍:《Docker技术入门与实践》,链接:Docker — 从入门到实践
  2. 阿里云容器服务文档。
  3. 云栖社区有很多关于容器、深度学习、阿里云容器服务的相关文章,值得阅读。
  4. Mesos
  5. TensorFlow 官方文档中文版
相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
Kubernetes 负载均衡 安全
【技术揭秘】阿里云容器服务Ingress高级玩法:如何轻松实现客户端原始IP透传,提升应用安全性与用户体验!
【8月更文挑战第17天】本文介绍如何在阿里云容器服务中配置Ingress以透传客户端原始IP地址。通过Ingress可实现HTTP负载均衡等功能。需在Ingress定义文件中添加特定注解,如`nginx.ingress.kubernetes.io/real-ip-header: X-Real-IP`。创建并应用Ingress配置后,后端服务可通过读取`X-Real-IP`头获取真实IP。此举有助于安全审计及流量分析。
|
4天前
|
Cloud Native 算法 持续交付
云原生之旅:从容器到微服务
在数字化时代的浪潮中,云原生技术如同一座灯塔,指引着企业航向灵活、高效的未来。本文将深入浅出地探索云原生的核心概念,包括容器化、微服务架构以及持续集成与持续部署(CI/CD),旨在为读者揭开云原生的神秘面纱,展现其在现代软件开发中的革命性影响。通过实际案例分析,我们将一同见证云原生技术如何助力企业实现快速迭代和高弹性的IT架构。
23 2
|
4天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 07 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
7天前
|
API
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态
阿里云微服务引擎及 API 网关 2024 年 7 月产品动态。
|
18天前
|
弹性计算 运维 Kubernetes
阿里云容器化管理云上应用一键部署评测报告
阿里云容器服务Kubernetes版(ACK)作为阿里云在容器化领域的旗舰产品,以其卓越的性能、便捷的操作体验和高度的可扩展性,赢得了众多企业的青睐。
|
8天前
|
运维 Kubernetes 安全
云时代的运维之光:容器化与微服务架构的融合之道
在数字化浪潮中,企业IT架构的演进从未停歇。本文以浅显的语言探讨了容器技术与微服务架构如何协同工作,提高运维效率。我们将从基础概念出发,逐步深入到它们在实际工作中的应用,最后分享一些行业内的最佳实践。无论你是运维新手还是资深专家,这篇文章都将为你带来新的视角和思考。
|
11天前
|
运维 Cloud Native 开发者
云原生时代:容器化与微服务架构的融合之旅
【8月更文挑战第9天】 在数字化浪潮的推动下,企业纷纷上云以追求更高效的运营模式。本文将深入探讨云原生技术的核心——容器化与微服务架构的结合,揭示它们如何共同塑造现代软件的开发与部署。通过浅显易懂的语言和实际案例,我们将一同见证这场技术变革给企业带来的创新与挑战,以及开发人员如何在这波潮流中找到自己的立足点。
16 4
|
10天前
|
运维 Cloud Native Android开发
云原生之旅:容器化与微服务架构的融合之道安卓应用开发入门指南
本文将深入探讨云原生技术的核心要素——容器化和微服务架构,并揭示它们如何共同推动现代软件的开发与部署。通过实际案例分析,我们将看到这两种技术如何相辅相成,助力企业实现敏捷、可扩展的IT基础设施。文章旨在为读者提供一条清晰的道路,指引如何在云原生时代利用这些技术构建和优化应用。 本文将引导初学者了解安卓应用开发的基本概念和步骤,从安装开发环境到编写一个简单的“Hello World”程序。通过循序渐进的讲解,让读者快速掌握安卓开发的核心技能,为进一步深入学习打下坚实基础。
19 1
|
10天前
|
Cloud Native 虚拟化 云计算
云原生之旅:从容器化到微服务的演变之路
在数字化浪潮的推动下,云计算已从简单的虚拟化技术演化为更为高效、灵活的云原生架构。本文将通过浅显易懂的语言,带领读者一探云原生技术的核心—容器化与微服务,并揭示它们如何共同塑造现代软件的开发与运维。我们将从容器化的基础知识讲起,逐步深入到微服务架构的设计原则,最后探讨这些技术如何助力企业实现敏捷和创新。让我们跟随技术的脉络,一起探索这场云原生的革命吧!
|
11天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:从容器到微服务
在数字化时代的浪潮中,企业不断寻求更高效、灵活的软件开发与部署方式。云原生技术,作为一种新兴的架构模式,正引领着这一变革。本文将深入浅出地探讨云原生的核心组件——容器技术,并揭示它如何助力微服务架构的发展,最终实现应用的快速迭代和弹性扩展。