งาน DockerCon 2015 และงาน OSCON 2015 มีหัวข้อเกี่ยวกับ Container Pattern ด้วย ซึ่งน่าสนใจมาก ในงาน conference ทั้ง 2 งานเอาตัวอย่างการใช้งาน Container ในหลายแบบมาให้ดู ซึ่งเป็นแนวทางในการประยุกต์ใช้งาน Container ได้ดีเลยทีเดียว ลองมาดูในแต่ละแบบกัน


Continue reading

Docker ถูกประยุกต์ใช้งานในหลายรูปแบบไม่เพียงแต่เป็น Service Container เท่านั้น แต่ยังถูกใช้เป็น Container สำหรับ Command Line ด้วย ยกตัวอย่างเช่น tutum-cli ที่รวมเอาคำสั่งที่ต้องใช้ใน tutum รวมเอาไว้ใน container เพื่อความสะดวกในการใช้งาน เวลาใช้งานก็สร้าง alias ของคำสั่ง เชื่อมกับ docker run อีกทีซึ่งดูแล้วอาจจะดูแปลกๆ แต่ก็สามารถทำได้ และใช้งานได้ดีเลยทีเดียว

ครั้งนี้เราจะมาลองสร้าง Container CLI กันดูบ้าง แต่ให้ดูเท่ต้องเป็น CLI ที่เข้าใช้งานได้จากหน้าเว็บและเรียกใช้คำสั่งที่เราต้องการได้ด้วย เราจะใช้ image ตั้งต้นของ CenturyLink ชื่อ wetty-cli มาสร้าง image กัน เริ่มจากสร้าง Dockerfile กันก่อนดังนี้

จากนั้นสั่ง build ดังนี้

docker build -t openstack-cli


Continue reading

วิธีการ 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


Continue reading

Tutum เป็น Container Platform สำหรับนักพัฒนาและผู้ดูแลระบบ Tutum ให้ความสามารถของ Container อย่าง Docker ซึ่งช่วยใช้คุณ Build Container, Depoly ตลอดจนจัดการ Application ของคุณบน Cloud Infrastructure ใดๆ ก็ได้ โดยใช้ Tutum ซึ่ง ตอนนี้ Tutum สามารถเชื่อมต่อกับ Cloud Infrastructure ได้ 3 ค่าย ได้แก่ Microft Azure, Amazon Web Service และ DigitalOcean นอกจากนี้ Tutum ยังสามารถเชื่อมต่อเครื่องเซิร์ฟเวอร์ ของคุณเป็น Cluster เดียวกันกับ Tutum ได้อีกด้วย

Tutum ใช้บริการได้ฟรีไม่เสียค่าใช้จ่าย เพราะ Tutum ทำหน้าที่เป็น Platform สำหรับเชื่อมต่อไปยัง Cloud Infra ที่เราใช้บริการอยู่ ดังนั้นการสั่ง Deploy Container อะไรก็ตาม จะสั่งผ่าน Tutum เป็นหลัก


Continue reading

เนื่องจากอยากทดลอง Icinga2 ว่าเป็นอย่างไร แต่พอดูวิธีการติดตั้งแล้วรู้สึกว่าขั้นตอนเยอะเกินไปหรือเปล่า ก็เลยได้ไปค้นที่ Docker Hub ว่ามีนักพัฒนาท่านใดทำ Docker Image ไว้ให้ใช้บ้าง พบว่ามีหลายคน จนเลือกไม่ถูก T_T ผมก็เลยเลือก Image ของ jordan/icinga2 มาลองดู เนื่องจากเข้าใจง่ายดีไม่มีขั้นตอนซับซ้อนมากนัก

วิธีการก็ง่ายๆ สั่ง Pull Image มาจาก Docker Hub

docker pull jordan/icinga2

จากนั้นสั่ง run แบบ expose port 443 และ 80 ที่เครื่อง host

ID=$(docker run -p 80:80 -p 443:443 -d jordan/icinga2:latest)


Continue reading

หลายท่านที่ใช้ 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 นั่นเอง

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

เว็บนี้เคยนำเสนอเรื่อง Logstash, Kinana, ElasticSearch ไปบ้างแล้ว ซึ่งอธิบายรายละเอียดในส่วนของการติดตั้งไว้อย่างดี ครั้งนี้จะมาแนะนำการใช้งานผ่าน Container กันบ้าง Logstash เป็นเครื่องมือที่ได้รับความนิยมมากขึ้น เพราะไม่เพียงแค่มีความสามารถในการดึง log จากไฟล์ filter log และการเชื่อมต่อกับ syslog-ng ได้ แต่ยังสามารถเชื่อมต่อกับ ElasticSearch ทำให้การเก็บ log บนฐานข้อมูลมีประสิทธิภาพมากขึ้น การจัดการ log ทำได้ง่ายผ่าน LogStash ได้ง่าย

สำหรับ Kibana เป็นโครงการ Visualized ข้อมูลที่มีอยู่ใน ElasticSearch ทำให้เราสามารถสร้างการประมวลผลข้อมูลจาก log ธรรมดาจาก ElasticSearch ให้กลายเป็น Grap ที่ดูเข้าใจได้ง่าย และที่สำคัญคือสามารถเขียน config เพื่อใช้ในการวิเคราะห์ข้อมูลได้ด้วย

ครั้งนี้เราจะมาใช้งาน Logstash, Kibana และ ElasticSearch ผ่าน Docker Container มีนักพัฒนาหลายรายประยุกต์ Container กับบริการเหล่านี้ แต่มี Docker Image อยู่ชุดหนึ่งเป็นจุดเริ่มต้นได้ง่ายคือ pblittle/docker-logstash ทำออกมาได้ดี และมีเอกสารอ้างอิงที่เข้าใจได้ง่าย ใน image ชุดนี้ได้รวมเอา service ทั้งหมดรวมเข้าไว้เป็นก้อนเดียว แต่การเรียกใช้งานไม่จำเป็นต้องเรียก service ภายในตัวเองทั้งหมด แต่สามารถเรียกใช้ service ภายนอกเข้ามาร่วมได้ด้วย สำหรับ logstash config สามารถ link จาก url ภายนอกได้ซึ่งทำให้ง่ายในการจัดการมากขึ้น ลองดูตัวอย่าง


Continue reading