使用azk时如何管理系统依赖?

时间:2015-10-07 14:40:57

标签: ruby-on-rails-4 docker azk

我正在使用azk,我的系统依赖于额外的包。我可以使用它来安装它们(因为我使用的是基于Ubuntu的图像):

apt-get -yq update && apt-get install -y libqtwebkit-dev qt4-qmake

我可以添加此步骤进行配置吗?在Azkfile.js中,它看起来像:

// ...
provision: [
  "apt-get -yq update",
  "apt-get install -y libqtwebkit-dev qt4-qmake",
  "bundle install --path /azk/bundler",
  "bundle exec rake db:create",
  "bundle exec rake db:migrate",
]

或者最好创建一个新的Docker镜像?

2 个答案:

答案 0 :(得分:4)

提供步骤在一个单独的容器中运行,因此在提供步骤之后生成的所有数据都将丢失,除非您保留它们。这就是为什么你可能有bundleFROM azukiapp/ruby:2.2.2 # or the image you were using previously RUN apt-get -yq update && \ apt-get install -y libqtwebkit-dev qt4-qmake && \ apt-get clean -qq && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Keeping the image as small as possible 文件夹。

从那以后,在这种情况下你应该使用Dockerfile。它看起来像这样:

Azkfile.js

之后,您应该修改image并替换主系统的Dockerfile属性以使用创建的azk(您可以查看image: { dockerfile: './PATH_TO_DOCKERFILE' }, docs {{3 }}):

azk start

最后,当您运行azk时,azk将构建此Dockerfile并将其与所有依赖项一起使用。

提示:如果您想强制-B重建Dockerfile,只需将azk start标记传递给log4j.xml

答案 1 :(得分:0)

看起来您正在使用基于Debian的Linux发行版,您可以创建(https://wiki.debian.org/Packaging)您自己的Debian虚拟包(https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-virtual),列出它依赖的所有包。如果您只是做一件事,您可以使用dpkg -i(或者如果您自己托管自定义debian存储库,则可以使用apt-get install)自定义包,它将通过apt安装所需的所有依赖项。

然后,您可以继续学习Debian软件包中的postinst和prerm脚本(https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-maintscripts)。这将允许您运行bundle和gem之类的命令,作为软件包安装的最后一步和软件包删除的第一步。

这样做有一些好处:
1.如果您在某个地方托管软件包存储库,只需让主机apt-get update&& amp; apt-get install custom-dependencies-diego
2.对依赖项列表进行版本控制 - 使用dpkg -l可以告诉给定主机上的所有版本,包括依赖虚拟包的版本。
3.使用prerm脚本,您可以确保删除虚拟包还可以删除安装脚本所做的更改,这样您就可以让主机返回到" clean"状态&#34 ;.

这样做的缺点在于它具有特定的debian / apt。如果你想部署到Slack或RHEL,你必须稍微改变一下。改用新的发行版并不是特别难,但它绝对不像使用Bash那样便携。