有没有办法为Docker编译和静态链接ruby库?

时间:2015-04-24 10:04:55

标签: ruby linux docker

2015年2月29日更新:

InfraRuby compiler and runtime for statically typed Ruby on the JVM!

我希望在一个简单的ruby爬虫中使用一个静态链接的单个二进制文件来构建一个纤薄的docker容器。

Go产生的东西:

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

(来自Building Minimal Docker Containers for Go Applications)。

有没有办法用ruby / rails做到这一点?

1 个答案:

答案 0 :(得分:-2)

为什么要这么麻烦?为ruby应用程序创建docker容器时,您已经在创建一个方便的分发包。

我建议您查看rubyrails官方图片。在容器构建过程中,他们将运行gem bundler以打包依赖项。

实施例

简单的ruby脚本项目

├── Dockerfile
├── Gemfile
├── Gemfile.lock
└── helloworld.rb

图像构建正常

docker build -t my-ruby-app .

运行如下:

$ docker run --rm my-ruby-app
    __  __     ____                             __    __
   / / / /__  / / /___     _      ______  _____/ /___/ /
  / /_/ / _ \/ / / __ \   | | /| / / __ \/ ___/ / __  / 
 / __  /  __/ / / /_/ /   | |/ |/ / /_/ / /  / / /_/ /  
/_/ /_/\___/_/_/\____/    |__/|__/\____/_/  /_/\__,_/ 

Dockerfile

FROM ruby:2.1-onbuild
CMD ["ruby", "helloworld.rb"]

helloworld.rb

require "artii"

a = Artii::Base.new :font => 'slant'
puts a.asciify('Hello world')

的Gemfile

source "https://rubygems.org"

gem "artii"