ถือว่ามาแรงมากในรอบปีที่ผ่านมา สำหรับ docker ที่ช่วยบริหารจัดการซอฟต์แวร์เพื่อให้รันบนลีนุกซ์ที่แตกต่างกันได้
โดยจะมีการรวบรวมซอฟต์แวร์ ขั้นตอนการติดตั้ง libraries การคอนฟิก และอื่นๆ ที่จำเป็น รวมเป็น image เพื่อให้สามารถนำไปรันภายใต้ container ซึ่งเป็นคุณสมบัติหนึ่งของ kernel ในลีนุกซ์ ได้อย่างไม่มีปัญหา
ในที่นี้ขอแสดงการติดตั้งและทดลองใช้ docker เบื้องต้น โดยจะทดลองบน CentOS 7
ติดตั้งและรันเซิร์ฟเวอร์ docker
ใช้คำสั่ง yum install ติดตั้ง docker
[root@cent7-docker ~]# yum install docker
รันเซอร์วิสเซิร์ฟเวอร์ docker (Docker Server)
[root@cent7-docker ~]# systemctl start docker
ลองรันคำสั่ง docker ตามด้วย version เพื่อแสดงข้อมูลเวอร์ชันการติดตั้งของ docker
[root@cent7-docker ~]# docker version Client: Version: 1.8.2-el7.centos API version: 1.20 Package Version: docker-1.8.2-10.el7.centos.x86_64 Go version: go1.4.2 Git commit: a01dc02/1.8.2 Built: OS/Arch: linux/amd64 Server: Version: 1.8.2-el7.centos API version: 1.20 Package Version: Go version: go1.4.2 Git commit: a01dc02/1.8.2 Built: OS/Arch: linux/amd64
รันคำสั่ง docker ตามด้วย info เพื่อแสดงข้อมูลเกี่ยวกับ container, images การใช้พื้นที่ดิสก์ ที่อยู่บนเซิร์ฟเวอร์
[root@cent7-docker ~]# docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-253:0-134350219-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 1.821 GB
Data Space Total: 107.4 GB
Data Space Available: 34.38 GB
Metadata Space Used: 1.479 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.146 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.107-RHEL7 (2015-10-14)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.10.0-327.3.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
CPUs: 1
Total Memory: 993 MiB
Name: cent7-docker.example.com
ID: D6B2:DOOM:MAAW:TTTZ:SS5E:UMKW:TMID:PHPY:5WJ7:IDV2:GCMB:MX2X
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@cent7-docker ~]#
ตอนนี้บนเซิร์ฟเวอร์ docker ยังไม่มี container หรือ image ใดๆ
ค้นหาและดาวน์โหลด Docker Image
เริ่มต้นบนเซิร์ฟเวอร์ต้องมี image ก่อน วิธีการที่ง่ายที่สุดสำหรับการเริ่มต้นหัดใช้ คือดาวน์โหลด image ที่ถูกสร้างไว้อยู่แล้ว (pre-built image) จาก Docker Hub Repository
บนเว็บไซต์ Docker Hub (https://hub.docker.com/) จะสามารถค้นหา image ที่ต้องการได้
ตัวอย่างผลการค้นหา image ที่ชื่อ centos
image ที่อยู่บน Docker Hub Repository นี้ ใครก็ได้สามารถอัพโหลดขึ้นไปได้ แต่จะมี image อย่างเป็นทางการ (Official) ที่ทาง docker เป็นผู้สร้างเอง
ลองคลิก DETAILS เข้าไปดูรายละเอียดของ centos official
ตัวอย่างรายละเอียดของ image อย่างเป็นทางการที่ชื่อ centos
นอกจากจะเข้าเว็บไซต์ Docker Hub เพื่อค้นหาแล้ว เราสามารถใช้คำสั่ง docker search เพื่อค้นหา image จากคำที่เราต้องการได้
ตัวอย่างการใช้คำสั่ง docker search เพื่อค้นหา image ที่ชื่อ centos
[root@cent7-docker ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 1774 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 61 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.7 x86_64 / EPEL/IUS Repos / Ope... 14 [OK] docker.io docker.io/jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP m... 11 [OK] ...
ใช้คำสั่ง docker pull เพื่อดาวน์โหลด image ที่ต้องการ มาใส่ไว้ใน docker server ของเราเอง
[root@cent7-docker ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ... latest: Pulling from library/centos
47d44cb6f252: Pull complete
838c1c5c4f83: Pull complete
5764f0a31317: Pull complete
60e65a8e4030: Pull complete
library/centos:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:8072bc7c66c3d5b633c3fddfc2bf12d5b4c2623f7004d9eed6aae70e0e99fbd7
Status: Downloaded newer image for docker.io/centos:latest
ดีฟอลต์จะเป็นการดาวน์โหลดเวอร์ชันล่าสุด (tag latest)
รันคำสั่ง docker images เพื่อดูรายชื่อ images ที่ถูกติดตั้งบนเซิร์ฟเวอร์ docker ของเราเอง
[root@cent7-docker ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/centos latest 60e65a8e4030 2 days ago 196.6 MB
รัน Docker Container
หลังจากที่มี image แล้ว เราสามารถใช้คำสั่ง docker run เพื่อรัน image นั้นขึ้นมา เป็น container ใหม่
ระบุออปชัน -i และ -t เพื่อรัน container ในโหมดที่สามารถพิมพ์คำสั่งลงไปได้ (interactive shell)
ตัวอย่างการรัน container จาก image ชื่อ centos ในโหมดโต้ตอบได้
[root@cent7-docker ~]# docker run -i -t centos [root@584761281fa0 /]#
สังเกตที่ prompt จะเป็นไป เป็นเลข id ของ container ที่รันขึ้นมา
ตอนนี้เท่ากับว่าเราอยู่ใน container แล้ว ลองพิมพ์คำสั่งต่างๆ
[root@584761281fa0 /]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@584761281fa0 /]# uname -a Linux 584761281fa0 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [root@584761281fa0 /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 11772 1868 ? Ss 04:01 0:00 /bin/bash root 25 0.0 0.1 35888 1472 ? R+ 04:04 0:00 ps aux
อย่าเพิ่ง exit ออกจาก container ลองเปิดอีกหน้าจอหนึ่ง แล้วล็อกอินเข้า ตัว docker server
พิมพ์คำสั่ง docker ps
[root@cent7-docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 584761281fa0 centos "/bin/bash" 5 minutes ago Up 5 minutes romantic_varahamihira
คำสั่ง docker ps บนเซิร์ฟเวอร์ จะแสดง container ที่รันอยู่
สลับไปหน้าจอของ container พิมพ์ exit เพื่อออกจาก container
[root@584761281fa0 /]# exit exit [root@cent7-docker ~]#
บนเซิร์ฟเวอร์ ลองพิมพ์ docker ps อีกครั้ง
[root@cent7-docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ไม่มี container รันอยู่แล้ว
ดีฟอลต์คำสั่ง docker ps จะแสดงเฉพาะ container ที่ถูกรันอยู่เท่านั้น
แต่ตัว container ยังมีอยู่ ต้องระบุออปชัน -a ตามหลัง เพื่อแสดง container ที่มีอยู่ทั้งหมด
[root@cent7-docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
584761281fa0 centos "/bin/bash" 11 minutes ago Exited (1) 3 minutes ago romantic_varahamihira
เราสามารถรันเพื่อสร้าง container ขึ้นมาใหม่อีกได้ ซึ่งแต่ละ container จะถูกรัน ทำงานแยกกัน
[root@cent7-docker ~]# docker run -i -t centos [root@2af52e276f56 /]# exit exit [root@cent7-docker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2af52e276f56 centos "/bin/bash" 58 seconds ago Exited (127) 13 seconds ago goofy_ramanujan 584761281fa0 centos "/bin/bash" 14 minutes ago Exited (1) 6 minutes ago romantic_varahamihira
สังเกตที่ตัวเลข CONTAINER ID
หากต้องการรัน container เดิมที่มีอยู่แล้ว สามารถใช้คำสั่ง docker start ระบุชื่อ (NAME) หรือ ID ของ container ที่ต้องการ
ตัวอย่างการรัน container เดิม
[root@cent7-docker ~]# docker start 584761281fa0 584761281fa0
ใช้คำสั่ง docker ps เพื่อดูสถานะของ container
[root@cent7-docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 584761281fa0 centos "/bin/bash" 18 minutes ago Up 19 seconds romantic_varahamihira
ใช้คำสั่ง docker attach เพื่อเชื่อมต่อเข้าไปใน container ที่รันอยู่
[root@cent7-docker ~]# docker attach 584761281fa0 [root@584761281fa0 /]#
รัน Docker Container Ubuntu บน CentOS 7
ตัวอย่างการรัน docker เพื่อค้นหา ดาวน์โหลด image และรัน container ของ ubuntu บน CentOS 7
ค้นหา image ชื่อ ubuntu
[root@cent7-docker ~]# docker search ubuntu INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/ubuntu Ubuntu is a Debian-based Linux operating s... 2878 [OK] docker.io docker.io/ubuntu-upstart Upstart is an event-based replacement for ... 56 [OK] docker.io docker.io/dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC on po... 29 [OK] docker.io docker.io/torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK] ...
ดาวน์โหลด image ที่ชื่อ ubuntu
[root@cent7-docker ~]# docker pull ubuntu Using default tag: latest Trying to pull repository docker.io/library/ubuntu ... latest: Pulling from library/ubuntu 9377ad319b00: Pull complete a82f81f25750: Pull complete b207c06aba70: Pull complete d55e68e6cc9c: Pull complete library/ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security. Digest: sha256:a2b67b6107aa640044c25a03b9e06e2a2d48c95be6ac17fb1a387e75eebafd7c Status: Downloaded newer image for docker.io/ubuntu:latest
รัน container
[root@cent7-docker ~]# docker run -i -t ubuntu
root@9294a512b028:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
root@9294a512b028:/# uname -a
Linux 9294a512b028 3.10.0-327.3.1.el7.x86_64 #1 SMP Wed Dec 9 14:09:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
root@9294a512b028:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 18168 2028 ? Ss 04:26 0:00 /bin/bash
root 17 0.0 0.1 15564 1136 ? R+ 04:27 0:00 ps aux
root@9294a512b028:/# exit
exit
[root@cent7-docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9294a512b028 ubuntu "/bin/bash" About a minute ago Exited (0) 4 seconds ago trusting_stallman
2af52e276f56 centos "/bin/bash" 12 minutes ago Exited (127) 12 minutes ago goofy_ramanujan
584761281fa0 centos "/bin/bash" 26 minutes ago Exited (127) 5 minutes ago romantic_varahamihira
สังเกตว่า container จะใช้ kernel เวอร์ชันเดียวกับตัวเซิร์ฟเวอร์