如何在 centos 或 ruby docker 容器中 运行 ruby gem?

How to run a ruby gem in a centos or ruby docker container?

我正在尝试为我们构建的应用程序图标添加徽章。有一个叫badge的rubygem,做得很好(https://github.com/HazAT/badge)。

我试过在用于构建应用程序的 macos 虚拟机上安装徽章。它破坏了其他东西,因为它有很多依赖关系。所以我尝试在官方 ruby docker 容器 运行 徽章

docker run -ti ruby

我无法安装任何东西,因为没有预装 wgetgem

irb(main):001:0> gem
Traceback (most recent call last):
        3: from /usr/local/bin/irb:11:in `<main>'
        2: from (irb):1
        1: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_gem.rb:44:in `gem'
ArgumentError (wrong number of arguments (given 0, expected 1+))
irb(main):002:0> wget
Traceback (most recent call last):
        2: from /usr/local/bin/irb:11:in `<main>'
        1: from (irb):2
NameError (undefined local variable or method `wget' for main:Object)
irb(main):003:0> 

那我试了一下centos镜像

docker run -ti centos

我能够安装 ruby 并需要库和 运行 gem

yum -y install ruby gcc ruby-devel rubygems libcurl libcurl-devel make

现在当 运行ning gem install badge:

时,我遇到了这个错误
ERROR:  Error installing badge:
    ERROR: Failed to build gem native extension.

    /usr/bin/ruby extconf.rb
checking for main() in -lstdc++... no
creating Makefile

make "DESTDIR="
g++ -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -mtune=generic -m64 -o unf.o -c unf.cc
make: g++: Command not found
make: *** [unf.o] Error 127

在 docker 容器中 运行 ruby gem 的正确方法是什么?我应该使用 ruby docker 容器吗?如果没有,我如何将它放到另一个容器中的 运行?不一定是centos。这只是我想到的第一张照片。

Docker 是完成这项任务的好工具。

Docker文件

FROM ruby:2.4.2-alpine3.6

RUN apk add --no-cache curl-dev \
  && apk add --no-cache --virtual .builddeps build-base \
  && gem install badge -v 0.8.7 \
  && apk del .builddeps

构建图像

$ docker build . --tag badge:0.8.7

运行 badge

$ docker run --rm badge:0.8.7 badge --help