我最近开始尝试学习如何使用Chef来管理Docker容器。当前,我正在尝试弄清楚如何使用刀形容器gem引导Docker容器,但是对于这种情况的工作流程我有些困惑。这是到目前为止我执行此操作的步骤的高级说明:

  • 首先,为了学习这些技术如何协同工作,我配置了三台Ubuntu 14.04 Virtualbox VM,一台用于Chef Server,一台用于托管容器的节点,以及一台用于开发的工作站。这些计算机的网络配置允许使用NAT网络接口(interface)和仅主机接口(interface)连接到Internet并彼此连接。
  • 我已使用工作站VM中的刀具命令成功地自行引导了Chef节点,并且可以使用浏览器中的Chef Management Console进行验证。

  • 我的困惑是下一步要如何引导我要在上述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/

    10-12 03:54
    查看更多