我最近开始尝试学习如何使用Chef来管理Docker容器。当前,我正在尝试弄清楚如何使用刀形容器gem引导Docker容器,但是对于这种情况的工作流程我有些困惑。这是到目前为止我执行此操作的步骤的高级说明:
我的困惑是下一步要如何引导我要在上述Chef节点上运行的容器。目前,我正在尝试从我从工作站开始的节点引导过程中运行的两个配方中,进行docker安装和容器设置。以下是引导期间在节点上运行的配方之一的相关命令:
dockerfile = data_bag_item('dockerfiles', 'ubuntu-dockerfile')["script"].join()
...
execute "knife container docker init test_app -f chef/ubuntu-14.04"
file "/var/chef/dockerfiles/test_app/Dockerfile" do
content dockerfile
action :create
end
...
execute "knife container build test_app -d /var/chef/dockerfiles"
execute "docker run -d -p 80:8000 -v /etc/chef /etc/chef/secure test_app python test_app/manage.py runserver 0.0.0.0:8000"
这是数据包字符串数组加入后的Dockerfile的样子:
FROM chef/ubuntu-14.04
RUN chef-init --bootstrap
RUN rm -rf /etc/chef/secure/*
RUN apt-get -qq update
RUN apt-get -qq install build-essential python-django
RUN apt-get clean
ENV DJANGO_PATH /usr/lib/python2.7/dist-packages/django/bin
RUN chmod u+x $DJANGO_PATH/django-admin.py
RUN $DJANGO_PATH/django-admin.py startproject test
RUN chmod u+x test/manage.py
EXPOSE 8000
ENTRYPOINT ["chef-init", "--onboot"]
第一个问题是,即使我对配方中的Dockerfile所做的更改已成功写入到/ var / chef / dockerfiles / test_app / Dockerfile的文件中,但是当新的Docker出现时,这些更改并未应用到镜像中镜像已构建,从我收到的错误消息中可以明显看出python不在PATH上。我从刀容器的文档中看到,可以提供在容器本身上运行的菜谱路径和配方运行列表。我以为执行与Dockerfile相同的任务的配方可能是更好的解决方案,但是我不确定菜谱路径应该是什么,因为我的菜谱是与Chef Server而不是容器主机同步的。
对于我在这里缺少什么的任何见解或建议,将不胜感激。
最佳答案
据我所知,Chef容器使用的典型工作流程是从您的工作站生成Dockerfile,配置Chef-server,运行列表...这将生成构建Dockerimage所需的文件(Dockerfile来自基本镜像)使用Chef-client以及与服务器同步所需的文件),然后您可以构建该容器。不假装将Docker安装到节点并在其中运行容器,但不假装Chef容器使用资源(厨师食谱和Chef服务器)构建Docker镜像。我建议您观看Chef容器作者Tom Duffield的演讲Managing your container workflow with Chef,以弄清楚它的工作流程。
我认为这并不假装管理Chef节点中容器的执行。为此,您可以检查一些Docker orchestration tools。
关于docker - 刀架工作流程的澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27991493/