我正在使用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镜像?
答案 0 :(得分:4)
提供步骤在一个单独的容器中运行,因此在提供步骤之后生成的所有数据都将丢失,除非您保留它们。这就是为什么你可能有bundle
个FROM 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那样便携。