Skip to content

快速参考

  • 维护者:
    Docker 社区

  • 获取帮助的途径:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签和相应的 Dockerfile 链接

快速参考(续)

什么是 Ruby?

Ruby 是一种动态的、反射的、面向对象的、通用的、开源的编程语言。据其作者称,Ruby 受到了 Perl、Smalltalk、Eiffel、Ada 和 Lisp 的影响。它支持多种编程范式,包括函数式、面向对象和命令式。它还具有动态类型系统和自动内存管理。

wikipedia.org/wiki/Ruby_(编程语言)

logo

如何使用此图像

在您的 Ruby 应用项目中创建一个 Dockerfile

FROM ruby:3.3

# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1

WORKDIR /usr/src/app

COPY Gemfile Gemfile.lock ./
RUN bundle install

COPY . .

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

将此文件放在应用程序的根目录中,紧挨着 Gemfile

然后你可以构建并运行 Ruby 镜像:

$ docker build -t my-ruby-app .
$ docker run -it --name my-running-script my-ruby-app

生成一个 Gemfile.lock

上述示例 Dockerfile 期望在您的应用程序目录中有一个 Gemfile.lock 。这个 docker run 将帮助您生成一个。在您的应用程序根目录中,紧挨着 Gemfile 运行它:

$ docker run --rm -v "$PWD":/usr/src/app -w /usr/src/app ruby:3.3 bundle install

运行单个 Ruby 脚本

对于许多简单的单文件项目,您可能会发现编写完整的 Dockerfile 很不方便。在这种情况下,您可以直接使用 Ruby Docker 映像运行 Ruby 脚本:

$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:3.3 ruby your-daemon-or-script.rb

编码

默认情况下,Ruby 会继承其运行环境的区域设置。对于大多数在桌面系统上运行 Ruby 的用户来说,这意味着它可能使用某种变体的 *.UTF-8en_US.UTF-8 等)。然而,在 Docker 中,默认区域设置是 C ,这可能会产生意外结果。如果您的应用程序需要与 UTF-8 进行交互,建议您通过 -e LANG=C.UTF-8ENV LANG C.UTF-8 显式调整图像/容器的区域设置。

图像假设

此图像设置了几个环境变量,这些变量会改变 Bundler 和 Gem 在容器中运行单个应用程序的行为(特别是这样,应用程序的开发源可以绑定安装在容器内部,并且不会受到主机的 .bundle 干扰容器的正常功能)。

我们设置的环境变量在上面链接的 Dockerfiles 中规范列出,但其中一些包括 GEM_HOMEBUNDLE_SILENCE_ROOT_WARNINGBUNDLE_APP_CONFIG

如果这些对于您的用例(例如,在单个容器中运行多个 Ruby 应用程序)造成问题,将它们设置为空字符串应该足以撤销它们的行为。

图像变体

ruby 图像有多种类型,每种都针对特定的用例进行了设计。

ruby:<version>

这是默认的镜像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以用作构建其他镜像的基础。

其中一些标签可能有像 bookworm 或 bullseye 这样的名称。这些是 Debian 发行版的套件代号,表明该映像基于哪个发行版。如果您的映像需要安装除映像附带的软件包之外的任何其他软件包,您可能需要明确指定其中一个,以在有新的 Debian 发行版时最大程度地减少损坏。

此标签基于 buildpack-depsbuildpack-deps 是为系统上有许多映像的 Docker 普通用户设计的。它在设计上具有大量极其常见的 Debian 软件包。这减少了从中派生的映像需要安装的软件包数量,从而减少了系统上所有映像的总体大小。

ruby:<version>-slim

此映像不包含默认标记中包含的常见软件包,仅包含运行 ruby 所需的最小软件包。除非您在仅部署 ruby 映像且有空间限制的环境中工作,否则我们强烈建议使用此存储库的默认映像。

ruby:<version>-alpine

该镜像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中使用。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此通常会生成更精简的镜像。

当您主要关注最终图像大小尽可能小时,此变体很有用。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 等,因此软件通常会根据其 libc 要求/假设的深度遇到问题。有关可能出现的问题以及使用基于 Alpine 的映像的一些优缺点比较的更多讨论,请参阅此 Hacker News 评论线程。

为了最小化镜像大小,在基于 Alpine 的镜像中包含额外的相关工具(如 gitbash )是不常见的。使用此镜像作为基础,在您自己的 Dockerfile 中添加您需要的东西(如果您不熟悉如何安装软件包,请参阅 alpine 镜像描述中的示例)。

许可证

查看此映像中包含的软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他软件,这些软件可能受其他许可证的约束(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可证信息可能会在 repo-info 存储库的 ruby/ 目录中找到。

对于任何预构建的映像使用,映像用户有责任确保对此映像的任何使用都符合其中包含的所有软件的任何相关许可证。