หลายท่านที่ใช้ Docker Container มักจะสร้าง Dockerfile ของตัวเองที่ติดตั้ง OpenSSH Server แล้วสั่ง expose port 22 เอาไว้เพื่อสั่ง ssh เข้าไปใน Container ซึ่งวิธีการแบบนี้ทางผู้พัฒนา Docker ไม่แนะนำให้ใช้ เนื่องจากจะเป็นการเปิด port ไว้ให้โจมตีได้ถึงตัว Container และ Docker Host วิธีการที่ทาง Docker แนะนำให้ใช้คือใช้ nsenter เรียกใช้ shell ผ่าน namespace โดยที่ Container ไม่ต้องมี OpenSSH ติดตั้งอยู่

วิธีการใช้งาน nsenter ก็ง่ายมาก เรียกใช้ผ่าน Docker Hub ได้เลยดังนี้

docker run -v /usr/local/bin:/target jpetazzo/nsenter

nsenter จะติดตั้งอยู่ใน /usr/local/bin ของเราจากนั้นก็ใช้งานได้เลย หากต้องการติดตั้งก็ติดตั้งลงในเครื่องจริงๆ ก็ติดตั้งได้จากแพคเกจ util-linux ได้เช่นกัน

วิธีการใช้งาน เราต้องทราบ PID ของ Container ที่ทำงานอยู่ก่อน โดยใช้คำสั่ง

PID=$(docker inspect --format {{.State.Pid}} )

จากนั้นเราถึงจะเรียก shell ของ container นั้นได้ดังนี้

nsenter --target $PID --mount --uts --ipc --net --pid

การใช้งาน nsenter จะคล้ายกับการ chroot นั่นเอง

Panamax เป็นระบบจัดการ Docker ผ่าน Web Interface ช่วยให้คุณจัดการ Docker Container ได้ง่ายมากขึ้น Panamax ใช้ CoreOS และ Fleet เป็นตัวจัดการ Container ทำให้คุณสามารถสร้างและ deploy container ใดๆ ก็ได้ Panamax ทำงานบน Laptop หรือทำงานบน Cloud Infra ใดๆ ก็ได้ที่ใช้งาน CoreOS เช่น CenturyLink Cloud, Amazon, Rackspace เป็นต้น นอกจากนี้คุณยังสามารถใช้ Panamax บน bare metal server ได้ด้วย

การติดตั้ง Panamax สามารถติดตั้งผ่าน vagrant ซึ่งสามารถใช้ deploy container บน local และ Cloud Provider ปลายทางได้

ท่านที่ใช้ OSX ติดตั้ง Panamax ดังนี้

brew install http://download.panamax.io/installer/brew/panamax.rb

panamax init


Continue reading

Elastic Beanstalk เป็นเครื่องมือช่วยในการ Deploy Application​ บน Amazon Web Service โดยที่เราไม่ต้องกังวลเรื่อง Instance, OS, Auto Scaling Group, Monitoring ฯลฯ เพราะ Elastic Beanstalk จะเป็นคนจัดการให้ทั้งหมด คุณมีหน้าที่แค่พัฒนา Application แล้วสั่ง deploy เท่านั้น ซึ่ง Application ที่สามารถ deploy ผ่าน Elastic Beanstalk ได้หลายภาษา ทั้ง .NET, Python, PHP, Node.js, Ruby, Tomcat และ Docker

การใช้งาน Docker บน Elastic Beanstalk คุณสามารถสั่ง deploy Dockerfile เปล่าๆ หรือใช้ชุดของ Dockerfile และไฟล์ประกอบต่างๆ ที่บีบอัดในรูปแบบไฟล์ zip ได้เช่นกัน เราจะใช้ Dockerfile ของเกม 2048 กัน


Continue reading

Amazon เป็นผู้ใช้บริการ Cloud Computing รายใหญ่รายหนึ่งซึ่งสนับสนุนการใช้งาน Docker Container ในหลายบริการของตัวเอง เช่น EC2, Elastic Beanstalk, EC2 Container Service (ECS) เป็นต้น ครั้งนี้เราจะมาลองใช้งาน Docker บนบริการ EC2 โดยใช้ความสามารถของ Cloud Init เพื่อสั่งติดตั้ง Docker ขณะสั่งสร้าง instance ได้เลย โดยไม่ต้องติดตั้งตามทีหลัง ซึ่ง Cloud Provider ไหนที่ให้บริการพร้อม Cloud Init ก็ใช้วิธีนี้ได้เหมือนกัน เริ่มจากสร้าง Instance จาก Wizard


Continue reading

Google เปิดให้บริการ Google Container Engine ซึ่งรองรับการใช้งาน Kubernetes และ Docker Container แต่การใช้งานต้องใช้งานตามโครงสร้าง Kubernetes เป็นหลัก ซึ่งโครงสร้างที่ Kubernetes ต้องมีเป็นอย่างน้อย ได้แก่ cluster ของ container host และ pod ซึ่งก็คือ container ที่ต้องการ deploy โดยปกติ ถ้าใช้งาน Kubernetes โดยตรงจะต้องจัดการเรื่อง config ต่างๆ เองทั้งหมด โดยเฉพาะการเชื่อมต่อกับ Cloud Provider ที่ใช้บริการ แต่การใช้งานผ่าน Container Engine และใช้ Google Cloud SDK ด้วยแล้ว การใช้งาน Docker Container บน Container Engine ก็กลายเป็นเรื่องง่าย

การใช้งาน Google Cloud Platform หรือบริการที่อยู่ภายใต้ Google Cloud Compute จะต้องใช้งานผ่าน Google Cloud SDK ซึ่งจะมีชุดคำสั่งที่จะช่วยให้เราสั่งงานผ่าน command line ได้สะดวกมากยิ่งขึ้น หากใครไม่มี Google Cloud SDK ให้ติดตั้งก่อนดังนี้

curl https://sdk.cloud.google.com | bash

จากนั้นสั่ง authentication กับ Google Account ได้เลย

gcloud auth login


Continue reading

Azure เป็นบริการ Cloud Computing ของ Microsoft ซึ่งบริการพื้นฐานอย่างการใช้งาน Virtual Machine เป็นบริการที่ใช้งานได้ง่ายและสะดวกมาก ซึ่ง Microsoft มีบริการระบบปฏิบัติการที่หลากหลาย ทั้ง Linux และ Windows ซึ่งระบบปฏิบัติการที่เป็นที่นิยมใช้กันมากที่สุดบน Azure คือ Ubuntu และระบบปฏิบัติการน้องใหม่มาแรงที่เพิ่งเริ่มให้บริการมาไม่นานมานี้คือ CoreOS ซึ่งคุณสามารถใช้ Docker ได้บน CoreOS ได้เช่นกัน ซึ่งหากใช้ CoreOS จะสามารถใช้งาน Docker ได้เลยโดยไม่ต้องติดตั้งเพิ่มเติม แต่ถ้าใช้ Ubuntu จะต้องติดตั้ง Docker เพิ่มเติม

ลองมาดูวิธีการใช้งาน Docker บน Ubuntu ที่ใช้งานบน Azure กัน เริ่มต้นจากสร้าง Virtual Machine ขึ้นมาก่อน แน่นอนเราจะใช้ Ubuntu กัน


Continue reading

DigitalOcean เป็นบริการ Cloud Hosting ที่ได้รับความนิยมรายหนึ่ง นอกจากเรื่องราคาถูกแค่ $5 ต่อเดือนแล้ว DigitalOcean ยังมีความน่าสนใจอื่นๆ อีกอย่างเช่น Service Catalog ที่มีชุด Application พร้อมให้ใช้งาน เพียงแค่เลือกและสั่งสร้าง Droplet เท่านั้น ก็ได้ใช้งานกันแล้ว

มาลองใช้งาน Docker Application บน DigitalOcean กัน เริ่มจากสร้าง Droplet กันก่อน


Continue reading

ปัญหาเรื่องการย้าย Application ข้าม Cloud Provider เป็นปัญหาปกติที่ต้องหาทางแก้ไข ซึ่งแต่ละ Cloud Provider มีช่องทางในการบริการที่ต่างกัน เทคโนโลยีต่างกัน เครื่องมือที่ใช้งานก็ต่างกัน เรียกได้ว่าถ้าจะย้าย instance จะทำได้ยากมาก ครั้งนี้จะให้แนวคิดเรื่องการย้าย Container จาก Cloud Provider ค่ายหนึ่งไปยังอีกค่ายหนึ่งหรือจาก Local ไปยัง Cloud Provider ก็ได้ ซึ่งทำได้หลายวิธี

จากภาพแนะนำการย้ายแบบง่ายๆ ผ่าน Docker อย่างเดียวไม่ได้ใช้เครื่องมือใดๆ เพิ่มเติม ถ้าจะให้สะดวกควรมี Orchestration Service อยู่ในแต่ละ Cloud Provider ด้วย ในเบื้องต้นทำความเข้าใจแบบง่ายๆ กันก่อน การทำ Migration ทำได้ 2 แบบ คือ

  1. Import / Export ไฟล์ Container ทั้งก้อนจาก Local ไปยัง Cloud วิธีนี้จะให้ความสะดวกมากกว่าแต่การสำรองข้อมูลและการย้ายไฟล์ Export จะช้าขึ้นอยู่กับความเร็วของเน็คเวิร์ก
  2. Push / Pull ให้ Commit Container State ปัจจุบันแล้ว push ขึ้น Docker Registry อาจจะเป็น Docker Hub (Private) หรือ Private Registry ที่ตั้งขึ้นเองก็ได้ จากนั้นค่อยสั่ง pull ไปยัง Cloud Provider ปลายทาง

สำหรับข้อมูลใน hipache ก็ต้องเปลี่ยนตาม เช่น จากเดิมอยู่ใน Local พอย้าย Container เสร็จจะต้องเปลี่ยน record ใน redis ชี้ไปที่ Container ที่อยู่บน Cloud จึงจะ route traffic ไปได้ถูกต้อง หากทำด้วยมือจะช้า ถ้าใช้ Orchestration Service จะเร็วและสะดวกกว่ามาก
Continue reading

การใช้งาน Container สามารถประยุกต์เข้ากับการพัฒนาร่วมกับ CI/CD ได้ โดยใช้เครื่องมือเพิ่มเพียงเพิ่มความสามารถในการเชื่อมต่อกับ Docker เพื่อสั่ง Deploy Container ไปยังเครื่องปลายทาง หรือ Build Dockerfile แล้ว push image ไปยัง Docker Registry ภายใน แล้วแต่ความต้องการใช้งาน ยกตัวอย่างการใช้งาน Gitlab CI หากท่านใดใช้ CI ตัวอื่นๆ ก็เอาไปประยุกต์ใช้กันได้

ตัวอย่างจากภาพ

  • นักพัฒนา commit code เข้าไปที่ git repository
  • build script ใน ci runner จะทำหน้าที่ build docker image แล้ว push image ไปยัง local registry
  • deploy docker image จาก local registry ไปยังเครื่อง development หรือเครื่อง production


Continue reading

OpenStack Swift หรือ SwiftStack เป็นบริการ Object Storage ที่รองรับการทำงานแบบ Distribution Storage รองรับการทำ Data Replication สามารถ Scale Storage Node ไปได้เรื่อยๆ ทำให้สามารถขยายขนาดของ Storage ทำได้ง่ายมากขึ้น ครั้งนี้ไม่ได้มาแนะนำการติดตั้ง Swift แต่จะมาแนะนำวิธีการใช้งาน Swift อย่างง่าย ผ่าน Command Line ซึ่งสะดวกและรวดเร็วกว่าการใช้งานผ่าน GUI มาก สำหรับท่านที่ไม่มี Swift Server เดี๋ยวเราติดตั้ง SAIO ใช้สำหรับทดลองเล่นได้

สร้าง data container สำหรับเก็บข้อมูล

docker run -v /srv --name SWIFT_DATA busybox

จากนั้นผูก volume จาก data container ไปยัง swift server

docker run -d -p 8080 --volumes-from SWIFT_DATA -t nashtrash/docker-swift-onlyone

เท่านี้เราก็จะได้ swift ใช้งานแบบรวดเร็ว docker ps ดูว่า inernal port ได้ค่าอะไร ขอผมเป็น 0.0.0.0:49153->8080/tcp มาลองทดสอบกัน ติดตั้ง swift cli กันก่อน

apt-get install python-swiftclient


Continue reading