เปลี่ยน ubuntu sources.list ก่อนสร้าง image ด้วย dockerfile

การใช้งาน docker นั้นเราสามารถใช้ image จาก docker hub หรือเราจะสร้าง image ของเราเอง ซึ่งมีหลายวิธีในการสร้าง image แบบของเราเอง (custom) วิธีหนึ่งคือการใช้ dockerfile อย่างคร่าว ๆ คือ mkdir ~/mydocker cd ~/mydocker touch dockerfile docker built -t test_app:20170713 . docker images ในไฟล์ชื่อ dockerfile นี้จะมีไวยกรณ์ประมาณนี้ # Image tag: test_app:20170713 <– บรรทัดนี้คือ comment FROM ubuntu:16.04 <– บรรทัดนี้คือ ไปเอา image ชื่อ ubuntu:16.04 จาก docker hub RUN apt-get update <– บรรทัดนี้คือ คำสั่งบอกว่าจะติดตั้ง หลังคำว่า RUN นั่นเอง RUN apt-get dist-upgrade -y RUN apt-get install -y apache2 libapache2-mod-php7.0 php7.0 COPY … ADD … EXPOSE … CMD … และยังมี command อื่น ๆ อีก ทีนี้จากการที่ต้องลองผิดลองถูกบ่อย ๆ จึงพบว่า หากเราเพิ่มคำสั่ง 2 บรรทัดนี้เข้าไปก่อนบรรทัด RUN apt-get update ก็จะทำให้เราได้ใช้ ubuntu repository ที่ต้องการแทนค่า default ที่ archive.ubuntu.com เช่นต้องการให้มาใช้ th.archive.ubuntu.com ก็เขียนคำสั่งดังนี้ RUN sed -i ‘s/\/us.archive/\/th.archive/g’ /etc/apt/sources.list RUN sed -i ‘s/\/archive/\/th.archive/g’ /etc/apt/sources.list ผลลัพธ์คือ หลังจากทำคำสั่ง docker built -t test_app:20170713 . จะเห็นว่าในขั้นตอนการ build นั้นจะดาวน์โหลดไฟล์ได้รวดเร็วกว่าเดิมมาก จึงนำความรู้มาบอกกันครับ อ้อลืมบอกว่าบทความที่เขียนนี้ ผมทดสอบกับ docker version 17.06.0-ce ครับ อยากแนะนำความรู้เกี่ยวกับ docker ที่อ่านมา พบว่าน่าสนใจ ลองอ่านดูครับ อ่านง่าย   บทความในต่างประเทศ How To Install and Use Docker on Ubuntu 16.04 (https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-16-04) How to Build an Image with the Dockerfile (https://www.sitepoint.com/how-to-build-an-image-with-the-dockerfile/) Dockerfile reference (https://docs.docker.com/engine/reference/builder/) Best practices for writing Dockerfiles (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/) How to update Docker image to maintain your containers secure  (https://bobcares.com/blog/update-docker-image/2/) How to upgrade docker container after its image changed (https://stackoverflow.com/questions/26734402/how-to-upgrade-docker-container-after-its-image-changed) Manage data in containers (https://docs.docker.com/engine/tutorials/dockervolumes/)  

Read More »

ELK #04

คราวนี้มาติดตั้งบน Docker บ้าง ถ้าเครื่อง Server เป็น Ubuntu 16.04 ทำตามขั้นตอนนี้เพื่อให้สามารถใช้งาน Docker ได้ วิธีการติดตั้ง Docker บน Ubuntu 16.04 เนื่องจาก Elasticsearch 5.x ใช้ Virtual Memory มากขึ้น ลองใช้คำสั่งนี้ดูค่าปัจจุบัน sysctl vm.max_map_count ค่า Default น่าจะประมาณนี้ vm.max_map_count = 65530 ให้ทำการเพิ่มด้วยคำสั่งนี้ sudo -i sudo echo “vm.max_map_count=262144” >> /etc/sysctl.conf exit จากนั้นให้ทำการ Reboot ติดตั้ง docker image ของ sebp/elk ด้วยคำสั่ง sudo docker pull sebp/elk โดย Default จะได้ Lastest Version ใช้คำสี่งต่อไปนี้ เพื่อ Start ELK ขึ้นมา โดยเปิด port ให้ Kibana: 5601, Elasticsearch: 9200, Logstash: 5044 และทำงานเป็นแบบ Detach หรือ Background นั่นเอง sudo docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -it –name elk sebp/elk หรือถ้าจะใช้ Docker Compose ก็สามารถใช้งานด้วยวิธีการนี้ เริ่มจาก ติดตั้ง Docker Compose ด้วยคำสั่ง sudo -i curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose exit จากนั้น สร้างไฟล์ /path/to/your/config/elk.yml เนื้อหาดังนี้ elk: image: sebp/elk ports: – “5601:5601” – “9200:9200” – “5044:5044” จากนั้นก็ Start sudo /usr/local/bin/docker-compose -f /path/to/your/config/elk.yml up -d elk หากต้องการให้ container ทำการ start ทุกครั้งที่ Reboot ใช้คำสั่ง sudo crontab -e แล้วใส่บรรทัดนี้ต่อท้ายไฟล์ @reboot /usr/local/bin/docker-compose -f /home/mama/elk.yml up -d elk ทดสอบว่า Container ที่กำลังทำงานอยู่มีอะไรบ้าง sudo docker ps วิธีดูว่า มี Container อะไรบ้าง (ทั้งที่ทำงานและไม่ทำงาน) sudo docker ps -a วิธีดูว่าเกิดอะไรขึ้นกับ Container (ในที่นี้ ชื่อ elk) sudo docker logs elk ถึงจุดนี้ ก็สามารถใช้งาน Kibana ทาง web url: http://your.host:5601 ได้แล้ว   Reference: https://elk-docker.readthedocs.io/  

Read More »

ELK #03

วิธีการติดตั้ง Kibana บน Ubuntu 16.04 ก่อนอื่น Update sudo apt -y update ; sudo apt -y upgrade ติดตั้ง Java JDK sudo apt -y install default-jdk Download และติดตั้ง wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.2-amd64.deb sudo dpkg -i kibana-5.4.2-amd64.deb จากนั้นแก้ไขไฟล์ /etc/kibana/kibana.yml เพิ่มบรรทัดสุดท้าย server.host: “192.168.xxx.yyy” elasticsearch.url: “http://your.elastic.host:9200” จากนั้น Start Service sudo service kibana start เปิด Web Browser ไปที่ http://192.168.xxx.yyy:5601

Read More »

ELK #02

ขั้นตอนการติดตั้ง Logstash บน Ubuntu 16.04 ก่อนอื่น Update sudo apt -y update ; sudo apt -y upgrade ติดตั้ง Java JDK sudo apt -y install default-jdk Download และติดตั้ง wget https://artifacts.elastic.co/downloads/logstash/logstash-5.4.2.deb sudo dpkg -i logstash-5.4.2.deb Start Logstash Service sudo service logstash start ต่อไป สร้าง Configuration ไว้ใน /etc/logstash/conf.d/ เช่น จะสร้าง Pipeline ที่อ่านจาก File /tmp/test.log แล้ว ส่งไปที่ Elasticsearch โดยตรง ให้สร้างไฟล์ /etc/logstash/conf.d/file.conf ดังนี้ input { file { path => “/tmp/test.log” type=> “test” } } output { file { path => “/tmp/output.txt” } } เมื่อลองใช้คำสั่ง echo “$(date): New World” >> /tmp/test.log ก็จะปรากฏไฟล์ /tmp/output.txt ขึ้น ต่อไป ลองเปลี่ยน Output เป็น Elasticsearch โดยการสร้างไฟล์ /etc/logstash/conf.d/es.conf input { file { path => “/tmp/test.log” type=> “test” } } output { elasticsearch { hosts => [“http://your.elastic.host:9200”] } } เมื่อลองใช้คำสั่ง echo “$(date): New World” >> /tmp/test.log ก็จะปรากฏบรรทัดใหม่ใน /tmp/output.txt และ มีการเขียนไปบน Elasticsearch ด้วย ลองเปิด Web Browser แล้วใช้คำสั่งต่อไปนี้ http://your.elastic.host:9200/_cat/indices?v ก็จะได้ผลลัพธ์ประมาณนี้ จากนั้น วิธีที่จะแสดงผลที่เก็บไว้ใน Elasticsearch ให้เปิด URL นี้ http://your.elastic.host:9200/logstash-2017.06.24/_search?q=* ก็จะได้ผลลัพธ์ประมาณนี้ แล้วยังไง ??? รอดูตอนต่อไป

Read More »

ELK #01

ELK = ElasticSearch + LogStash + Kibana วิธีการติดตั้ง ElasticSearch บน Ubuntu 16.04 ก่อนอื่น Update sudo apt -y update ; sudo apt -y upgrade ติดตั้ง Java JDK sudo apt -y install default-jdk Download และติดตั้ง wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.2.deb sudo dpkg -i elasticsearch-5.4.2.deb sudo update-rc.d elasticsearch defaults 95 10 แก้ไขไฟล์ /etc/elasticsearch/elasticsearch.yml โดยเพิ่มบรรทัดสุดท้าย cluster.name: my-cluster-name network.host: [_site_] node.name: ${HOSTNAME} เริ่มทำงาน sudo -i service elasticsearch start ทดสอบการทำงาน โดยใช้คำสั่ง curl -XGET “${HOSTNAME}:9200/?pretty” ดู Log ได้ที่ sudo tail -f /var/log/elasticsearch/my-cluster-name.log

Read More »