有什么办法可以编译和静态链接的Dockerruby库?

2015年6月29日更新:

在JVM上静态types化Ruby的InfraRuby编译器和运行时!


我希望有一个单一的二进制,静态链接,从一个简单的ruby爬行器build立一个苗条的docker集装箱。

就像Go生产的东西一样:

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

(从构buildGo应用程序的最小Docker容器 )。

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

何必? 当你为你的ruby应用程序创建一个Docker容器时,你已经创建了一个便于分发的包。

我会建议查看红宝石和铁轨官方图片。 在容器构建过程中,他们将运行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"