当前位置: 首页 > news >正文

Docker技术入门与实战【2.6】

13.6 Ruby

13.6.1 Ruby技术栈

Ruby是一种跨平台的、面向对象的、通用的开源动态脚本语言。Ruby的设计受到Perl、Smalltalk、Eiffel、Ada和Lisp的影响。Ruby支持多种编程范式,如函数编程、面向对象编程、CLI交互式编程。Ruby还有动态的数据类型系统(dynamic type system)和自动的内存管理。由于Ruby设计精良,语法简约,表达能力强,社区火爆的特点,所以在创业型和敏捷型项目中被大量使用,并有持续增长的趋势。

使用官方镜像

我们可以使用Docker官方的Ruby镜像作为基础,在此之上进行必要的定制:

第一步,下载Docker官方的Ruby镜像:

$ sudo docker pull ruby

如果读者对Ruby的版本有要求,可以在以上命令中加入Tag标签,以便于在下一步的Dockerfile的FROM指令中明确Ruby版本号。官方镜像都有明确的标签列表,具体地址可以参见后面的“相关资源”部分。

第二步,在Ruby项目中创建一个Dockerfile:

FROM ruby:2.1.2-onbuild

CMD ["./your-daemon-or-script.rb"]

将此文件放在App的根目录(与Gemfile同级)。注意,我们使用的官方镜像带有onbuild标签,也就意味着它包含了启动大部分Ruby项目所需的基本指令。在构建镜像的时候,Docker会执行COPY./usr/src/app以及RUN bundle install。

第三步,构建自定义镜像:

$ sudo docker build -t my-ruby-app .

第四步,创建并运行此镜像:

$ sudo docker run -it --name my-running-script my-ruby-app

由于我们在构建时使用了带有onbuild标签的镜像,所以在App目录下需要有Gemfile.lock文件。这时可以在App的根目录运行以下命令:

$ sudo docker run --rm -v "$(pwd)":/usr/src/app -w /usr/src/app ruby:2.1.2 bundle install --system

如果读者只需要运行单个Ruby脚本,那么无需使用Dockerfile构建自定义镜像,而是通过以下命令直接使用官方Ruby镜像,带参数运行容器:

$ sudo docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp ruby:2.1.2 ruby your-daemon-or-script.rb

13.6.2 JRuby

JRuby类似于Python的Jython,一个可于Java上运行Ruby的语言,支持Java的接口和类。

使用官方镜像

我们可以使用Docker官方的Ruby镜像作为基础,在此之上进行必要的定制。

第一步,下载Docker官方的JRuby镜像:

$ sudo docker pull jruby

如果读者对JRuby的版本有要求,可以在以上命令中加入Tag标签,以便于在下一步的Dockerfile的FROM指令中明确JRuby版本号。官方镜像都有明确的标签列表,具体地址可以参见后面的“相关资源”部分。

第二步,在JRuby项目中创建一个Dockerfile:

FROM jruby:.1.7.15-onbuild

CMD ["./your-daemon-or-script.rb"]

将此文件放在App的根目录(与Gemfile同级)。注意,我们使用的官方镜像带有onbuild标签,也就意味着它包含了启动大部分JRuby项目所需的基本指令。在构建镜像的时候,Docker会执行COPY./usr/src/app以及RUN bundle install。

第三步,构建自定义镜像:

$ sudo docker build -t my-ruby-app .

第四步,创建并运行此镜像:

$ sudo docker run -it --name my-running-script my-ruby-app

由于我们在构建时使用了带有onbuild标签的镜像,所以在App目录下需要有Gemfile.lock文件。这时可以在App的根目录运行以下命令:

$ sudo docker run --rm -v "$(pwd)":/usr/src/app -w /usr/src/app jruby:1.7.15 bundle install --system

如果读者只需要运行单个JRuby脚本,那么无需使用Dockerfile构建自定义镜像,而是通过以下命令直接使用官方JRuby镜像,带参数运行容器:

$ sudo docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp jruby:1.7.15 jruby your-daemon-or-script.rb

13.6.3 Ruby on Rails

Rails是使用Ruby语言编写的网页程序开发框架。Rails的一些设计理念和机制比较创新和优雅,比较彻底地实现了面向对象编程,也比较满足敏捷开发的需要。很多其他语言的Web MVC框架都有所借
鉴。
使用官方镜像
我们可以使用Docker官方的Rails镜像作为基础,在此之上进行必要的定制:
第一步,下载Docker官方的Rails镜像:$ sudo docker pull rails
如果读者对Rails的版本有要求,可以在以上命令中加入Tag标签,以便于在下一步的Dockerfile的FROM指令中明确Rails版本号。官方镜像都有明确的标签列表,具体地址可以参见后面的“相关资
源”部分。
第二步,在Rails项目中创建一个Dockerfile:
FROM rails:onbuild
将此文件放在App的根目录(与Gemfile同级)。注意,我们使用的官方镜像带有onbuild标签,也就意味着它包含了启动大部分JRuby项目所需的基本指令。在构建镜像的时候,Docker会执行
COPY./usr/src/app,RUN bundle install,以及EXPOSE 3000,并将默认的运行指令设为rails server。
第三步,构建自定义镜像:
$ sudo docker build -t my-rails-app .
第四步,创建并运行此镜像:
$ sudo docker run --name some-rails-app -d my-rails-app
此时读者可以使用浏览器访问http://container-ip:3000。
如果你需要在局域网的另一台机器上访问此容器中的App,可以使用以下命令:
$ sudo docker run --name some-rails-app -p 8080:3000 -d my-rails-app
现在读者可以使用浏览器访问http://localhost:8080或者http://host-ip:8080。
由于我们在构建时使用了带有onbuild标签的镜像,所以在App目录下需要有Gemfile.lock文件。这时可以在App的根目录运行以下命令:
$ sudo docker run --rm -v "$(pwd)":/usr/src/app -w /usr/src/app ruby:2.1.2 bundle install --system

13.6.4 Sinatra

Sinatra是一个优雅地包装了Web开发的DSL(领域特定语言)。用Sinatra只需5行代码即可实现一个简单的hello world:
require 'rubygems'
require 'sinatra'
get '/' do
'Hello World'
end如果读者自定义镜像时基于系统标准镜像(如Ubuntu),则可以参考以下安装命令:
$ gem install sinatra
$ ruby -rubygems hi.rb
1.使用Docker Hub镜像
读者可以基于自建的SSHD镜像,定制Sinatra镜像。如此一来,即可方便地使用SSH服务来访问此Sinatra镜像。当然,也可以直接到Docker Hub上搜索Sinatra镜像,直接下载:
$ sudo docker pull yoheimuta/docker-sinatra
2.定制镜像
如上文所述,笔者推荐使用SSHD镜像为基础来定制。当然,读者也可以使用以下Dockerfile来定制镜像。
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get -y install ruby ruby-dev build-essential redis-tools
RUN gem install --no-rdoc --no-ri sinatra json redis
RUN mkdir -p /opt/webapp
# 使用4567端口
EXPOSE 4567
# 设置默认命令
CMD ["/opt/webapp/bin/webapp"]
RubyGems使用提示:目前搭建RoR环境过程中会遇到一些网络原因导致rubygems.org存放在Amazon S3>上面的资源文件间歇性连接失败。有时候gem install rack或bundle install命令无法有效执
行(可以用gem install rails-V来查看执行过程)。笔者推荐使用淘宝RubyGems镜像或者其他国内镜像站。

13.6.5 相关资源

Ruby官网:https://www.ruby-lang.org/
Ruby Docker官方源:https://registry.hub.docker.com/_/ruby/
Ruby Docker官方源标签:https://registry.hub.docker.com/_/ruby/tags/manage/
淘宝Ruby Gems:https://ruby.taobao.org/
JRuby官网:http://www.jruby.org/
JRuby Docker官方镜像:https://registry.hub.docker.com/_/jruby/
JRuby Docker官方镜像标签:https://registry.hub.docker.com/_/jruby/tags/manage/
Rails官网:http://rubyonrails.org/
Rails Docker官方镜像:https://registry.hub.docker.com/_/rails/
Rails Docker官方镜像标签:https://registry.hub.docker.com/_/rails/tags/manage/
Sinatra官网:http://www.sinatrarb.com/
Sinatra Docker镜像1:https://registry.hub.docker.com/u/yoheimuta/docker-sinatra/
Sinatra Docker镜像2:https://registry.hub.docker.com/u/gwjjeff/sinatra/

13.7 JavaScript
13.7.1 JavaScript技术栈

JavaScript是一种弱类型的解释型动态脚本语言,内置支持类(面向对象编程)。它的解释器(JavaScript引擎)是浏览器的一部分。JavaScript广泛用于浏览器的各种前台业务逻辑,动态显示和Ajax请求。目前被许多创业团队喜爱的SPA(Single-page Application)方案,就是充分利用了JavaScript MVC框架的优势,将敏捷开发发挥到极致。例如通过双向绑定之类的特性,可以让在客户端完成大部分的业务逻辑,后台服务器只需要解析Restful API请求即可完成一个功能强大、体验丰富的Web App。

JavaScript也可以通过其解释器运行在服务器端,Node.js就是服务端JavaScript的主流技术方案,并拥有优秀的性能和大量实践案例。

下面,笔者将简述如何使用Docker搭建Node.js环境。

13.7.2 Node.js

在Node.js环境中,JavaScript代码通过V8引擎运行于网络服务器。由于它优秀的高并发处理能力,Node服务端在高并发技术方案的技术选型中与PHP、Python、Perl、Ruby平起平坐。
1.使用官方镜像
第一步,安装Node.js的Docker Hub官方镜像:
$ sudo docker pull node
第二步,读者可以使用上面安装的基础镜像,构建自定义镜像。下面,在Node.js项目中新建一个Dockerfile:
FROM node:0.10-onbuild
# 使用8888端口替换原应用端口
EXPOSE 8888
读者可以通过修改Expose命令后面的数字来修改默认端口。
第三步,使用此Dockerfile构建镜像:
$ sudo docker build -t my-nodejs-app .
第四步,创建并运行Node.js容器:
$ sudo docker run -it --rm --name my-running-app my-nodejs-app
注意,本镜像预设使用读者的项目中文件名为package.json[注释]的文件,此文件包含项目依赖信息以及启动脚本[注释]。
如果读者需要一个运行单个Node.js脚本的Node容器,则无需通过书写Dockerfile构建镜像的方式。读者可以使用以下指令:
$ sudo docker run -it --rm --name my-running-script -v "$(pwd)":/usr/src/myapp -w /usr/src/myapp node:0.10 node your-daemon-or-script.js
2.定制镜像
如果读者需要定制Node镜像,推荐读者基于一个带有SSH服务的Docker镜像进行改造,这样可以方便使用SSH服务连接Node容器。当然,也可以参考以下Dockerfile来定制镜像:
##
Node.js Dockerfile
##
https://github.com/dockerfile/nodejs
##
下载基础镜像
FROM dockerfile/python
# 安装Node.js环境
RUN \
cd /tmp && \
wget http://nodejs.org/dist/node-latest.tar.gz && \
tar xvzf node-latest.tar.gz && \
rm -f node-latest.tar.gz && \
cd node-v* && \
./configure && \
CXX="g++ -Wno-unused-local-typedefs" make && \
CXX="g++ -Wno-unused-local-typedefs" make install && \
cd /tmp && \
rm -rf /tmp/node-v* && \
echo '\n# Node.js\nexport PATH="node_modules/.bin:$PATH"' >> /root/.bashrc
# 定义工作目录
WORKDIR /data
# 定义默认命令
CMD ["bash"]

http://www.jsqmd.com/news/706850/

相关文章:

  • 机器学习中三大均值方法的应用与优化策略
  • Keras构建词汇级神经语言模型实战指南
  • 2026年Q2成都旧电脑专业回收标杆名录:成都回收/成都废旧金属回收/成都旧电脑回收/成都火锅店设备回收/成都酒店设备回收/选择指南 - 优质品牌商家
  • Real-ESRGAN-ncnn-vulkan:3分钟让模糊图像焕然新生的AI超分辨率神器
  • 北京通州比较好的学画画画画班推荐
  • 2026年Q2:防静电硫酸钙地板厂家、防静电陶瓷地板厂家、陶瓷防静电地板厂家、全钢防静电地板厂家、全铝防静电地板厂家选择指南 - 优质品牌商家
  • VCG 网格整形(Smoothed ARAP)
  • MemoryAgentBench:AI智能体记忆能力评估框架的设计与实践
  • 2026年4月26日论文再次规划
  • 微信AI双开方案:HermesClaw实现iLink协议代理与多AI助手集成
  • 为什么你的 devcontainer.json 总被面试官打叉?11个被忽略的 spec v2.0 兼容性细节,资深工程师私藏笔记
  • 2026热门定制玻璃酒瓶批发推荐:四川定制玻璃有哪些厂、四川玻璃酒瓶定制、婚宴定制玻璃酒瓶、定制玻璃酒瓶厂家哪家好选择指南 - 优质品牌商家
  • 机器学习超参数调优:从原理到工程实践
  • 前端工程师的全栈焦虑,我用 60 天治好了
  • ScienceDecrypting终极指南:三步永久解除CAJViewer文档有效期限制
  • CSS组件库开发核心技巧_利用BEM规范定义基础结构
  • 冒泡排序——从大到小排
  • 樱花云赶紧注册吧!
  • 顺序特征选择(SFS)优化房价预测模型的实战指南
  • 2026成都打印机租赁公司技术选型:成都打印机租赁推荐/成都附近打印机出租公司/成都附近打印机租赁公司/成都周边打印机出租/选择指南 - 优质品牌商家
  • 2026年Q2四川诚信篮球场围栏网标杆名录及核心参数对比:双边丝网护栏/护栏网围栏/球场护栏网/羽毛球场围栏网/选择指南 - 优质品牌商家
  • 带历史状态的层次状态机(HSM with History)
  • 切丁机生产厂家生存破局:企业决策者关键策略深度解析
  • 深度学习在影评情感分析中的应用与实践
  • DemoGPT:从自然语言描述到完整Web应用的AI智能体编程实践
  • 2026年Q2正规PCB硬件开发标杆名录:QT应用程序开发/QT程序开发/QT软件开发/单片机开发/单片机电路开发/选择指南 - 优质品牌商家
  • Fairseq-Dense-13B-Janeway开源可部署:MIT许可,允许商用、修改、分发与闭源集成
  • 代理模式完全解析:从直接访问到智能控制的访问代理
  • 成都地区、低合金H型钢、400X400X13X21、Q355B、包钢、现货批发供应 - 四川盛世钢联营销中心
  • Hugo博客自动化发布:基于OpenClaw的智能工作流实践