我有多个使用 IronWorker 在 crons 中运行的 Ruby 应用程序。我是 Docker 新手,我想在将代码推送到 Iron 之前在本地测试应用程序。我怎么做?
1 回答
您的代码可以私下存储在 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
以下是运行此程序的步骤:
- 在Docker上创建公共存储库
在此示例中,Docker 用户名的名称是 testuser,Docker 存储库的名称是 testrepo。
- 构建镜像
在 Docker 终端中运行以下命令。我添加了一个标签“0.0.1”。这应该随着对推送到 Docker 的映像的每次更改而增加。
docker build -t testuser/testrepo:0.0.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。
- 从文件夹中删除 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
- 重建镜像
docker build -t testuser/testrepo:0.0.1 。
- 将镜像推送到 Docker
docker push testuser/testrepo:0.0.1
- 使用 Iron 注册图像(需要当前工作目录中的 iron.json 文件)
铁注册 testuser/testrepo:0.0.1
- 邮编 IronWorker 代码
zip -r 你好.zip 你好.rb
- 将 worker 上传到 Iron(需要当前工作目录中的 iron.json 文件)
铁工上传 --zip hello.zip --name hello testuser/testrepo:0.0.1 ruby hello.rb
完毕!您现在可以通过 HUD 或他们的 API 来安排 IronWorker。