Docker Hub นั้นเป็นแหล่งรวมไฟล์ Image ของ Docker จากนักพัฒนา Docker เริ่มต้นด้วยการสมัครสมาชิกกันก่อนเข้าไปที่ https://hub.docker.com แล้วทำการกรอกข้อมูลลงในช่องต่างๆดังนี้

  • Username : ชื่อผู้ใช้งาน
  • Password : รหัสผ่าน
  • Email Address : อีเมลที่ใช้ในการสมัคร

ถ้าต้องการรับข้อมูลข่าวสารของ Docker ผ่านทางอีเมลให้ติ๊กถูกที่ Yes! I want the weekly newsletter! เมื่อกรอกข้อมูลครบถ้วนแล้วกดปุ่ม Sing Up

เมื่อกดแล้วให้ไปตรวจสอบอีเมลที่ได้ทำการสมัครไว้จะมีเมลเพื่อยืนยันการสมัคร กดที่ปุ่ม Confirm Your Email

กลับมาที่ https://hub.docker.com กดที่ปุ่ม Log in มุมขวาบนแล้วใส่ ชื่อผู้ใช้และรหัสผ่านให้ถูกต้องกดปุ่ม Log in ทำการเชื่อมโยงบัญชีผู้ใช้กับ GitHub เพื่อให้สามารถใช้งานการสร้างไฟล์แบบอัตโนมัติได้ แนะนำให้เข้าใช้งาน GitHub ไว้ก่อนเพื่อให้ง่ายต่อการเชื่อมโยง เลือก Settings เลือกที่ Linked Accounts จากนั้นทำการกดปุ่ม Select ด้านหลัง Github ทำการกดเลือกประเภทการเชื่อมโยงแบบ Public and Private (recommended) กดปุ่ม Select

กดปุ่ม Authorize application เมื่อกดปุ่มแล้วจะกลับมาสู๋หน้าของ Docker และจะมีข้อความ Unlink your GitHub account แสดงว่าได้ทำการเชื่อมโยงเรียบร้อยแล้ว

เพิ่ม Repository โดยไปที่ My Repositories เลือก Add Repository แบบ Automated Build จากนั้นกดปุ่ม Select ด้านล่าง GitHub

ทำการเลือก Repository ที่ต้องการโดยการกดปุ่ม Select จากนั้นกดปุ่ม Create Repository

เมื่อสร้างเสร็จแล้วจะมีข้อความแสดงตามรูปด้านล่าง

ใช้คำสั่ง

git clone https://github.com/user_name/repository_name

เพื่อคัดลอก remote repository มาใช้งาน โดยทำการเปลี่ยนค่า

  • user_name : บัญชี้ผู้ใช้ของ GitHub
  • repository_name : ชื่อ Repository

ตัวอย่างเช่น

git clone https://github.com/tomsonfox/docker

เข้าไปยังไดเรกทอรีที่ทำการ git clone มาด้วยคำสั่ง

cd docker

สร้าง Dockerfile เพื่อทำการติดตั้ง LAMP ดังนี้

สร้างไฟล์ apache_default เพื่อทำการตั้งค่าการทำงานของ Apache ด้วยคำสั่ง

gedit apache_default

แก้ไขไฟล์ apache_default

ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html
        
                Options FollowSymLinks
                AllowOverride None
        
                Options Indexes FollowSymLinks MultiViews
                AllowOverride FileInfo
                Order allow,deny
                allow from all

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        
        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

	#
	# Set HTTPS environment variable if we came in over secure
	#  channel.
	SetEnvIf x-forwarded-proto https HTTPS=on

แล้วทำการบันทึก

สร้างไฟล์ start-apache2.sh เพื่อทำการตั้งค่าให้ Apache

gedit start-apache2.sh

#!/bin/bash
source /etc/apache2/envvars
exec apache2 -D FOREGROUND

สร้างไฟล์ supervisord-apache2.conf เพื่อทำการตั้งค่าให้ Apache ทำงานทุกครั้งเมื่อสั่งรัน Container

gedit supervisord-apache2.conf

[program:apache2]
command=/start-apache2.sh
numprocs=1
autostart=true
autorestart=true

ไฟล์เพื่อการตั้งค่า MySQL
สร้างไฟล์ my.cnf

gedit my.cnf

[mysqld]
bind-address=0.0.0.0

สร้างไฟล์ start-mysqld.sh

gedit start-mysqld.sh

#!/bin/bash
exec mysqld_safe

สร้างไฟล์ supervisord-mysqld.conf

gedit supervisord-mysqld.conf

[program:mysqld]
command=/start-mysqld.sh
numprocs=1
autostart=true
autorestart=true

สร้างไฟล์ create_mysql_admin_user.sh

gedit create_mysql_admin_user.sh

#!/bin/bash

/usr/bin/mysqld_safe > /dev/null 2>&1 &

RET=1
while [[ RET -ne 0 ]]; do
    echo "=> Waiting for confirmation of MySQL service startup"
    sleep 5
    mysql -uroot -e "status" > /dev/null 2>&1
    RET=$?
done

PASS=${MYSQL_PASS:-$(pwgen -s 12 1)}
_word=$( [ ${MYSQL_PASS} ] && echo "preset" || echo "random" )
echo "=> Creating MySQL admin user with ${_word} password"

mysql -uroot -e "CREATE USER 'admin'@'%' IDENTIFIED BY '$PASS'"
mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION"


echo "=> Done!"

echo "========================================================================"
echo "You can now connect to this MySQL Server using:"
echo ""
echo "    mysql -uadmin -p$PASS -h -P"
echo ""
echo "Please remember to change the above password as soon as possible!"
echo "MySQL user 'root' has no password but only allows local connections"
echo "========================================================================"

mysqladmin -uroot shutdown

สร้างไฟล์ run.sh

gedit run.sh

#!/bin/bash

VOLUME_HOME="/var/lib/mysql"

sed -ri -e "s/^upload_max_filesize.*/upload_max_filesize = ${PHP_UPLOAD_MAX_FILESIZE}/" \
    -e "s/^post_max_size.*/post_max_size = ${PHP_POST_MAX_SIZE}/" /etc/php5/apache2/php.ini
if [[ ! -d $VOLUME_HOME/mysql ]]; then
    echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME"
    echo "=> Installing MySQL ..."
    mysql_install_db > /dev/null 2>&1
    echo "=> Done!"  
    /create_mysql_admin_user.sh
else
    echo "=> Using an existing volume of MySQL"
fi

exec supervisord –n

สร้าง Dockerfile

gedit Dockerfile

FROM ubuntu:14.04
MAINTAINER Tomson Fox 
# Install packages
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && \
  apt-get -y install supervisor git apache2 libapache2-mod-php5 mysql-server php5-mysql pwgen php-apc php5-mcrypt

# Add image configuration and scripts
ADD start-apache2.sh /start-apache2.sh
ADD start-mysqld.sh /start-mysqld.sh
ADD run.sh /run.sh
RUN chmod 755 /*.sh
ADD my.cnf /etc/mysql/conf.d/my.cnf
ADD supervisord-apache2.conf /etc/supervisor/conf.d/supervisord-apache2.conf
ADD supervisord-mysqld.conf /etc/supervisor/conf.d/supervisord-mysqld.conf

# Remove pre-installed database
RUN rm -rf /var/lib/mysql/*

# Add MySQL utils
ADD create_mysql_admin_user.sh /create_mysql_admin_user.sh
RUN chmod 755 /*.sh

# config to enable .htaccess
ADD apache_default /etc/apache2/sites-available/000-default.conf
RUN a2enmod rewrite

#Enviornment variables to configure php
ENV PHP_UPLOAD_MAX_FILESIZE 10M
ENV PHP_POST_MAX_SIZE 10M

# Add volumes for MySQL 
VOLUME  ["/etc/mysql", "/var/lib/mysql" ]

EXPOSE 80 3306
CMD ["/run.sh"]

Push ไฟล์ทั้งหมดไปยัง GitHub ด้วยคำสั่ง

git add .

git commit –m

git push origin master

เมื่อกลับไปที่หน้าเว็บไซต์ GitHub ก็จะพบไฟล์ทั้งหมดที่ได้ Push ขึ้นไป

รอสักครู่แล้ว Docker Hub จะทำการดึงข้อมูลจาก GitHub เมื่อเข้าไปยังหน้าเว็บไซต์ก็จะพบกับ Dockerfile จะทำการ Build ไฟล์โดยอัตโนมัติหรือถ้าหากต้องการ Build เองให้กดปุ่ม Start a Build

เมื่อทำการ Start a Build สังเกตในส่วนของ Builds History จะปรากฏสถานะของการ Build ประกอบด้วยข้อมูลดังนี้

  • build Id : หมายเลขของการ Build
  • Status : สถานะการทำงาน
  • Created Date : วันและเวลาที่ทำการเริ่ม Build
  • Last Updated : วันเวลาที่มีการปรับปรุงล่าสุด

สามารถเช้าไปดูรายละเอียดการทำงาน (Log) โดยทำการกดเลือก build id ที่ต้องการแนะนำคลิกขวาแล้วเลือก Open link in new tab

เมื่อ Status เป็น Finished หมายถีงสามารถใช้งาน Docker Image ได้แล้วทำการ Pull Docker Image ด้วยคำสั่งที่ปรากฏอยู่บริเวณมุมบนขวา

เช่น

sudo docker pull tomsonfox/docker

จากนั้นทำการสั่งสร้าง Container จาก Image ที่ทำการ Pull มาด้วยคำสั่ง

sudo docker run -d -p 80:80 -p 3306:3306 tomsonfox/docker

ไปที่เว็บเบราเซอร์จากนั้นเข้าไปที่ 172.17.42.1 ก็จะพบกับหน้าแรกของ Apache2

Comments are closed.