资讯详情

资讯详情

Docker入门与实战——实战案例(编程开发)(二)

实战案例编程开发5、Go5.1、使用官方镜像5.2、Go项目容器化5.3、Beego5.4、Gogs基于Go的Git服务5.5、相关资源6、PHP6.1、使用官方镜像6.2、配合Apache使用6.3、定制镜像6.4、PHP常用框架6.4.1、CakePHP6.4.2、Zend6.5、相关资源7、Rust7.1、使用官方镜像7.2、使用自定义Dockerfile7.3、相关资源5、GoGo语言也称Golang是一个由Google主导研发的编程语言于2009年推出。它的语法清晰明了设计精良拥有一些先进的特性还有一个庞大的标准库。Go语言的基本设计理念是编译效率、运行效率和开发效率要三者兼顾。使用Go进行开发一方面有很多灵活的语法支持另一方面可以媲美C/C的运行和编译效率。此外Go提供了轻量级的协程支持大规模并发场景。5.1、使用官方镜像运行Go语言环境的最简单方法是使用官方Golang镜像。用户可以使用docker run命令直接启动Go语言的交互环境用户还可以将Go编译指令写入Dockerfile中基于此Dockerfile构建自定义镜像。具体步骤如下。第一步新建项目文件夹并在根目录新建Dockerfile可以通过build和run命令构建镜像启动容器5.2、Go项目容器化我们已经知道了如何运行一个Go语言的hello world容器。下面介绍如何将一个标准的Go语言项目容器化。首先下载Golang官方提供的outyet示例项目示例项目搭建成功后用户可以按照以下模板自定义项目的Dockerfile如果使用onbuild版本的基础镜像那么复制源文件构建与配置等过程就会自动完成无须在Dockerfile中逐一配置下面构建并运行此Golang项目。在outyet项目根目录中执行docker build命令使用本地目录下的Dockerfile在构建过程中Docker会从Docker Hub中获取Golang基础镜像复制本地包文件构建项目并给镜像打上outyet标签。下面使用docker run命令运行此镜像其中–publish标签配置端口映射将容器的8080端口映射至外部6060端口其中–name标签给容器命名易于调用其中–rm标签配置运行状态如果outyet服务退出则删除镜像。此时用户的实例项目的容器已经在运行状态。打开浏览器访问http://localhost:6060/即可看到运行界面如图所示。需要结束容器时打开新的命令行窗口输入docker stoptest即可。如果需要了解更多Golang项目容器化细节可 以参考Golang官方提供的容器化指引https://blog.golang.org/docker。5.3、BeegoBeego是一个使用Go思维来帮助开发者构建并开发Go应用程序的开源框架。Beego使用Go语言开发思路来自Tornado路由设计来源于Sinatra。Beego框架具有以下特性。简单化支持RESTful、MVC模型可以使用bee工具快速地开发应用包括监控代码修改进行热编译自动化测试代码以及自动化打包部署。智能化支持智能路由、智能监控可以监控QPS、内存消耗、CPU使用以及goroutine的运行状况让线上应用尽在掌握。模块化Beego内置了强大的模块包括Session、缓存操作、日志记录、配置解析、性能监控、上下文操作、ORM模块、请求模拟等强大的模块足以支撑任何应用。高性能Beego采用了Go原生的HTTP包来处理请求goroutine的并发效率足以应付大流量的Web应用和API应用目前已经应用于大量高并发的产品中。1.准备工作首先下载并安装Beego然后创建文件hello.go编译运行打开浏览器并访问http://localhost:8080。至此第一个Beego项目已经构建成功了。2.Beego项目容器化首先新建Beego项目。用户可以使用bee命令行工具也可以手动创建。当前项目目录结构如下main.go文件代码为main_test.go文件代码为result.html文件代码为invalid-route.html文件代码为app.conf文件代码为编写Dockerfile内容如下生成镜像文件5.4、Gogs基于Go的Git服务Gogs的目标是打造一个简单、快速、轻松的方式来搭建自助Git服务。Gogs使用Go语言开发能够通过独立的二进制分发并且支持Go语言支持的所有平台包括Linux、Mac OSX、Windows以及ARM平台。Gogs的特性如下。易安装除了可以使用不同操作系统平台的二进制包外还可以通过Docker或Vagrant以及包管理安装。跨平台任何支持Go语言的平台都可以运行Gogs包括Windows、Mac、Linux以及ARM。轻量级一个廉价的树莓派的配置足以满足Gogs的最低系统硬件要求。开源化所有的代码都开源在GitHub上。使用官方镜像可以通过docker run命令直接使用Gogs官方镜像同时通过参数定义端口以及卷可见容器已经正常启动读者可以打开浏览器通过容器的外网IP并加10880端口访问Gogs服务。如果需要停止此镜像可以使用docker stop与docker rm命令如果需要将数据持久化可以先新建数据文件夹然后将其作为数据卷挂载至Gogs容器中5.5、相关资源Go语言官网https://golang.org。Go官方镜像https://registry.hub.docker.com/_/golang/。Google Go镜像https://registry.hub.docker.com/u/google/golang/。Beego仓库https://github.com/beego/beego。Gogs官网https://gogs.io/。Gogs官方镜像仓库https://hub.docker.com/r/gogs/gogs/。6、PHPPHPHypertext Preprocessor超文本预处理器是一种通用开源脚本语言语法吸收了C语言、Java和Perl的特点利于学习应用广泛主要适用于Web开发领域。PHP执行效率比完全生成HTML标记的CGI要高许多PHP还可以执行编译后代码编译可以实现到加密和优化代码运行使代码运行得更快。下面笔者将重点讲解PHP语言的Docker环境并简述PHP主流MVC框架的Docker环境。6.1、使用官方镜像第一步在PHP项目的根目录中新建一个Dockerfile新建hello.php文件第二步运行docker build命令构建镜像第三步执行以下命令运行Docker镜像如果需要运行简单的甚至单文件的PHP项目那么每次都写Dockerfile会很麻烦。在这种情况下可以用以下命令挂载PHP项目6.2、配合Apache使用通常情况下PHP项目需要和Apache HTTPD/Nginx一起运行。这样就需要PHP容器中内含Apache Web Server。可以使用带有Apache标签的镜像如php:5.6-apache。第一步在PHP项目的根目录中新建一个Dockerfile并使用Docker Hub官方的基础镜像其中src/是当前包含所有PHP代码的目录。第二步使用此Dockerfile构建自定义镜像第三步创建并运行此镜像建议加入一个自定义的php.ini配置文件将其复制到/usr/local/lib这样可以对PHP项目做更多的定制化如开启某些PHP插件或者对PHP解释器进行一些安全/性能相关的配置。添加方法很简单注意src/是当前存放PHP代码的文件夹config/文件夹包含php.ini文件。如果希望直接使用官方镜像运行PHP项目可以执行以下命令Docker Hub上的优质PHP镜像很多笔者特别推荐tutum团队发布的系列镜像包括apache-php​具体地址可以在Docker Hub中搜索php或者tutum php。6.3、定制镜像第一步下载PHP官方基础镜像之后可以使用docker images命令查看PHP基础镜像是否安装完成命令结果显示PHP 5.6.2已经安装完成5.6.2即为目前最新的PHP官方镜像标签​。第二步将在Docker中运行一个PHP容器输出交互命令行(CLI)注意以上命令中的docker/php是镜像名称如果出现以下报错则说明镜像名称写错可以修正后重试如果镜像名称正确可以看到PHP交互命令行可以使用PHP容器打印hello docker字符串至此PHP容器已经可以正常运行。第三步使用PHP容器运行一个PHP代码文件。首先需要确定当前目录位置笔者使用pwd命令创建一个sample目录新建一个PHP文件此时会打开一个空文件然后输入i进入Vim的编辑模式输入如下代码下面基于之前创建的SSHD镜像构建一个能够方便地运行PHP业务代码的镜像run.sh文件的内容如下然后构建此镜像构建镜像成功后运行此镜像查看是否启动成功使用49160端口可以打开PHP页面使用49159端口可以打开SSH服务此处打开PHP页面还可以通过浏览器访问http://[宿主机IP]:49160来访问用户的示例程序如图所示。6.4、PHP常用框架PHP MVC框架资源非常丰富。常用的Web解决方案中涉及Zend、Yii、CakePHP、ThinkPHP、CodeIgniter、Lavarel等。下面将阐述PHP常见框架项目的容器化方法。6.4.1、CakePHPCakePHP是Rails风格的全栈开源MVC框架提供了完整的高级框架所需的所有组件如脚手架代码生成器​、模板引擎、功能全面的ORM、完整的面向对象的封装如CakeRequest、AppModel、AppController等​。CakePHP社区完善企业级使用者众多是优秀的快速开发框架。使用官方镜像首先下载Docker Hub镜像然后使用docker [container] run命令运行CakePHP容器注意/path/to/project不能指向app/文件夹内部而应该指向项目根目录。最后打开浏览器并打开localhost:80查看运行结果如图所示。6.4.2、ZendZend Framework(ZF)是用PHP 5来开发Web程序和服务的开源框架。ZF用纯面向对象编码实现它的组件结构独一无二每个组件几乎不依靠其他组件。这样的松耦合(use-at-will)结构可以让开发者独立使用各种组件。Zend框架是PHP Web方案的常用选型之一比较适合业务逻辑较复杂并且对拓展性、稳定性要求较高的中大型Web项目。使用ZF最简单的方式是安装Zend Server。Zend Server是针对关键Web业务的Web应用服务器适合企业级解决方案。下面将介绍Zend Server及其容器化部署。使用Docker Hub镜像Zend Server在Docker Hub上以php-zendserver的名称标示。首先下载Zend Server镜像如果对Zend Server的版本有要求可以在以上命令中加入Tag标签以便在下一步的Dockerfile的FROM指令中明确Zend Server版本号。创建并运行单个Zend Server容器如果需要执行自定义操作可以自定义Dockerfile生成自定义的镜像步骤如下。首先修改Dockerfile加入定制内容。在含有Dockerfile的根目录中执行以下语句构建镜像然后启动单个Zend Server容器如果需要搭建一个Zend Server集群并在每个Zend集群节点都使用来自自定义镜像的Zend Server容器那么可以在每个节点执行以下命令6.5、相关资源PHP官网http://php.net/。PHP官方镜像https://registry.hub.docker.com/_/php/。CakePHP官网http://cakephp.org。CakePHP镜像https://registry.hub.docker.com/u/vcarl/cakephp。Zend官网http://framework.zend.com。ZendServer官网http://www.zend.com/en/products/server。ZendServer官方镜像https://registry.hub.docker.com/_/php-zendserver。7、RustRust语言由Mozilla研发并于2014年9月首次发布。作为一种系统级编程语言Rust设计核心致力于提供高性能、可靠性和生产力它同样支持结构化编程、函数式编程和面向对象编程等多种编程范式。Rust是一种编译型语言通过采用所有权机制来实现自动内存管理并以此来确保内存安全。Rust目前托管于GitHub官方软件包管理器为Cargo编译器遵循MIT License和Apache License 2.0双重开源许可。全球已有上百家公司在生产环境中采用Rust以实现高效率、跨平台和低资源占用的目标。诸如微软、Firefox、Dropbox和Cloudflare等许多知名且深受欢迎的软件都采用了Rust。无论是初创公司还是大型企业无论是嵌入式设备还是可扩展的Web服务Rust都能完美适应。Rust语言具备如下特性。高性能Rust具备惊人的运行速度和极高的内存利用率。由于没有运行时和垃圾回收机制因此Rust可以应对高性能需求的服务可在嵌入式设备上运行并且与其他语言集成毫无难度。可靠性Rust的丰富类型系统和所有权模型确保了内存安全和线程安全允许用户在编译期就消除各类错误。工具栈Rust有着出色的文档、友好的编译器和清晰的错误提示信息。此外Rust还集成了一流的工具包括包管理器和构建工具智能的自动补全和类型检查的多编辑器支持以及自动格式化代码等。7.1、使用官方镜像Docker Hub官方提供了Rust镜像可以直接下载使用如下所示下面新建main.rs文件编写一个Rust程序将代码文件复制进Rust容器。通过rustc命令编译执行生成的main程序Rust的官方软件包管理器名为Cargo。Cargo提供了一套全面的工具集覆盖了从Rust项目的创建、构建、测试、运行到部署的全过程为Rust项目的全生命周期管理提供了强有力的支持。更重要的是Cargo与Rust语言及其编译器rustc紧密集成形成了Rust编程的核心工具链。读者可以直接进入Rust环境使用Cargo的各种命令进行操作。下面将使用Cargo的build功能展示如何创建并运行一个Hello World程序Cargo.toml是Rust清单(manifest)文件。每个清单文件都由[package]​、​[dependency]等部分组成。​[package]部分定义了项目各类元信息​[dependency]部分定义了项目依赖的配置下面通过cargo build构建Rust项目并通过cargo run运行代码7.2、使用自定义Dockerfile首先新建Rust项目文件夹并新建Dockerfile参考内容如下新增/usr/src/myapp目录并将上文的main.rc复制到myapp目录然后通过docker build构建docker run运行自定义镜像此时将创建一个包含所有Rust工具的镜像体积较大。下面的镜像可以只保留编译好的二进制程序7.3、相关资源Rust官网https://www.rust-lang.org。Rust官方镜像https://hub.docker.com/_/rust。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →