手机设置没有手机高级设置在哪里?

developerWorks 社区
使用 Docker
更富有成效地编码,更高效地扩展您的技能。简化您的开发环境,消除依赖项冲突,并使用容器化的应用程序来减少开发和学习时间。
, 顾问, Makawave
Sing Li 自 developerWorks 网站创立以来就一直是该网站的作者,他撰写了涉及各种 Web 和 Java 主题的文章和教程。Sing Li 拥有 20
多年的系统工程经验,从嵌入式系统开始,一直到可伸缩企业系统,现在又回到 Web 级启用了移动的微服务和 “物联网” 生态系统的研究上。
就像是用于
DevOps 的一把瑞士军刀,这一点已得到充分证明。但 Docker 托管的应用程序容器的用途不仅是在云中部署服务器。Docker
容器还可以在许多常见的开发场景中帮助开发和显著提高生产力。本教程将重点介绍 Docker,了解从开发人员角度讲它有何用途。我将介绍
Docker,解释基本概念和术语,并提供一系列实际的开发示例。您会看到: Docker 可以可简化 Node.js Web 应用程序编码。您可以使用 Docker 在 Apache Tomcat 服务器上快速创建和测试 Java™ Enterprise
Edition (Java EE) 应用程序。Docker 可以通过 Bottle 框架加快 Python Web 应用程序的编码、测试和开发。您可以通过使用一个 Docker 容器,在几分钟内创建并测试一个具有 NoSQL 数据库后端的完整的三层 Node.js
应用程序。您可以在单个 Linux 系统上获得所有这些收益,而不会妨碍任何预设的配置。在了解一些示例后,您就能够轻松地运行各种 Docker
容器来提高日常开发工作流中的生产力。 Docker 基础Docker
是一个容器管理器。容器将应用程序和它的依赖项捆绑在一起。您从一个存储在存储库中的镜像实例化每个容器,在主机操作系统内隔离的虚拟化环境中运行容器。因为虚拟化技术(通常)是轻量型的,所以您可以同时运行多个容器: 您可以使用 Docker 容器管理器执行以下操作:从镜像运行容器检查和操作运行的容器的属性停止运行的容器在运行的容器内执行额外的任务启动或重新启动运行的容器执行其他许多管理任务容器化的应用程序几乎可以在任何地方运行:桌面 PC 上、服务器上、公共云中,甚至是在一些移动电话上。 Linux 目前是得到最广泛使用和支持的 Docker 平台。Docker 所管理的容器化(轻量型虚拟化)技术在 Linux
平台上最成熟,使用了最新的 Linux 特性,比如
和 。如何运行 Docker您可以通过 docker 命令行客户端来运行 Docker
容器管理器,该客户端有许多可用的开关和选项。这是运行容器化应用程序镜像(在这个例子中是 MySQL 数据库)的一个简化的命令:docker run -d mysql:5.5Docker 项目运行着可公开访问的 。用户可以注册并创建自己的容器化应用程序镜像存储库,然后推送镜像来供大家共同使用。例如,您可以找到
Tomcat 服务器、Node.js 和大多数流行的开源数据库的镜像。Docker Hub 的操作理念与
相同,因为应用程序镜像是全球 DevOps
和开发人员社区共享和协同创建的。举例而言,运行 docker run -d mysql:5.5 命令时,如果还没有将
mysql(5.5 版)容器化应用程序镜像存储在本地,就会自动从 Docker Hub 拉取(下载)它。 构建容器化应用程序镜像还可以使用 docker 命令行客户端来构建容器化应用程序镜像。一种方式是从 Dockerfile
构建镜像 — 一个包含如何安装、设置和配置一个应用程序和它的依赖项的说明的文本文件。使用 docker
命令行客户端构建容器化镜像的另一种方法是以交互方式设计它们。您在一个运行的容器内手动安装和配置一个应用程序和它的依赖项,然后提交容器并保存为镜像。一个 Docker 镜像包含一些层,每层大体相当于在安装一组应用程序期间写入磁盘的更改。Docker
管理这些层,并帮助在添加或删除这些镜像时高效地存储和重用。举例而言,一个 mysql 镜像中的层可能包含 Linux
操作系统、Perl、共享库、MySQL 安装和一种基本的 MySQL 配置:从 Dockerfile 构建容器化镜像或设计自定义容器时,通常不会从头开始。相反,您的工作以现有的
Dockerfile 或一个来自 Docker Hub
的镜像为基础。这样,开发人员和操作人员就能够以彼此的工作为基础,协同创建和管理一组有用的镜像。将镜像发送到镜像存储库(比如 Docker Hub)的命令是 docker push。下载镜像以供本地使用的命令是
docker pull。开始之前“即使使用 Java、Tomcat、Node.js、Python 和 CouchDB
进行开发,也不需要安装它们中的任何一个。这是在开发工作流中使用 Docker 的美妙之处。”在开始之前,需要一个安装并运行 Docker 的 Linux 系统。要安装 Docker,可以按照适合您的 Linux 发行版的
进行操作。如果无法直接访问 Linux
系统,可以依靠云。大多数云主机都提供了随时可运行的虚拟服务器或虚拟机,只需几分钟就可以为它们配备
Linux 并(通过 SSH 或基于 Web 的终端)连接到它们。这些主机通常与 Docker 兼容。本教程中的示例假设您在 Linux 系统上运行 Docker。如果您已经在 Mac OS X 或另一个非 Linux 系统上运行
Docker,您的容器可能会在一个由虚拟机管理程序虚拟化的额外虚拟机(常常为 )内运行。在这种情况下,您需要相应地修改示例中的命令才能继续操作。检查您的 Docker 版本运行以下命令来检查您的 Docker 版本:docker --version如果您运行 1.8.3 或更高版本,您的系统现在已经设置好。即使使用 Java、Tomcat、Node.js、Python 和 Apache
CouchDB 进行开发,也不需要安装或卸载它们中的任何一个。这是在开发工作流中使用 Docker 的美妙之处。拉取镜像第一次从 Docker Hub pull(拉取)一个镜像时,必须将它下载到本地 PC
的存储库。根据您的网络访问速度,下载可能很耗时,但对镜像的后续使用将会很快。运行以下命令来拉取您将在示例中使用的所有镜像:docker pull node:0.10.40
docker pull java
docker pull tomcat:8
docker pull webratio/ant
docker pull python:3.5
docker pull frodenas/couchdb有关每个镜像的更多信息,请访问
Docker Hub 的 、、、、 和
页面。现在,在设置完成后,就可以使用 Docker 处理一个 Node.js 应用程序来进行我们的探索了。快速设置和开发服务器端 JavaScript 代码代码发行版中的
javascript
目录(参见 )包含一个使用 Node.js
编写的网络商店示例应用程序的源代码。该应用程序(最初由 Lauren Schaefer 设计和编写)使用了
Web 框架和
模板引擎。(有关这个应用程序的更多信息,请参阅
“。”)通过使用
Docker,您可以在您的计算机上使用这个应用程序,无需安装 Node.js 或它的任何依赖项— 或者排除包安装冲突。主要程序在 app.js 中。CSS 和关联的 JavaScript 文件在 javascript/public/static 中。Jade 模板在
javascript/view 中。运行以下命令来安装此应用程序的 Node.js 依赖项:docker run -it --rm --name lllnode -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 npm install此命令将会启动 Node 容器,将当前应用程序目录挂载到容器中,然后在应用程序上运行 npm install:基础命令是 docker run ? node:0.10.40,它创建一个容器实例并运行您之前拉取的
node:0.10.40 镜像。-it 开关指定您想要一个前台交互式终端。(备用模式是分离的后台进程,可以使用 -d
指定它。)--rm 开关指定执行清理,表示在您退出容器后,Docker
会立即删除它。如果没有指定此开关,该容器会以停止状态持久保存在磁盘上,而且您可以从中断点开始重新启动它。但是,对于忘记删除容器实例的用户而言,重新启动容器是磁盘耗尽的常见来源。如果不使用
--rm,那么任何时候都能运行以下命令来查看您遗留下了多少陈旧的停止容器(数量可能会让您吃惊):docker ps -a--name lllnode 选项显式命名容器,这对在其他 Docker
命令中引用该容器很有用。如果没有显式命名容器,Docker 会为它分配一个生成的文本名称 —
这个名称通常没什么意义。您还可以通过内部 ID(一个很长、对人类不友好的十六进制字符串)来引用该容器。-v "$PWD":/usr/src/myapp 选项创建一个卷挂载点。将您当前的工作目录
($PWD) 挂载为容器内的 /usr/src/myapp。然后可从该容器内访问应用程序的 Node.js
源代码(或您当前的工作目录中可能拥有的其他任何 Node.js 源代码)。-w /usr/src/myapp
选项设置您运行的命令的工作目录。在这个示例中,工作目录更改为挂载的卷。docker run 命令末尾的 npm install
命令在工作目录上的容器内运行。最终结果是您通过容器在当前目录上运行 npm install— 而不安装 Node.js 或它的任何前提软件。在命令输出中,您可以看到 npm 正在运行的所有依赖项:在安装依赖项后,可以通过容器运行该应用程序。使用此命令(将它键入为一行):docker run -it --rm --name lllnode --env PORT=8011 --net="host" -v
"$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 node app.js这个命令类似于您之前运行的命令。但请注意,要在容器内运行的命令现在是
node app.js,它将启动应用程序。查看 app.js 的内容。您会找到以下行:var appEnv = cfenv.getAppEnv();
app.listen(appEnv.port, appEnv.bind, function() {
console.log("server starting on " + appEnv.url);
});这些行导致 Express Web 服务器在 PORT 环境变量指定的端口上监听。为了在容器中设置此环境变量,您刚运行的
--env PORT=8011 选项。此外,该命令的 --net="host"
选项导致容器使用主机操作系统内部的网络堆栈(仅用于开发用途)。然后该应用程序在主机上的端口 8011 上进行监听。在浏览器中访问 http://localhost:8011/,您可以在其中看到基于运行的容器的 Lauren's Lovely
Landscapes 印刷品商店:您随时可以退出容器来修改代码或修复错误,然后再次运行容器— 所有操作在几秒内即可完成,不会让开发环境变得杂乱。 在几秒内从 Node.js 转换为 Java EE现在您已确信 Docker 只需几秒即可启动并运行一个 Node.js 应用程序,您可能想知道它如何更轻量型地处理一些工作 — 比如
Java EE 开发。很高兴为您解答。假设您刚刚阅读了我的 “” 教程,并渴望试用我的 Java EE Vaadin 示例。但您没有安装
JDK,而且不想因为花一下午时间笨拙地安装一个 JDK 而将系统弄得一团糟。Docker 可以拯救您! 的 java
目录中的 ArticleViewer.war 文件是一个包含来自 Vaadin 教程的多个 Vaadin UI 组件的应用程序。您可以通过
服务器上运行
ArticleViewer.war。第一步是从您之前拉取的镜像启动一个 Tomcat 8
容器实例:docker run -it --rm -p
--name=tomcat_server -v $PWD:/mnt tomcat:8这个命令现在看起来可能很熟悉。为了更方便引用,容器名为 tomcat_server。您目前的工作目录在容器内挂载为
选项告诉 Docker 将主机系统的端口 8888 映射到容器的(内部)端口 8080。在
tomcat 镜像的
中,您可以看到 Tomcat 在容器内的端口 8080 上执行监听。通过浏览器访问 http://localhost:8888/,您可以在其中看到熟悉的 Tomcat 8 服务器欢迎页面:请注意您保持容器在交互式模式下运行(通过 -it 开关)。在该模式下,会在标准输出中连续显示日志,以方便开发。附加到一个运行的 Docker 容器现在,容器内挂载的目录 /mnt 是您当前的工作目录,ActiveViewer.war 位于该目录中。将 ActiveViewer.war 从 /mnt 复制到 Tomcat 8 的 webapps 目录,它会在这里自动部署:docker exec tomcat_server cp /mnt/ArticleViewer.war /usr/local/tomcat/webapps这一次不需要使用 docker run
命令,因为
tomcat_server 容器已在运行。相反,您连接到运行的容器并运行一个命令。所以您使用了
docker exec,提供
cp /mnt/ArticleViewer.war /usr/local/tomcat/webapps
命令作为整个命令的最后一部分。观看 tomcat_server 窗口中的日志,查看来自 ArticleViewer
应用程序部署的日志轨迹。现在,在浏览器中访问应用程序的
URL(http://localhost:8888/ArticleViewer/)来打开正在运行的应用程序。单击左侧列表中的一篇文章,在右侧查看文章内容:在继续后面的操作之前,停下来思考片刻。您没有在系统上下载或安装 JDK 或 Tomcat 8。只需几秒即可在一个功能全面的 Tomcat 8
服务器上运行 Vaadin 应用程序的代码 — 这得益于 Docker。为 Tomcat 8 开发和构建 Java Web
应用程序您刚才已经看到,可以使用 Docker 轻松地部署用于测试的 Web 应用程序。也可以通过 Docker 同样轻松地从 Java 源代码编译和构建
Web 应用程序 — 同上面一样,无需让您的开发系统变得一团糟或花很长时间安装前提软件。将目录更改为
中的 java/LaurenLandscapesJava。这个目录中包含您在
Node.js 示例中看到的 Lauren's Lovely Landscapes 应用程序的一个 Java
版本。(如果想了解该代码的更详细描述,请阅读 “”。)build.xml 文件是一个标准的
构建文件,它包含编译代码和构建 WAR 文件的指令。通过使用 webratio ,可以在更改代码后(或其他任何时刻)快速编译和构建 WAR:docker run -it --rm -v "$PWD":/mnt webratio/ant bash -c 'cd / ant'您现在已经熟悉了这个 docker run 命令中的所有内容。该命令在作为 /mnt 挂载在容器内的当前工作目录内运行
Ant 构建工具。Ant 编译 src 子目录中的所有 Java 源代码,然后构建并绑定 WAR 文件,将它作为 lauren.war 放在
dist 子目录中。将 lauren.war 从 java/LaurenLandscapesJava/dist 目录复制到
java 目录:cp dist/lauren.war
..您可以使用此命令将 lauren.war 应用程序部署到 Tomcat 8:docker exec tomcat_server cp /mnt/lauren.war /usr/local/tomcat/webapps此命令附加到运行的 tomcat_server 容器,并将 lauren.war 文件复制到 Tomcat 8 的
webapps 子目录中用于自动部署。现在,在浏览器中访问 http://localhost:8888/lauren/,您可以在其中看到在您的 Docker 化 Tomcat 8 上运行的
Lauren's Lovely Landscape 的 Java 版本。从 Java 切换到 Python假设作为一位多语言开发人员的您希望暂时不执行 Java 编码,探索
提供的可能性。为了帮助您快速探索 Python Web
应用程序开发,避免麻烦的安装和依赖项带来的痛苦,Docker 再次挽救了您。更改到代码发行版的 python/Laurens.Lovely.Landscapes 目录。该目录中包含 Lauren's Lovely
Landscape 应用程序的 Python 版本 — 为 Bottle Web 框架而编写。模板(.tpl 文件)位于 views
子目录中。(有关该代码的更多信息,请查阅 “。”)还可以在关联的
Bluemix DevOps Services
中找到此代码的一个版本。运行这个 Python 应用程序 — 而不将 Python 安装在您的系统上— 通过以下 Docker
命令(将它们键入为一行): docker run -it --rm --name lllpython -p
-v "$PWD":/usr/src/myapp -w
/usr/src/myapp python:3.5 python wsgi.py现在在浏览器中访问 http://localhost:8000/,您可以在其中看到正在运行的 Lauren's Lovely
Landscapes 应用程序的 Python 版本。在 Python 中开发时,您可以更改代码并重新运行之前的命令来进行测试。运行 Docker 容器就像运行安装在本地的开发工具一样快。添加和启动一个分离的数据库大多数现代 Web 应用程序都涉及 3 层:浏览器作为客户端;一个中间层应用服务器,比如 Express、Tomcat 8 或
Bottle;以及一个后端数据库。通过使用 Docker,您可以快速添加一个数据库,无需将它安装在您的开发系统上。在这个最后的示例中,您将一个 Apache CouchDB 数据库服务器添加到您的开发环境中。您可以使用 CouchDB API(它与 IBM
Cloudant NoSQL 数据库完全兼容)在本地测试 CouchDB 或 Cloudant 代码。更改到源代码发行版中的数据库目录。这个目录中包含 Lauren's Lovely Landscapes 应用程序的高级 Node.js
版本。此版本从 CouchDB(或 Cloudant)抓取印刷品商店的库存信息。该网络商店依据可用印刷品的库存来动态更改外观。(您可以在 “”
中找到该代码的更多信息。)要启动 Apache CouchDB 的一个实例,可以使用这个 Docker 命令(将它键入为一行):docker run -d --name couchdb -p
-e COUCHDB_USERNAME=user -e
COUCHDB_PASSWORD=abc123 -e COUCHDB_DBNAME=prints -v $PWD/data:/data frodenas/couchdb该命令使用 COUCHDB_USERNAME、COUCHDB_PASSWORD 和
COUCHDB_DBNAME 环境变量来配置实例,以便与代码中使用的值匹配。当前的工作目录在容器内挂载为
/data。CouchDB 将数据写入此目录中,使您可以重新启动容器而不丢失数据。请注意,在这个示例中,您使用了 -d 选项运行该容器,而不是使用 -it --rm
选项。-d 选项启动分离的 CouchDB 实例。您可以使用 docker ps
命令查看所有正在运行的分离的 docket 容器。接下来安装应用程序的 Node.js 依赖项:docker run -it --rm --name llldepends -v "$PWD":/usr/src/myapp -w /usr/src/myapp node:0.10.40 npm installApache CouchDB 实例还没有任何数据。使用以下命令(将它键入为一行)来运行 dataseeder.js 代码,该代码在 Apache
CouchDB 实例中创建一个文档,以便在商店中填充库存:docker run -it --rm --name dataseeder --net="host" -v "$PWD":/usr/src/myapp -w
/usr/src/myapp node:0.10.40 node dataseeder.js在端口 8011 上运行 lllnode 应用程序:docker run -it --rm --name lllnode --env PORT=8011 --net="host" -v "$PWD":/usr/src/myapp
-w /usr/src/myapp node:0.10.40 node app.js在浏览器中访问 http://localhost:8011/ 来打开 Lauren's Lovely Landscapes 商店:您可以看到澳大利亚的印刷品已脱销。该产品类别突出显示为红色,无法选中。为了模拟对澳大利亚印刷品补货的过程,您将访问 Apache CouchDB 文档并直接修改库存水平。Apache CouchDB 提供了一个简单的 GUI(名为 Futon)来访问存储的文档。在浏览器中访问
http://127.0.0.1:5984/_utils/ 来打开 Futon GUI:在 Futon 中,选择 prints。打开文档并展开编号为 3 的库存项。双击澳大利亚印刷品以打开文档进行编辑。将
quan 字段从 0 更改到
3。单击右侧的小型绿色勾号图标,然后单击左上角的 Save Document:数据库中的数量更新后,在浏览器中重新加载页面
http://localhost:8011/。您可以看到商店现在已屯满货。澳大利亚印刷品不再标记为红色,而且可以选中。使用 3 层 Web 应用程序时,Docker 简化了中间层应用程序编码的开发工作流,方便了即时本地部署后端数据库来实现测试。结束语在这个竞争激烈的时代,您承受不起没有将 Docker
整合进开发工作流中的生活。通过消除反复安装和卸载相互依赖的复杂开发人员包和工具的需求,Docker 可以缩短您的开发时间和探索时间。利用
Docker 来提高您的多语言开发智商,显著提高您的开发生产力。
下载描述名字大小代码示例22MB
参考资料 :在项目网站上了解 Docker 的更多信息。:从社区 Docker 镜像存储库拉取镜像或向其贡献您自己的镜像。:探索一个用于
Python 的轻量型 Web 框架 Bottle。:了解如何在 IBM Bluemix 上托管的云环境中运行 Docker
容器。 “”:了解将 Docker 二进制文件安装在 Linux on Power
系统上的步骤。 提供了大量资源。 随时关注专注于各种 IBM 产品和 IT 行业主题的。
在 。 加入 。探索开发人员推动的博客、论坛、群组和维基,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Web development, Open source, Java technologyArticleID=1027437ArticleTitle=Docker:带给现代开发人员的福利publish-date=后使用快捷导航没有帐号?
Docker持续部署图文详解
查看: 9940|
评论: 0|原作者: 萧田国、张春源|来自: InfoQ
摘要: 前言关于Docker的文章铺天盖地,但精品文章往往翻译居多。都说Docker天生适合持续集成/持续部署,但同样,可落地、实际可操作性的文章也很罕见。基于这些情况,虽然我们专栏定位为运维管理性文字,但本篇是个特例,
前言关于Docker的文章铺天盖地,但精品文章往往翻译居多。都说Docker天生适合持续集成/持续部署,但同样,可落地、实际可操作性的文章也很罕见。基于这些情况,虽然我们专栏定位为运维管理性文字,但本篇是个特例,实操性的案例讲解——项目如何通过Docker实现持续部署(只需简单四步),即:开发同学通过git push上传代码,经Git和Jenkins配合,自动完成程序部署、发布,全程无需运维人员参与。这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境(首先是测试/开发环境)。难者不会,会者不难。通过简单的4个配置,即可优雅地实现持续部署。本文依惯例放上目录,请享用。持续部署的技术思路效果展示配置Git和Jenkins联动配置Jenkins自动更新代码效果图文详解FAQ好吧,我们正式开始。1. 持续部署的技术思路在本例中,假设我们JAVA项目的名称为hello。简要的技术思路如下。本案例中假设代码托管在上,Jenkins和Docker Registry(类似于yum源)各运行在一个Docker容器中。JAVA项目自己也单独运行在一个叫hello的容器中。本文采取的持续部署方案,是从私有的Docker Registry拉取代码。有些变通的方案,把代码放在宿主机上,让容器通过卷组映射来读取。这种方法不建议的原因是,将代码拆分出容器,这违背了Docker的集装箱原则:这也导致装卸复杂度增加。从货运工人角度考虑,整体才是最经济的。这样,也才能实现真正意义的容器级迁移。或者说,容器时代,抛弃过去文件分发的思想,才是正途。本文最后的问答环节对此有更多阐述。容器即进程。我们采用上述方案做Docker持续部署的原因和意义,也在于此。容器的生命周期,应该远远短于虚拟机,容器出现问题,应该是立即杀掉,而不是试图恢复。2. 效果展示本文最后实现的效果,究竟有多惊艳呢?且看如下的演示。2.1 程序代码更新前的效果我们以时间戳来简洁、显式的表述程序更新情况。2.2 提交程序代码更新本例中,我们把首页的时间戳从,修改为(见如下)。2.3 上传新代码到Git顺序执行如下操作,输入正确的git账号密码。然后呢?然后什么都不用做了。端杯茶(如果不喜欢咖啡的话),静静地等待自动部署的发生, 旁观一系列被自动触发的过程,机器人似的运转起来(请容稍候再加以描述)。为什么需要3~5分钟?只是因为本案例中的JAVA项目,需要从国外download Maven程序包,以供Jenkins调用和编译JAVA。正式应用环境中,可以把Maven源放在国内或机房。如果仅仅需要对PHP项目做持续部署,那就更快捷了。2.4 查看代码更新后的效果在静静地等待几分钟后,新的代码确实已经自动部署完毕。那么,这一切怎么实现的呢?很复杂么?不然。只要按照如下几步,便可快速实现哦。3. 配置Git和Jenkins联动这个过程也是难者不会,会者不难。主要分为如下三步。3.1 Jenkins配置Git源Jenkins中新建项目java-app,并配置从Git拉取程序代码。具体如下:3.2 Jenkins配置远程构建Jenkins中配置token,以供git远程调用时使用。3.3 Git开启钩子怎么让Git在接收到用户更新的代码后,把消息和任务传递给Jenkins呢?这借助于Git的hook功能,配置起来也非常简单,如下。4. 配置Jenkins自动更新代码Jenkins的主要工作是配置“远程构建”。在接收到Git传递过来的消息后,触发这个远程构建(到目标服务器),按照预定义的任务列表,执行一系列的工作,重建容器等。详见如下:我们把其中最关键的Shell脚本内容摘抄出来。这些Docker相关操作,在第1部分“技术思路”已经提及,不再赘述。5. 效果图文详解在2.3这个章节中,我们当时的操作如下,这个目的是向Git提交更新代码。当时并没有细说后续发生的事情,既然上面已经说清楚了原理,那我们就可以接下来说说实际发生的事情啦。5.1 上传代码到Git这里貌似整个过程已经完成并顺利退出。其实,后台的工作才刚刚开始哦。这时会触发Git服务器向相应的Jenkins服务器发出一个操作请求,此工作太过迅速,也没啥好说的,我们接下来看Jenkins都干啥子了。5.2 Jenkins进行的精彩互动如下这个自动运转的过程,让我们有些许成就感,值得端杯咖啡(如果不喜欢茶的话),静静观赏。1)Jenkins会自动"冒出来"一个构建任务。2)我们点进来,看看具体操作日志。是的,正在接受来自Git的任务。3)下载Maven相关的软件包(就是这个过程慢)。4)下载完成后,就开始利用maven BUILD 新的hello项目包。5)然后重建Maven容器,构建新的Image并Push到Docker私有库中。6)最后,重新把Docker容器拉起来。这样,又新生了。呵呵6. FAQ问题1:采用这么相对复杂的办法(而不是把更新代码放在宿主机然后卷组映射),是因为项目基于JAVA么;是否PHP项目就可以采用更新代码放在宿主机然后卷组映射这种方式?回答1:将代码拆分出容器,违背了集装箱原则。导致装卸复杂度增加。从货运工人角度考虑,整体才是最经济的。一切版本化。抛弃过去的文件分发。这是正途。至于文件大小,大的war包也就50M或100M,在现有网络下不成问题,性能问题最好优化。另外建议关注docker 2 docker,p2p传输。问题2:如果整体代码超过500m或者1g以上,整体集装箱是否就不太好了?如果容器与代码分离,镜像就100m左右(2层,base+服务),然后代码的话,是放到共享存储里,每个代码有更新,比如svn的代码,可以直接在共享存储里进行svn update就可以控制版本回答2:如果你的代码500M,那只能说明业务开发该打板子了。问题3:如果测试环境使用您提供的完整集装箱服务还行,但在生产环境,集群里运行docker做应用,如果每个容器都是有完整的代码,是否有点臃肿,不如每个集群节点里就运行基础服务镜像,通过卷组功能绑定共享存储里的代码,加上Crontab、Python和Shell脚本,这样每次代码更新就1次就行了。回答3:环境一致性,在过去从来没有解决好。10年前我们做paas时,和这个做法类似。不是说不好,时代变了,用脚本东拼西凑,终究难有好的系统。不能只考虑现在的方便,容器技术和vm如果类比,我觉得会让自己下决定时很纠结。补充3:脚本一般是典型的运维工程师思维,quick & dirty。一般很难做成一个产品或者系统。整体考虑和扩展性考虑都比较少。现在做docker的难点在于到底怎么看待它。到底是拿它做调度的基本单位,还是部署的基本单位考虑清楚?再聊方案。备注:上述问题的回答,主要由王利俊@cSphere和陈尔冬@华为完成。关于作者萧田国 ,男,硕士毕业于北京科技大学,触控科技运维负责人。拥有十多年运维及团队管理经验。先后就职于联想集团(Oracle数据库主管)、搜狐畅游(数据库主管)、智明星通及世纪互联等。从1999年开始,折腾各种数据库如Oracle/My/MS SQL Server/等,兼任数据库培训讲师若干年。曾经的云计算行业从业者,现在喜欢琢磨云计算及评测、云端数据库,及新技术在运维中的应用。主张管理学科和运维体系的融合、人性化运维管理,打造高效、专业运维团队。张春源,目前任职cSphere。国内最早期的Docker实践者,在生产环境拥有一年多的Docker容器管理经历。深刻理解Docker对于开发、测试以及运维的价值。擅长利用Docker构建整个DevOps自动化平台。热爱专研Dockerfile这门艺术,并对CoreOS有深入研究。
上一篇:下一篇:

我要回帖

更多关于 手机wifi高级设置 的文章

 

随机推荐