การใช้ GitHub Command Line #newbie

Prerequisite ต้องมี GitHub Account ก่อน ทำตามวิธีการนี้ https://help.github.com/articles/signing-up-for-a-new-github-account/ สร้าง GitHub Repository บน Web ก่อน  (ในที่นี้ จะสร้าง Repository ชื่อ mynewrepo) ซึ่งจะได้ URL มาเป็น https://github.com/your-username/mynewrepo.git สร้าง local repository mkdir mynewrepo cd mynewrepo git init git status สร้างไฟล์ใหม่ # สมมุติสร้างไฟล์ใหม่ echo “Hello World” > mynewfile.txt git add . git status ทำการ Commit git commit -m “This is a first Commit” สร้าง Connection ระหว่าง Local Folder กับ GitHub Repository git remote add origin https://github.com/your-username/mynewrepo.git git push -u origin master จากนั้น ใส่ Username/Password ของ GitHub Account ไปดูผลงานใน Repository “mynewrepo” ที่ https://github.com/your-username/mynewrepo เมื่อมีการแก้ไขไฟล์ echo “Hello New World” >> mynewfile.txt git status ทำการ เพิ่ม > Commit > Push git add . git commit -m “This is a second Commit” git push -u origin master วนไป  

Read More »

เตาะแตะไปกับ Docker ตอนที่ 11 Docker Compose (LDAP services)

เราจะมาเรียนรู้ การใช้ docker compose รัน service 2 services คือ OpenLDAP และ phpLDAPadmin ซึ่ง docker จะมองว่าการใช้ docker compose คือ เรากำลังรัน project ที่ประกอบด้วย service หลาย ๆ service ให้แน่ใจว่าอยู่ที่ home directory ให้ใช้คำสั่งนี้ $ cd สร้างไดเรกทอรีของ project สมมติตั้งชื่อว่า ex1 $ mkdir ex1 $ cd ex1 สร้างไดเรกทอรี openldap ภายในมี dockerfile และไดเรกทอรีที่เกี่ยวข้อง ทำตามบล็อกเรื่อง “เตาะแตะไปกับ Docker ตอนที่ 9 Dockerfile (OpenLDAP)” สร้างไดเรกทอรี phpldapadmin ภายในมี dockerfile และไดเรกทอรีที่เกี่ยวข้อง ทำตามบล็อกเรื่อง “เตาะแตะไปกับ Docker ตอนที่ 10 Dockerfile (phpLDAPadmin)” สร้างไฟล์ docker-compose.yml ด้วยเอดิเตอร์ที่ถนัด เช่น vi หรือ nano ก็ได้ $ vi docker-compose.yml version: ‘2’ services: openldap: build: ./openldap container_name: openldap volumes: – ldapdatavol:/var/lib/ldap – ldapconfigvol:/etc/ldap/slapd.d ports: – “389:389” – “636:636” restart: always phpldapadmin: build: ./phpldapadmin container_name: phpldapadmin environment: HNAME: “openldap” ports: – “8080:80” depends_on: – openldap restart: always volumes: ldapdatavol: external: false ldapconfigvol: external: false อธิบายได้ดังนี้ ไฟล์ docker-compose.yml นี้ จะมี service แรกคือ openldap จะ build image จากไดเรกทอรี ./openldap เมื่อรันเป็น container จะตั้งชื่อว่า openldap โดยมีที่เก็บข้อมูลถาวรคือ ldapdatavol จะ mapped ไปยัง /var/lib/ldap ใน container และที่เก็บคอนฟิก ldapconfigvol จะ mapped ไปยัง /etc/ldap/slapd.d ใน container เช่นเดียวกัน โดย Host และ container เปิด port ตรงกัน คือ เปิด port TCP 636(LDAPS) และ 389(LDAP) และ container นี้จะทำงานทุกครั้งเมื่อเปิดเครื่อง ต่อมา service ที่สองคือ phpldapadmin จะ build image จากไดเรกทอรี ./phpldapadmin เมื่อรันเป็น container จะตั้งชื่อว่า phpldapadmin มีการตั้งค่าตัวแปร HNAME เป็นชื่อ container อันแรก คือ openldap โดยที่ Host จะเปิด port TCP 8080 ไปยัง port TCP 80

Read More »

เตาะแตะไปกับ Docker ตอนที่ 10 Dockerfile (phpLDAPadmin)

ในตอนที่แล้วเราใช้งาน openldap ด้วยคำสั่ง เช่น ldapsearch หรือ ldapadd ได้แล้ว วันนี้เราจะเรียนรู้การใช้ dockerfile สร้าง image ชื่อ phpldapadmin เพื่อใช้เป็น web interface ในการเข้าไปจัดการ LDAP database ของ container ชื่อ openldap โดยที่ phpLDAPadmin นี้คือการรัน php บน apache2 แล้วเราจะติดต่อระหว่าง container กันได้อย่างไร มาดูกันครับ เช่นเดียวกับครั้งที่แล้ว ผมจะแยกเป็น 3 ขั้นตอน คือ 1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้อง 2.ขั้นตอนสร้างไฟล์ dockerfile และ 3.ขั้นตอนการรัน container   1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้อง ให้แน่ใจว่าอยู่ที่ home directory ให้ใช้คำสั่งนี้ $ cd สร้างไดเรกทอรีของ image ที่เราจะสร้าง $ mkdir phpldapadmin $ cd phpldapadmin $ mkdir src เราจะเตรียมไฟล์ชื่อ apache2-foreground ให้เปิดไฟล์จากที่นี่ https://github.com/docker-library/php/blob/master/5.6/jessie/apache/apache2-foreground แล้วคัดลอกทุกบรรทัด นำมาสร้างไฟล์ ด้วยเอติเตอร์ที่ถนัด เช่น vi หรือ nano ก็ได้ $ vi ./src/apache2-foreground   2.ขั้นตอนสร้างไฟล์ dockerfile ตอนนี้ก็มาถึงขั้นตอนการเขียน dockerfile ด้วยเอดิเตอร์ที่ถนัดเช่น vi หรือ nano ก็ได้ $ vi dockerfile # Composer: Wiboon Warasittichai FROM ubuntu:16.04 # Change apt source RUN sed -i ‘s/\/us.archive/\/th.archive/g’ /etc/apt/sources.list && \ sed -i ‘s/\/archive/\/th.archive/g’ /etc/apt/sources.list # Update ubuntu, then install packages RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt install -y php-ldap phpldapadmin ldap-utils # Timezone Asia/Bangkok RUN apt-get install -y tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \ dpkg-reconfigure -f noninteractive tzdata # Cleaning RUN apt-get autoremove -y && apt-get clean -y EXPOSE 80 CMD RUN ulimit -n 1024 ENV HNAME ${HNAME} ADD ./src/startup.sh /startup.sh COPY ./src/apache2-foreground /usr/local/bin/ RUN chmod +x /usr/local/bin/apache2-foreground ENTRYPOINT [“/bin/bash”,”/startup.sh”]   ภายในไฟล์ dockerfile เราได้อ้างถึงการนำไฟล์ชื่อ startup.sh ก็ให้สร้างไฟล์นี้ด้วย $ vi ./src/startup.sh #!/bin/bash sed -i “s/127.0.0.1/$HNAME/g” /etc/phpldapadmin/config.php /usr/local/bin/apache2-foreground จุดน่าสนใจในไฟล์ dockerfile

Read More »

เตาะแตะไปกับ Docker ตอนที่ 9 Dockerfile (OpenLDAP)

วันนี้เราจะเรียนรู้การใช้ dockerfile สร้าง image ชื่อ openldap เพื่อใช้เป็น LDAP database ผมทดสอบด้วย Oracle VM VirtualBox เป็น VM ที่ตั้งค่า Network adapter เป็นแบบ NAT network ที่ติดตั้ง Ubuntu 16.04 และ docker เรียบร้อยแล้ว ในตัวอย่างนี้ผมตั้งชื่อ host ว่า ldap.example.com โดยแก้ไขที่ไฟล์ /etc/hosts และ /etc/hostname ให้เรียบร้อย แล้วรีบูตเครื่องด้วย ผมจะขอแยกขั้นตอนออกเป็น 3 ขั้นตอนหลัก คือ 1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้องซึ่งรวมไฟล์ ldif ด้วย 2.ขั้นตอนสร้างไฟล์ dockerfile และ 3.ขั้นตอนการรัน container   1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้อง สร้างไดเรกทอรีของ image ที่เราจะสร้าง $ mkdir openldap สร้างไดเรกทอรีที่เก็บไฟล์ ldif (โครงสร้าง และ ตัวอย่างข้อมูล) $ cd openldap $ mkdir src สร้างไฟล์ ./src/create-schema.ldif ด้วยเอติเตอร์ที่ถนัด เช่น vi หรือ nano ก็ได้ $ vi ./src/create-schema.ldif # Starter kit for create user in domain dc=example,dc=com # Create 1st tree OU=groups dn: ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: groups # Create sub tree OU=execs,OU=groups dn: ou=execs,ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: execs # Create sub tree OU=staffs,OU=groups dn: ou=staffs,ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: staffs # Create sub tree OU=students,OU=groups dn: ou=students,ou=groups,dc=example,dc=com objectClass: organizationalUnit ou: students # Create 2nd tree OU=people dn: ou=people,dc=example,dc=com objectClass: organizationalUnit ou: people สร้างไฟล์ ssl.ldif $ vi src/ssl.ldif dn: cn=config changetype: modify add: olcTLSCipherSuite olcTLSCipherSuite: NORMAL – add: olcTLSCRLCheck olcTLSCRLCheck: none – add: olcTLSVerifyClient olcTLSVerifyClient: never – add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap-ca-cert.pem – add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap-ca-key.pem สร้างไฟล์ ./src/create-users.ldif $ vi ./src/create-users.ldif # Create 1 user in tree OU=execs,OU=groups dn: cn=nana,ou=execs,ou=groups,dc=example,dc=com objectClass: inetOrgPerson uid: nana sn: Na givenName: Na cn: nana

Read More »

เตาะแตะไปกับ Docker ตอนที่ 8 Cleanup Disk Space

การเรียนรู้ docker เราก็จะมีการทดสอบ pull image มา แล้ว run เป็น container รวมทั้งอาจมีการสร้างพื้นที่เก็บข้อมูลที่เรียกว่า volumes (ทั้งแบบ named volume และ anonymous volume) บ่อยครั้งเมื่อเราใช้คำสั่งตรวจสอบ เราจะพบว่ามีอะไรไม่รู้หลงเหลืออยู่กินเนื้อที่ไปเยอะ ตรวจสอบรายการ container $ docker ps -a ลบ containers ที่ไม่ใช้งานแล้ว $ docker ps –filter status=dead –filter status=exited –filter status=created -aq | xargs -r docker rm -v หมายเหตุ คำสั่งด้านบนนี้จะลบ data containers ด้วย ถ้ามีการสร้าง container ชนิดเก็บ data โปรดตรวจสอบให้ดีนะ ปัจจุบัน data container นั้น deprecated (ไม่แนะนำให้ใช้งาน) ตรวจสอบรายการ images $ docker images ลบ images ที่ไม่ใช้งานแล้ว $ docker images –no-trunc | grep ‘<none>’ | awk ‘{ print $3 }’ | xargs -r docker rmi ตรวจสอบรายการ volumes $ docker volumes ls ลบ volume ที่ไม่ถูกใช้งานโดย container ใด ๆ เลย $ docker volume ls -q -f dangling=true | xargs -r docker volume rm หรือจะใช้อีกแบบ แต่ต้องติดตั้ง jq เพิ่มด้วย $ sudo apt install jq $ docker ps -aq | xargs docker inspect | jq -r ‘.[] | .Mounts | .[] | .Name | select(.)’   References: http://codegist.net/code/docker-cleanup-disk-space/ https://stackoverflow.com/questions/41875846/docker-difference-between-data-volumes-and-data-containers

Read More »