我最近开始尝试学习如何使用Chef来管理Docker容器。目前,我正试图弄清楚如何使用刀容器宝石来引导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执行相同任务的配方可能是更好的解决方案,但我不确定该菜谱路径应该是什么,因为我的cookbook与Chef Server同步而不是容器主机
对于我在这里失踪的任何见解或建议将不胜感激。
答案 0 :(得分:0)
据我所知,Chef容器使用的典型工作流程是从工作站生成Dockerfile,配置chef-server,运行列表...这将生成构建Dockerimage所需的文件(Dockerfile来自使用Chef-client的基本映像和与服务器同步所需的文件),然后您可以构建该容器。这不是假装将Docker安装到节点并在其中运行容器,但是Chef容器假装使用资源(chef cookbooks和chef server)构建docker镜像。我建议你观看Chef容器作者Tom Duffield的谈话Managing your container workflow with Chef,以阐明它的工作流程。 我认为这不是假装管理厨师节点中容器的执行。为此,您可以查看一些Docker orchestration tools。