Chef ไม่เพียงแค่ใช้ตั้งค่าและจัดการเครื่องเซิร์ฟเวอร์เท่านั้นแต่ยังสามารถใช้งานร่วมกับ Container อย่าง Docker ได้ด้วย ในเบื้องต้น ใช้สำหรับสร้าง Chef Container ที่มี chef client, cookbook, run list ฝังเข้าไปพร้อมกับ Docker Image ส่วนการจัดการ Container ยังคงใช้ Docker เหมือนเดิม
สร้าง Chef Container ต้องเริ่มจากสร้าง Image ก่อนด้วย Knife Container ซึ่งเป็น plug-in เสริมของ Knife ซึ่งเราจะต้องติดตั้งเพิ่ม ก่อนจะติดตั้ง Knife Container ติดตั้งเครื่องมือที่จำเป็นต้องใช้ก่อน ได้แก่ Docker, ChefDK และ Knife Container
เริ่มจากติดตั้ง Docker ก่อน ดังนี้
curl -sSL https://get.docker.com/ubuntu/ | sudo sh
ติดตั้ง Chef Development Kit
wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.5-1_amd64.deb
dpkg -i chefdk_0.3.5-1_amd64.deb
ติดตั้ง Knife Container โดยใช้ Chef Development Kit
chef gem install knife-container
เท่านี้เราก็ได้เครื่องมือสร้าง Chef Container แล้ว มาลองดูตัวอย่างง่ายๆ จากการสร้าง Chef Container สำหรับ Apache 2 ให้สร้างโครงสร้างของ Image ดังนี้
knife container docker init demo/apache2 -r 'recipe[apache2]' -z -b
เราจะได้ Dockerfile ใน dockerfiles/demo/apache2/ และไฟล์ dockerfiles/demo/apache2/chef/first-boot.json สำหรับสั่งให้ service ทำงาน
มาแก้ไฟล์นี้เพิ่ม container service เข้าไปดังนี้
{ "run_list": [ "recipe[apache2]" ], "container_service": { "apache2": { "command": "/usr/sbin/apache2 -k start" } } }
สั่ง build image
knife container docker build demo/apache2
เมื่อ build เสร็จคุณจะได้ docker image พร้อมใช้งาน
ทดลองสั่ง run ดู
docker run -d -p 80:80 demo/apache2