首页 文章 精选 留言 我的

精选列表

搜索[播客],共4711篇文章
优秀的个人博客,低调大师

Docker 三剑之 Docker Compose

Docker Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排,开源地址:https://github.com/docker/compose Docker Compose 中的两个重要概念: 服务 (service):一个应用容器,实际上可以运行多个相同镜像的实例。 项目 (project):由一组关联的应用容器组成的一个完整业务单元。 一个项目可以由多个服务关联(容器)而成,并使用docker-compose.yml进行管理。 安装命令: $ curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose 这种方式安装巨慢无比,我们可以使用 PIP 安装,如果没有 PIP 环境,需要手动安装下: $ apt-get update $ apt-get -y install python-pip 或 $ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" $ python get-pip.py $ pip --help $ pip -V PIP 安装命令: $ sudo pip install -U docker-compose PIP 安装之后,执行 Docker Compose 命令的时候,会出现下面错误: $ docker-compose up Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg 解决方式,从官方源中手动下载安装包,然后移动到制定目录赋予权限,命令如下: $ cp -i docker-compose-Linux-x86_64 /usr/local/bin $ mv docker-compose-Linux-x86_64 docker-compose $ chmod +x /usr/local/bin/docker-compose 安装好之后,我们就可以使用 Docker Compose 进行容器编排了,我们就拿之前做的HelloDocker.Sample项目做为示例。 我们在HelloDocker.Sample.Web项目目录下,创建docker-compose.yml配置文件,示例: consul: command: agent -bind=10.9.10.89 -client=0.0.0.0 -node=vagrant-ubuntu-xishuai -retry-join=10.9.2.236 image: consul:latest ports: - 8300:8300 - 8400:8400 - 8500:8500 - 8600:53/udp net: host fabio: image: magiconair/fabio:latest ports: - 9999:9999 - 9998:9998 net: host volumes: - /etc/fabio/fabio.properties:/etc/fabio/fabio.properties environment: - SERVICE_9998_TAGS=urlprefix-/fabio hello-docker: ports: - 54917:54917 build: . net: host 其实看配置就明了了,一个项目中包含三个服务(consul,fabio和hell-docker容器),Docker Compose 对这三个服务进行编排部署,我们执行docker-compose up命令,启动项目: $ docker-compose up -d Creating hellodockerweb_fabio_1 ... Creating hellodockerweb_hello-docker_1 ... Creating hellodockerweb_consul_1 ... Creating hellodockerweb_fabio_1 Creating hellodockerweb_hello-docker_1 Creating hellodockerweb_consul_1 ... done 我们可以执行docker-compose ps, 查看运行的服务(容器): $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------ hellodockerweb_consul_1 docker-entrypoint.sh agent ... Up hellodockerweb_fabio_1 /fabio -cfg /etc/fabio/fab ... Up hellodockerweb_hello-docker_1 dotnet HelloDocker.Web.dll Up 或者执行docker-compose logs,查看日志: docker-compose logs Attaching to hellodockerweb_consul_1, hellodockerweb_hello-docker_1, hellodockerweb_fabio_1 consul_1 | ==> Starting Consul agent... consul_1 | ==> Consul agent running! consul_1 | Version: 'v1.0.0' consul_1 | Node ID: '521358bc-efc0-1a69-4a58-a9bfc8a9b09c' consul_1 | Node name: 'vagrant-ubuntu-xishuai' consul_1 | Datacenter: 'dc1' (Segment: '') consul_1 | Server: false (Bootstrap: false) consul_1 | Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, DNS: 8600) consul_1 | Cluster Addr: 10.9.10.89 (LAN: 8301, WAN: 8302) consul_1 | Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false consul_1 | consul_1 | ==> Log data will now stream in as it occurs: consul_1 | consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: vagrant-ubuntu-xishuai 10.9.10.89 consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp) consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp) consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started HTTP server on [::]:8500 (tcp) consul_1 | 2017/11/21 04:41:25 [INFO] agent: Retry join LAN is supported for: aws azure gce softlayer consul_1 | 2017/11/21 04:41:25 [INFO] agent: Joining LAN cluster... consul_1 | 2017/11/21 04:41:25 [INFO] agent: (LAN) joining: [10.9.2.236] consul_1 | 2017/11/21 04:41:25 [WARN] manager: No servers available consul_1 | 2017/11/21 04:41:25 [ERR] agent: failed to sync remote state: No known Consul servers consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: agent_1 10.9.2.236 consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: windows64-xishuai 10.9.10.187 consul_1 | 2017/11/21 04:41:25 [INFO] agent: (LAN) joined: 1 Err: <nil> consul_1 | 2017/11/21 04:41:25 [INFO] agent: Join LAN completed. Synced with 1 initial agents consul_1 | 2017/11/21 04:41:25 [INFO] consul: adding server agent_1 (Addr: tcp/10.9.2.236:8300) (DC: dc1) consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service 'fabio-vagrant-ubuntu-trusty-9998' hello-docker_1 | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35] hello-docker_1 | No XML encryptor configured. Key {3d8c2a18-ed43-4df9-980f-8573175ebecf} may be persisted to storage in unencrypted form. hello-docker_1 | Hosting environment: Production hello-docker_1 | Content root path: /app hello-docker_1 | Now listening on: http://[::]:54917 hello-docker_1 | Application started. Press Ctrl+C to shut down. fabio_1 | 2017/11/21 04:41:25 [INFO] Setting log level to INFO fabio_1 | 2017/11/21 04:41:25 [INFO] Runtime config fabio_1 | { fabio_1 | "Proxy": { fabio_1 | "Strategy": "rnd", fabio_1 | "Matcher": "prefix", fabio_1 | "NoRouteStatus": 404, fabio_1 | "MaxConn": 10000, fabio_1 | "ShutdownWait": 0, fabio_1 | "DialTimeout": 30000000000, fabio_1 | "ResponseHeaderTimeout": 0, fabio_1 | "KeepAliveTimeout": 0, fabio_1 | "FlushInterval": 1000000000, fabio_1 | "LocalIP": "10.0.2.15", fabio_1 | "ClientIPHeader": "", fabio_1 | "TLSHeader": "", fabio_1 | "TLSHeaderValue": "", fabio_1 | "GZIPContentTypes": null, fabio_1 | "RequestID": "" fabio_1 | }, fabio_1 | "Registry": { fabio_1 | "Backend": "consul", fabio_1 | "Static": { fabio_1 | "Routes": "" fabio_1 | }, fabio_1 | "File": { fabio_1 | "Path": "" fabio_1 | }, consul_1 | 2017/11/21 04:41:34 [WARN] agent: check 'service:8a600176-4c58-4edc-95af-71fc27345954' has deregister interval below minimum of 1m0s consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service '8a600176-4c58-4edc-95af-71fc27345954' consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service 'fabio-vagrant-ubuntu-trusty-9998' consul_1 | 2017/11/21 04:41:35 [INFO] agent: Synced check 'service:fabio-vagrant-ubuntu-trusty-9998' consul_1 | 2017/11/21 04:41:40 [INFO] agent: Synced check 'service:8a600176-4c58-4edc-95af-71fc27345954' consul_1 | ==> Newer Consul version available: 1.0.1 (currently running: 1.0.0) consul_1 | 2017/11/21 04:41:57 [WARN] memberlist: Refuting a suspect message (from: agent_1) fabio_1 | "Consul": { fabio_1 | "Addr": "10.9.10.89:8500", fabio_1 | "Scheme": "http", fabio_1 | "Token": "", fabio_1 | "KVPath": "/fabio/config", fabio_1 | "TagPrefix": "urlprefix-", fabio_1 | "Register": true, fabio_1 | "ServiceAddr": "10.9.10.89:9998", fabio_1 | "ServiceName": "fabio", fabio_1 | "ServiceTags": null, fabio_1 | "ServiceStatus": [ fabio_1 | "passing" fabio_1 | ], fabio_1 | "CheckInterval": 1000000000, fabio_1 | "CheckTimeout": 3000000000, fabio_1 | "CheckScheme": "http", fabio_1 | "CheckTLSSkipVerify": false fabio_1 | }, fabio_1 | "Timeout": 10000000000, fabio_1 | "Retry": 500000000 fabio_1 | }, fabio_1 | "Listen": [ fabio_1 | { fabio_1 | "Addr": ":9999", fabio_1 | "Proto": "http", fabio_1 | "ReadTimeout": 0, fabio_1 | "WriteTimeout": 0, fabio_1 | "CertSource": { fabio_1 | "Name": "", fabio_1 | "Type": "", fabio_1 | "CertPath": "", fabio_1 | "KeyPath": "", fabio_1 | "ClientCAPath": "", fabio_1 | "CAUpgradeCN": "", fabio_1 | "Refresh": 0, fabio_1 | "Header": null fabio_1 | }, fabio_1 | "StrictMatch": false, fabio_1 | "TLSMinVersion": 0, fabio_1 | "TLSMaxVersion": 0, fabio_1 | "TLSCiphers": null fabio_1 | } fabio_1 | ], fabio_1 | "Log": { fabio_1 | "AccessFormat": "common", fabio_1 | "AccessTarget": "", fabio_1 | "RoutesFormat": "delta", fabio_1 | "Level": "INFO" fabio_1 | }, fabio_1 | "Metrics": { fabio_1 | "Target": "", fabio_1 | "Prefix": "{{clean .Hostname}}.{{clean .Exec}}", fabio_1 | "Names": "{{clean .Service}}.{{clean .Host}}.{{clean .Path}}.{{clean .TargetURL.Host}}", fabio_1 | "Interval": 30000000000, fabio_1 | "Timeout": 10000000000, fabio_1 | "Retry": 500000000, fabio_1 | "GraphiteAddr": "", fabio_1 | "StatsDAddr": "", fabio_1 | "Circonus": { fabio_1 | "APIKey": "", fabio_1 | "APIApp": "fabio", fabio_1 | "APIURL": "", fabio_1 | "CheckID": "", fabio_1 | "BrokerID": "" fabio_1 | } fabio_1 | }, fabio_1 | "UI": { fabio_1 | "Listen": { fabio_1 | "Addr": ":9998", fabio_1 | "Proto": "http", fabio_1 | "ReadTimeout": 0, fabio_1 | "WriteTimeout": 0, fabio_1 | "CertSource": { fabio_1 | "Name": "", fabio_1 | "Type": "", fabio_1 | "CertPath": "", fabio_1 | "KeyPath": "", fabio_1 | "ClientCAPath": "", fabio_1 | "CAUpgradeCN": "", fabio_1 | "Refresh": 0, fabio_1 | "Header": null fabio_1 | }, fabio_1 | "StrictMatch": false, fabio_1 | "TLSMinVersion": 0, fabio_1 | "TLSMaxVersion": 0, fabio_1 | "TLSCiphers": null fabio_1 | }, fabio_1 | "Color": "light-green", fabio_1 | "Title": "", fabio_1 | "Access": "rw" fabio_1 | }, fabio_1 | "Runtime": { fabio_1 | "GOGC": 800, fabio_1 | "GOMAXPROCS": 1 fabio_1 | }, fabio_1 | "ProfileMode": "", fabio_1 | "ProfilePath": "/tmp" fabio_1 | } fabio_1 | 2017/11/21 04:41:25 [INFO] Version 1.5.3 starting fabio_1 | 2017/11/21 04:41:25 [INFO] Go runtime is go1.9.2 fabio_1 | 2017/11/21 04:41:25 [INFO] Metrics disabled fabio_1 | 2017/11/21 04:41:25 [INFO] Setting GOGC=800 fabio_1 | 2017/11/21 04:41:25 [INFO] Setting GOMAXPROCS=1 fabio_1 | 2017/11/21 04:41:25 [WARN] Error initializing backend. Get http://10.9.10.89:8500/v1/agent/self: dial tcp 10.9.10.89:8500: getsockopt: connection refused fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Connecting to "10.9.10.89:8500" in datacenter "dc1" fabio_1 | 2017/11/21 04:41:25 [INFO] Admin server access mode "rw" fabio_1 | 2017/11/21 04:41:25 [INFO] Admin server listening on ":9998" fabio_1 | 2017/11/21 04:41:25 [INFO] Waiting for first routing table fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Using dynamic routes fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Using tag prefix "urlprefix-" fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Watching KV path "/fabio/config" fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Manual config changed to #3821244 fabio_1 | 2017/11/21 04:41:34 [INFO] HTTP proxy listening on :9999 fabio_1 | 2017/11/21 04:41:34 [INFO] Access logging disabled fabio_1 | 2017/11/21 04:41:34 [INFO] Using routing strategy "rnd" fabio_1 | 2017/11/21 04:41:34 [INFO] Using route matching "prefix" fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Health changed to #3821756 fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with id "fabio-vagrant-ubuntu-trusty-9998" fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with address "10.9.10.89" fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with tags "" fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with health check to "http://[10.9.10.89]:9998/health" fabio_1 | 2017/11/21 04:41:35 [INFO] Config updates fabio_1 | + route add test /test http://10.9.2.236:23421/ fabio_1 | 2017/11/21 04:41:35 [INFO] consul: Health changed to #3821762 fabio_1 | 2017/11/21 04:41:40 [INFO] consul: Health changed to #3821765 fabio_1 | 2017/11/21 04:41:42 [INFO] Config updates fabio_1 | + hello-docker /hello-docker http://10.9.10.89:54917/ fabio_1 | + route add 我们可以查看 Consul UI 中的服务是否运行正常: 或者查看 Fabio UI 中的服务是否存在(通过健康检查后会出现): YAML 配置命令 配置 说明 build 指定 Dockerfile 所在的目录地址,用于构建镜像,并使用此镜像创建容器,比如上面配置的build: . command 容器的执行命令 dns 自定义 dns 服务器 expose 暴露端口配置,但不映射到宿主机,只被连接的服务访问 extends 对docker-compose.yml的扩展,配置在服务中 image 使用的镜像名称或镜像 ID links 链接到其它服务中的容器(一般桥接网络模式使用) net 设置容器的网络模式(四种:bridge,none,container:[name or id]和host) ports 暴露端口信息,主机和容器的端口映射 volumes 数据卷所挂载路径设置 Docker Compose 常用命令 命令 说明 docker-compose build 构建项目中的镜像,--force-rm:删除构建过程中的临时容器;--no-cache:不使用缓存构建;--pull:获取最新版本的镜像 docker-compose up -d 构建镜像、创建服务和启动项目,-d表示后台运行 docker-compose run ubuntu ls -d 指定服务上运行一个命令,-d表示后台运行 docker-compose logs 查看服务容器输出日志 docker-compose ps 列出项目中所有的容器 docker-compose pause [service_name] 暂停一个服务容器 docker-compose unpause [service_name] 恢复已暂停的一个服务容器 docker-compose restart 重启项目中的所有服务容器(也可以指定具体的服务) docker-compose stop 停止运行项目中的所有服务容器(也可以指定具体的服务) docker-compose start 启动已经停止项目中的所有服务容器(也可以指定具体的服务) docker-compose rm 删除项目中的所有服务容器(也可以指定具体的服务),-f:强制删除(包含运行的) 本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/docker-compose.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Docker 三剑之Docker Compose详解

随着开发者对Docker了解的深入,使用其进行分布式部署变得复杂。开发者需要在开发,测试以及生产环境中的可移植应用,这些应用需要在不同的平台提供商之间迁移,比如在不同的云平台或者私有数据中心部署,同时,应用应该是可组合的,一个应用可以分解为多个服务。 Docker公司在2014年12月发布了三款用于解决多容器分布式软件可移植部署的问题。 Docker Machine为本地,私有数据中心及公有云平台提供Docker引擎,实现从零到Docker的一键部署。 Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。 Docker Swarm为Docker容器提供了原生的集群,它将多个Docker引擎的资源汇聚在一起,并提供Docker标准的API,使Docker可以轻松扩展到多台主机。 Compose是用来编排和管理多容器应用的工具,使用它,你可以通过定义一个YAML文件来定义你的应用的所有服务,然后通过一条命令,你就可以创建并启动所有的服务。 使用Compose仅需要三步: - 使用Dockerfile定义你的应用依赖的镜像; - 使用docker-compose.yml定义你的应用(APP)具有的服务; - 通过docker-compose up命令创建并运行应用; Compose的特性 将单个主机隔离成多个环境;Compose使用项目名称(project name)将不同应用的环境隔离开,项目名称可以用来: 在开发机上,将应用环境复制多份; 防止使用了相同名称服务的应用之间互相干扰; 默认情况下,项目名称是项目文件夹根目录的名称,你可以使用-p标识或COMPOSE_PROJECT_NAME改变默认的名称。 保护卷中的数据; Compose保护服务使用的所有卷(vloumes),当运行docker-compose run命令时,如果Compose发现存在之前运行过的容器,它会把旧容器中的数据卷拷贝到新的容器中,这保证了你在卷中创建的任何数据都不丢失。 只重新创建改变过的容器; Compose会缓存用于创建容器的配置信息,当你重启服务时,如果服务没有被更改,Compose就会重用已经存在的容器,这无疑加快了修改应用的速度; Compose 文件是一个YAML文件,用于定义services、netword和volumes。 Compose 文件的默认路径为./docker-compose.yml(后缀为.yml和.yaml都可以)。 一个service配置将会应用到容器的启动中,很像将命令行参数传递给docker run。 同样,network和volume定义类似于docker network create和docker volume create。与Docker运行一样,默认情况下尊重Dockerfile中指定的选项(例如CMD,EXPOSE,VOLUME,ENV) - 您不需要在docker-compose.yml中再次指定它们。 docker-Compose 配置命令参考https://deepzz.com/post/docker-compose-file.html docker-Compose 实际例子参考http://blog.csdn.net/vchy_zhao/article/details/70238413 本文转自yzy121403725 51CTO博客,原文链接:http://blog.51cto.com/lookingdream/2065387,如需转载请自行联系原作者

优秀的个人博客,低调大师

海量数据时代,存储“氦”,应对企业存储之需

移动互联、云计算的发展,产生的数据种类和数量也越来越复杂和众多。比如为了实现医疗的移动互联服务,需要越来越清晰的像素,比如VR的发展需要更具有空间感的数据,这些需求都是对数据产生了巨大的变化,核心就是数据的海量增长。那么数据的最基本的需求存储介质来说,大容量的硬盘成为趋势。 今天超大容量硬盘是提升企业应用程序价值的一个重要的关键因素,西部数据集团(旗下品牌HGST)通过不断推出容量优化型企业级硬盘,引领行业技术的发展并让产品推广面世。 而基于氦气技术的大容量硬盘成为企业级存储的主要选择之一。HGST Ultrastar氦气密封式系列硬盘成为氦气硬盘的领军产品。 HGST多年前就不断突破存储技术,实现创新的氦气密封式硬盘的技术突破。氦气密封式硬盘是以氦气代替空气,氦气的密度是空气的 1/7,能够有效降低碟片转动时的阻力,从而减少气动剪切消耗的机械功率,从而降低硬盘马达消耗的电能。同时,通过将空气湍流最小化,减少碟片抖动,从而让磁碟能够更紧密地排列,为实现更高容量奠定基础。 氦气密封式技术目前已发展至第三代技术,经过现场验证可随时使用于任何企业级容量应用程序或环境中。密封式设计密封式设计使灰尘和杂质无法进入硬盘内部,这使氦气密封式硬盘具有传统空气硬盘无法企及的可靠性,平均无故障时间(MTFB)可达到 250万小时,以及五年质保,这项技术必将成为公有和私有云部署向前发展的基石。 更为创新的是Ultrastar He系列硬盘推出“即插即用”的解决方案,与8TB传统空气硬盘相比提升了超过25%的容量,同时减少56%的每TB功耗。功耗在业界最低,帮助数据中心架构师满足环保目标和要求。 不久前西部数据集团就宣布,自四年前首次发布HelioSeal平台以来,氦气密封式硬盘出货量已超过一千万台。市场取得巨大成就的同时,HelioSeal平台不断将容量与总拥有成本(TCO)的优势推向更高的极限,成为业界存储密度最高的硬盘,更加适用于大规模向外扩展的工作环境。 西部数据集团持续推出创新且可靠的存储解决方案,协助客户解决数据中心所遇到的各种挑战。相信HelioSeal与未来的磁录技术能够形成互相补充,其不断创新的大容量硬盘,进一步企业级应用和超大规模负载进行设计,满足企业保留大量运营数据和历史数据的容量需求。 历经三代,HelioSeal平台已经创造出目前市面上最高密度的硬盘,提供最高的硬盘可靠性,满足云存储和企业负载等对于可用性与可靠性具有极高要求的环境。 可以看到西部数据集团致力于解决今天数据爆炸式增长下数据可以安全环保快速的访问。而氦气硬盘的推出加速了西部数据集团实现该里程碑的速度,实现在整个云端及现场部署环境下对于数据的广泛的需求。超大数据环境架构正在进行快速的创新,西数希望致力于让数据流动更好的帮助公司进行更准确的决策,最终实现企业驾驭数据力量,实现数据价值最终服务于社会。 结语: 关注大容量硬盘的都知道,氦气大容量硬盘能够提供稳定可靠的海量数据存储,那么您是否想了解今天大容量硬盘的需求是一个什么状况?氦气盘的技术特点有哪些优势?未来的发展是一个什么状况?原文发布时间为:2016年11月29日本文作者:任新勃本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册