มาใช้ CircleCI กับ Docker กัน

เนื่องจากมีคนชวนเล่น CircleCI เมื่อต้นเดือนที่ผ่านมา เพิ่งจะได้มาลองเล่นพบว่า CircleCI ทำอะไรได้หลายอย่างมากกว่า เครื่องมือ CI/CD เดิมๆ ที่มีอยู่ วิธีการใช้งานก็ง่ายมากๆ เพียงแค่เชื่อม repository ของโครงการของคุณที่ต้องการใช้คู่กับ CircleCI จากนั้นก็เขียน config ในรูปแบบไฟล์ yaml สั่ง push code ใหม่เข้า repository เท่านี้ก็เรียบร้อยแล้ว CircleCI จะทำหน้าที่ของมันโดยอัตโนมัติ CircleCI รองรับการทำ CI/CD ได้หลายภาษา เช่น Ruby/Rails, Python, Node.js, PHP, Java, Haskell นอกจากนี้ยังรองรับ Mobile Platform อย่าง Android, iOS และรองรับการทำงานกับ Docker Container ด้วย

อันดับแรก สมัครสมาชิก CircleCI กันก่อนที่ https://circleci.com
Continue reading มาใช้ CircleCI กับ Docker กัน

ใช้ Knife จัดการ vm ใน Azure

Knife มีส่วนเสริมในการจัดการ virtual machine บน Microsoft Azure ด้วยคือ knife-azure สามารถจัดการ life cycle ของ virtual machine ได้ สั่ง knife bootstap เพื่อลงทะเบียนกับ Chef Server ได้เลย มาลองใช้งานกัน
ติดตั้ง Knife Azure โดยใช้ ChefDK
chef gem install knife-azure
ดาวน์โหลด subscription file เพื่อใช้งานร่วมกับ knife azure plugin จากนั้นแก้ไข knife.rb เพิ่ม config เข้าไปดังนี้
Continue reading ใช้ Knife จัดการ vm ใน Azure

ใช้ Knife จัดการ Amazon Web Service

Knife มีส่วนเสริมในการจัดการ instance บน Amazon Web Service ด้วยคือ knife-ec2 ซึ่งสามารถจัดการได้ในเบื้องต้น ส่วนใหญ่เกี่ยวข้องกับ instance เป็นหลัก สามารถจัดการ life cycle ของ instance ได้ สั่ง knife bootstap เพื่อลงทะเบียนกับ Chef Server ได้เลย มาลองใช้งานกัน
เริ่มต้นจากติดตั้ง package ที่จำเป็นก่อนดังนี้
apt-get install make build-essential
จากนั้นติดตั้ง knife ec2 plugin โดยใช้ Chef Development Kit
chef gem install knife-ec2
แก้ knife.rb เพิ่ม AWS_ACCESS_KEY_ID และ AWS_SECRET_ACCESS_KEY ต่อท้ายไฟล์
Continue reading ใช้ Knife จัดการ Amazon Web Service

มาสร้าง Chef Cookbook

ถ้าใช้งาน Chef ต้องลองสร้าง Cookbook ใช้เองด้วยถึงจะครบกระบวนการ นอกจาก Cookbook ใน Opscode Community แล้วเราสามารถสร้าง Cookbook แบบที่เราต้องการเองได้ด้วย สำหรับท่านที่ถนันภาษา ruby ก็คงได้เปรียบสักหน่อย แต่สำหรับท่านที่ไม่ถนันก็ไม่เป็นไร เราสามารถสร้าง Cookbook แบบง่ายได้ โดยใช้เครื่องมือเดิมคือ Knife
แนวคิดของ Cookbook เหมือนกับการทำอาหารมีสูตรในการทำ (recipe) ดังนั้น Cookbook หนึ่งมีสูตรอาการได้หลายสูตรแล้วแต่ว่าจะปรุงอะไรออกมา ในการปรุงแต่ละสูตรจะมีกระบวนการปรุงซึ่งจะทำหนด อยู่ใน recipe นั่นเอง สำหรับ resource ทีี่ต้องใช้ recipe ได้แก่

  • package: จัดการ package ใน node
  • service: จัดการ service ใน node
  • user: จัดการ user ใน node
  • group: จัดการ group ใน node
  • template: จัดการไฟล์ที่อยู่ในรูปแบบ ruby template
  • cookbook_file: เก็บไฟล์สำหรับย้ายไปใช้กับ node โดยตรง
  • file: จัดการไฟล์ ใน node
  • directory: จัดการไดเรคทอรี ใน node
  • execute: ใช้คำสั่ง ใน node
  • cron: แก้ไข cron ใน node

Continue reading มาสร้าง Chef Cookbook

ติดตั้ง Pootle ด้วย Docker

เผอิญมีคนถามเรื่อง Pootle แต่จำไม่ได้ว่าใครถามเอาเป็นว่า Pootle เป็นเครื่องมือแปล ui ของซอฟต์แวร์ผ่านเว็บ สนับสนุนทั้งไฟล์ po, xml ทำให้ทีมแปลทำงานร่วมกันได้ง่ายมากขึ้น หากอยากจะทดลองใช้ Pootle ก็สามารถติดตั้งกันได้ง่ายๆ โดยใช้ Docker ดังนี้
docker pull jannkleen/pootle
docker run -v /var/pootledb --name POOTLEDB busybox true
docker run -p 80:8000 --volumes-from POOTLEDB jannkleen/pootle
Continue reading ติดตั้ง Pootle ด้วย Docker

ใช้ Knife จัดการ Droplet บน DigitalOcean

Knife DigitalOcean เป็นส่วนเสริมที่ช่วยให้คุณจัดการ Droplet บน DigitalOcean ได้ง่ายๆ ผ่าน Knife ซึ่งนอกจากจัดการ Droplet ได้แล้วยังสามารถสั่ง Bootstrap เพื่อ register node ไปยัง Chef Server ได้อีกด้วย หรือใช้ Knife กำหนด runlist ให้ droplet ได้เช่นกัน มาทดลองกัน
ก่อนอื่นใช้ ChefDK ติดตั้ง Knife DigitalOcean กันก่อนดังนี้
chef gem install knife-digital_ocean
สร้าง Personal Access Tokens ใน DigitalOcean เพื่อใช้กับ Knife ดังนี้

Continue reading ใช้ Knife จัดการ Droplet บน DigitalOcean

ใช้ Knife สร้าง Chef Container

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
Continue reading ใช้ Knife สร้าง Chef Container

มาเล่น Chef Enterprise กัน

Chef เป็นเครื่องมือการจัดการตั้งค่าคอนฟิกระบบ (system configuration management) ตัวหนึ่งที่ได้รับความนิยม เหมาะสำหรับการ config เครื่องเซิร์ฟเวอร์ที่มีจำนวนมากๆ แบบไม่ต้อง ssh เข้าไป config ทีละเครื่อง การทำงานของ Chef จะทำตาม runlist ที่เรากำหนดให้ node หรือกำหนดใส่ไว้ใน Role ดังนั้นเราสามารถทำขั้นตอนซ้ำๆ ได้หลายรอบผ่านการกำหนดค่าตาม role หรือกำหนด runlist ให้กับ node จากนั้นก็สั่งให้ทำงาน

Chef มีเวอร์ชันที่เป็น Open Source และ Enterprise ในเวอร์ชัน Enterprise สามารถติดตั้งเองหรือใช้บริการ Chef Management แบบ Hosted ได้โดยไม่จำเป็นต้องติดตั้งเองก็ได้ ก่อนใช้งานต้องเข้าใจ Chef กันก่อน Chef มีส่วนประกอบที่ต้องใช้หลักๆ อยู่ 3 ส่วน

  • Chef Workstation คือ เครื่องที่ใช้สั่งงาน พัฒนา cookbook หรือเครื่องผู้ดูแลระบบ
  • Chef Server คือ เครื่องที่เก็บข้อมูล Node, Cookbook, Policy, Report ต่างๆ
  • Chef Client คือ เครื่องปลายทางที่ต้องการคอนฟิก

Continue reading มาเล่น Chef Enterprise กัน

สร้าง Docker Image ผ่าน Build Service บน Docker Hub

Docker มีบริการ Docker Registry ให้เราสามารถ pull image มาใช้งานได้ และให้เรา push image ขึ้นไปบน Docker Registry ได้เหมือนกัน หากเราดูจากหน้าเว็บ hub.docker.io จะพบว่านอกจากจำเป็น Registry แล้วยังมีบริการอื่นๆ อีกมาก เช่น Private Registry, Repository, Auto Build จาก VCS เป็นต้น ครั้งนี้จะมาใช้งานบริการ Auto Build กัน โดยปกติเวลาทำ Image เพียงแค่เขียน Dockerfile จากนั้นสั่ง Build จะได้ Docker Image อยู่ในเครื่อง ถ้ามีการเปลี่ยนแปลง ก็ต้องสั่ง Build ใหม่อีกรอบ ซึ่งหลายท่านหันไปใช้ CI/CD ช่วยให้อัตโนมัติมากขึ้น

แต่ Docker Hub มีบริการ Auto Build จาก VCS ที่คุณใช้งานอยู่ได้ด้วย เพียงแค่เชื่อมบริการของ Docker Hub และ VCS ที่ใช้อยู่เท่านั้น จากนั้นก็เลือก Repository ที่ต้องการใช้ Docker Hub ให้ คุณก็มีหน้าที่แค่ทดสอบและ commit ไฟล์ไปยัง VCS เท่านั้น อันดับแรกสมัครสมาชิก Docker Hub ก่อน จากนั้นให้เข้าไปที่หน้า Profile ของเรา
Continue reading สร้าง Docker Image ผ่าน Build Service บน Docker Hub

มา Backup Docker Container กัน

วิธีการ Backup Container มีอยู่หลายวิธี เช่น Commit Container ที่กำลังทำงานอยู่แล้ว push ไปที่ Docker Registry เคยแนะนำไปแล้วเรื่องการย้าย Container ข้าม Cloud Provider หรือการ Save Container แล้วโยนผ่าน ftp, scp ไปยังเครื่องปลายทาง ซึ่งมีหลายทางเลือก วิธีที่จะมาแนะนำในครั้งนี้เป็นวิธีที่ 2 คือการ Save Container ลองมาดูตัวอย่างกัน
ให้สั่ง run container สั่งตัวนึงขึ้นมาก่อน
docker run -dP --name web1 anoochit/apache2
จากนั้นแก้ไขข้อมูลใน Container ที่กำลังทำงานอยู่ผ่าน bash
docker exec -it web1 bash
คุณจะ drop เข้าไปที่ bash shell ของ container จากนั้นแก้ไขไฟล์สักไฟล์นึง ยกตัวอย่างเช่น /var/www/index.html เป็นต้น
echo "<h1>Hello, World</h1>" > /var/www/index.html
จากนั้นให้ exit ออกจาก Container ตอนนี้ข้อมูลใน /var/www/index.html เปลี่ยนไปแล้ว เราจะ Save Container นี้เอาไปใช้งานที่อื่นดังนี้
Continue reading มา Backup Docker Container กัน