如何在 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
我无法安装任何东西,因为没有预装 wget
和 gem
。
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
我正在尝试为我们构建的应用程序图标添加徽章。有一个叫badge的rubygem,做得很好(https://github.com/HazAT/badge)。
我试过在用于构建应用程序的 macos 虚拟机上安装徽章。它破坏了其他东西,因为它有很多依赖关系。所以我尝试在官方 ruby docker 容器 运行 徽章
docker run -ti ruby
我无法安装任何东西,因为没有预装 wget
和 gem
。
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