【发布时间】:2015-03-15 12:03:42
【问题描述】:
我最近开始尝试学习如何使用 Chef 来管理 Docker 容器。目前,我正在尝试弄清楚如何使用刀容器 gem 引导 Docker 容器,但我对这种场景的工作流程有点困惑。以下是我迄今为止为此所采取的步骤的高级描述:
- 首先,为了了解这些技术如何协同工作,我配置了三个 Ubuntu 14.04 Virtualbox VM,一个用于 Chef 服务器,一个用于托管我的容器的节点,以及一个用于开发的工作站。这些机器的网络配置允许使用 NAT 网络接口和 Host-Only 接口连接到 Internet 和相互连接。
- 我已使用工作站 VM 中的刀命令成功地自行引导 Chef 节点,并且可以使用浏览器中的 Chef 管理控制台验证这一点。
我的困惑是接下来要做什么才能引导我希望在上述 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 服务器而不是容器主机同步。
任何关于我在这里遗漏的见解或建议将不胜感激。
【问题讨论】:
标签: docker chef-infra knife