1

我有多个使用 IronWorker 在 crons 中运行的 Ruby 应用程序。我是 Docker 新手,我想在将代码推送到 Iron 之前在本地测试应用程序。我怎么做?

4

1 回答 1

0

您的代码可以私下存储在 Iron.io 上,而 Docker 上的图像可以仅包含编程语言和库并公开。我整理了一个“hello world”示例,展示了它是如何完成的。我正在使用 Alpine linux 和 Ruby 编程语言以及 Iron 的开发包。我还包括了“pg”宝石:

你好.rb

require 'pg'
puts "hello world"

宝石文件

source 'https://rubygems.org'
gem 'pg'

Dockerfile

FROM iron/ruby-2.3:dev
RUN apk update && apk upgrade
RUN gem install pg --no-ri --no-rdoc
COPY hello.rb /
RUN apk add bash

以下是运行此程序的步骤:

  1. 在Docker上创建公共存储库

在此示例中,Docker 用户名的名称是 testuser,Docker 存储库的名称是 testrepo。

  1. 构建镜像

在 Docker 终端中运行以下命令。我添加了一个标签“0.0.1”。这应该随着对推送到 Docker 的映像的每次更改而增加。

docker build -t testuser/testrepo:0.0.1 .
  1. 测试图像

由于 Dockerfile 不包含ENTRYPOINT ["ruby", "hello.rb"]行,因此任何终端命令都可以包含在“docker run”命令中。要使用 bash 提示进入图像,您可以运行:

docker run -it testuser/testrepo:0.0.1 /bin/bash

进入 bash 后,您可以查看代码是否可以执行:

ruby hello.rb

在此示例中,我收到以下错误:

`require': cannot load such file -- json (LoadError)

要解决此问题,请更新 Dockerfile 以安装 json,然后重新测试映像。这是更新的 Dockerfile:

FROM iron/ruby-2.3:dev
RUN apk update && apk upgrade
RUN gem install pg --no-ri --no-rdoc
RUN gem install json --no-ri --no-rdoc
COPY hello.rb /
RUN apk add bash

现在我们知道代码将与镜像一起正确运行,我们可以更新 Dockerfile 并将镜像推送到 Docker 并将代码推送到 Iron。

  1. 从文件夹中删除 hello.rb 并更新 Dockerfile

FROM iron/ruby-2.3:dev
RUN apk update && apk upgrade
RUN gem install pg --no-ri --no-rdoc
RUN gem install json --no-ri --no-rdoc
RUN apk add bash

  1. 重建镜像

docker build -t testuser/testrepo:0.0.1 。

  1. 将镜像推送到 Docker

docker push testuser/testrepo:0.0.1

  1. 使用 Iron 注册图像(需要当前工作目录中的 iron.json 文件)

铁注册 testuser/testrepo:0.0.1

  1. 邮编 IronWorker 代码

zip -r 你好.zip 你好.rb

  1. 将 worker 上传到 Iron(需要当前工作目录中的 iron.json 文件)

铁工上传 --zip hello.zip --name hello testuser/testrepo:0.0.1 ruby​​ hello.rb

完毕!您现在可以通过 HUD 或他们的 API 来安排 IronWorker。

于 2016-10-09T17:05:28.083 回答