Docker: Membangun Lingkungan Pengembangan & Operasional ... · Docker: Membangun Lingkungan...

63
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat... Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni PTIK Universitas Trunojoyo Madura 10 April 2015

Transcript of Docker: Membangun Lingkungan Pengembangan & Operasional ... · Docker: Membangun Lingkungan...

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Docker: Membangun LingkunganPengembangan & Operasional Aplikasi Web

Husni

PTIK Universitas Trunojoyo Madura

10 April 2015

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image & ContainernyaJum’at, 10 April 2015

I Perintah di Docker client: pull, run, ps, images, rm,inspect

I Membuat Image dari Container: commit

I Simpan dan Restore Image

I Membuat Image dengan Dockerfile: Web Server + PHP

I Mengenal Data Volume:run dengan -d dan -v

I Pemetaan port Web server di Container ke Host

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

OutlineSenin, 13 April 2015

I Image DNS Server

I Satu Image banyak Container

I Image HAProxy

I Konfigurasi Reverse Proxy & Load Balancing.

I Image MySQL Server: Persistensi.

I Pengujian: studi kasus terpadu (team).

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Arsitektur Sistem HostingIntegrasi Docker & HAProxy

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

sudo docker perintah [opsi] [image|container]Pertemuan sebelumnya

I attach Attach to a running container

I images List images

I info Display system-wide information

I ps List containers

I pull Pull an image or a repository from a Dockerregistry server

I rm Remove one or more containers

I run Run a command in a new container

I start Start a stopped container

I stats Display a live stream of one or more containers’resource usage statistics

I stop Stop a running container

I top Lookup the running processes of a container

I version Show the Docker version information

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

sudo docker perintah [opsi] [image/container]Petemuan Sekarang

I build Build an image from a Dockerfile

I commit Create a new image from a container’s changes

I export Stream the contents of a container as a tararchive

I history Show the history of an image

I import Create a new filesystem image from thecontents of a tarball

I inspect Return low-level information on a container orimage

I load Load an image from a tar archive

I port Lookup the public-facing port that is NAT-ed toPRIVATE PORT

I rmi Remove one or more images

I save Save an image to a tar archive

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

sudo docker inspectReturn low-level information on a container or image

I Usage: docker inspect [OPTIONS]CONTAINER|IMAGE [CONTAINER|IMAGE...]

I sudo docker inspect ubuntu

I sudo docker run -it –name cubuntu ubuntu:14.04.2

I buka console (terminal) baru

I sudo docker ps

I sudo docker inspect cubuntu | grep ”IPAddress”

I sudo docker inspect cubuntu | grep ”Gateway”

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

sudo docker historyShow the history of an image

I Usage: docker history [OPTIONS] IMAGE

I sudo docker history ubuntu:14.04.2

I Perintah apa saja yang telah dijalankan sampaidiperoleh image bernama apachephp:sudo docker history apachephp

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Membuat Image dari ContainerPerintah commit

I Sebelumnya: menjalankan Image menjadi Container,menggunakan perintah run

I Image bersifat read-only, saat Container selesai(logout), update di dalam Container tidak tersimpan kedalam Image

I Container pada kondisi terakhir (saat berjalan) dapatdijadikan Image baru dengan perintah commit.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Container Apache + PHPUpdate container sesuai kebutuhan

I Jalankan Image ubuntu menjadi container. Jangan lupasertakan opsi –name, misalnya nama 01:sudo docker run -ti –name husni 01 ubuntu/bin/bash

I Di dalam Container, install Apache dan PHP terbaru(ikut repo Ubuntu):apt-get install apache2 php5 nano curl

I Web server sudah berjalan? Test dengan curl:curl localhost

I Buat aplikasi PHP, misal hanya phpinfo();, simpansebagai index.php.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Container Apache + PHPAkses Web Server dari Host

I Kembali ke Host, buka console baru

I Berapa IP Address dari container bernama nama 01?Gunakan docker inspect:sudo docker inspect nama 01 — grep ”IPAddress”

I Buka Web Browser, akses IP Address tersebut! Ataugunakan curl

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Container Apache + PHPUpdate container bukan update image

I Jalankan Image ubuntu dan beri nama Containernama 02:sudo docker run -ti –name husni 02 ubuntu/bin/bash

I Apakah apache, php, nano dan curl telah terinstall?TERNYATA BELUM.

I Update di dalam Container hanya berlaku di dalamContainer tersebut, tidak mempengaruhi Imagenya.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Meng-Image-kan ContainerPerintah commit

I Usage: docker commit [OPTIONS] CONTAINER[REPOSITORY[:TAG]]

I sudo docker ID atau nama container nama image baru

I sudo docker commit nama 01 web-server nama

I sudo docker commit -m ”Web server: apache phpnano curl” -a ”Husni Ilyas” 0b2616b0e5a8web-server 2015

I sudo docker commit -p nama 01 web-server nama

I Matikan/logout dari Container nama 01.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Update Aplikasi WebUpdate container nama 01

I Jalankan Image web-server nama menjadi Container

I Jalankan web server Apache:service apache2 start

I Cara lain: Buat Container sekaligus jalankan aplikasi.sudo docker run -d web-server nama serviceapache2 start

I Opsi -d digunakan untuk menjalankan daemon/Server.SEMENTARA GAGAL!

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

A Daemonized Hello worldsudo docker -d

I Perintah docker run dengan opsi -d (daemon).Container berjalan dibackground.

I sudo docker run -d ubuntu:14.04.2 /bin/sh -c”while true; do echo hello world; sleep 1; done”

I sudo docker ps

I sudo docker logs 8e53a3a0a7c3

I sudo docker stop 8e53a3a0a7c3

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Mengenal Data Volumesudo docker run -v

I Image bersifat read-only, padahal Container perluupdate. Image baru harus dibuat setiap waktu?.Bagaimana jika server (fisik) mati?

I Data Volume: memetakan direktori di HOST kedirektori di Container.

I misal: /home/husni/web-data ke /var/www/html

I sudo docker run -d -v/home/husni/web-data:/var/www/html -Pweb-server nama service apache2 start

I Pastikan direktori /home/husni/web-data telah ada.Buat file web dan letakkan di dalam direktori tersebut.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Menyimpan Image dan Menggunakan Kembalisudo docker save dan sudo docker load

I Perintah save digunakan untuk menyimpan Image.

I Usage: docker save [OPTIONS] IMAGE [IMAGE...]

I sudo docker save web-server nama -oweb-server nama.tar

I Perintah load digunakan untuk memuat suatu imageyang tersimpan ke sistem Docker.

I Usage: docker load [OPTIONS]

I sudo docker load -i web-server nama.tar

I sudo docker images –tree

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Menyimpan Container dan MenggunakanKembalisudo docker export dan sudo docker import

I Perintah export digunakan untuk mengekspor container(bukan image)

I Perintah import digunakan untuk mengimpor backup(file tar) ke dalam Docker.

I sudo docker export CONTAINER ID ¿ nama image.tar

I sudo docker import - nama image.tar

I Beda antara save dan load?

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Membuat Image dengan DockerfileLangkah Praktis

I Buat direktori khusus, misal ”nama” atau”docker/nama”. Jika akan membuat webserver,direktorinya mungkin /docker/webserver.

I Masuk (cd) ke dalam direktori tersebut

I Buat file bernama Dockerfile, berisi perintah-perintahmembangun image

I Buat Image menggunakan perintah build

I Jalankan Image menjadi container dengan perintah run

I Pastikan anda berada di dalam direktori kerja di atas.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image Web serverLangkah 1: Membuat file bernama Dockerfile

FROM ubuntu:14.04RUN apt-get -y updateRUN apt-get -y install apache2 php5ADD web.conf /etc/apache2/sites-available/RUN a2dissite 000-defaultRUN a2ensite webADD index.php /var/www/EXPOSE 80ENTRYPOINT [”/usr/sbin/apache2ctl”]CMD [”-D”, ”FOREGROUND”]

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image Web serverLangkah 2: Membuat file bernama web.conf

<VirtualHost *:80>DocumentRoot /var/www/LogLevel warnErrorLog /dev/stdoutCustomLog /dev/stdout combined</VirtualHost>

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image Web serverLangkah 3: Membuat file bernama index.php

<?phpprint(”<h1>Situs ini sedang MAINTENANCE...</h1>”);echo ”<h3>admin.min at puskom.kom</h3>”;?>

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image Web serversudo docker build

I Pastikan ada 3 file di dalam direktori” /docker/webserver”: Dockerfile, web.conf danindex.php

I Buat Image webserver dengan perintah build:sudo docker build -t nama image baru .

I Contoh:sudo docker build -t img-webserver .

I cek keberhasilan dengan perintah:sudo docker images

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Menjalankan Image & Mengakses Containernyadocker run -d & docker inspect

I Jalankan Image img-webserver dengan perintah run:sudo docker run -d –name co-webserverimg-webserver

I Cek status proses (container) dengan sudo docker ps

I Cek IP Address dari Container dengan inspect:sudo docker inspect co-webserver | grep”IPAdrress”

I Gunakan curl dan akses IP Address yang diperoleh:Coontoh: curl 172.17.0.9

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Perintah dalam DockerfilePerintah-perintah BUILD

I FROM The image the new image will be based on.

I MAINTAINER Name and email of the maintainer ofthis image.

I COPY Copy a file or a directory into the image.

I ADD Same as COPY, but handle URL:s and unpacktarballs automatically.

I RUN Run a command inside the container, such asapt-get install.

I ONBUILD Run commands when building an inheritedDockerfile.

I .dockerignore Not a command, but it controls whatfiles are added to the build context.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Perintah dalam DockerfilePerintah-perintah RUN

I CMD Default command to run when running thecontainer. Can be overridden with command lineparameters.

I ENV Set environment variable in the container.

I EXPOSE Expose ports from the container. Must beexplicitly exposed by the run command to the Host with-p or -P.

I VOLUME Specify that a directory should be storedoutside the union file system. If is not set with dockerrun -v it will be created in /var/lib/docker/volumes

I ENTRYPOINT Specify a command that is notoverridden by giving a new command with docker runimage cmd. It is mostly used to give a defaultexecutable and use commands as parameters to it.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Perintah dalam DockerfilePerintah-perintah BUILD dan RUN

I USER Set the user for RUN, CMD and ENTRYPOINT.

I WORKDIR Sets the working directory for RUN, CMD,ENTRYPOINT, ADD and COPY.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Data Volume & Pemetaan PortRasakan bedanya...

I Tutup Container dengan sudo docker stopco-webserver

I Hapus Container tersebut dengan sudo docker rmco-webserver

I Pada Host, buat direktori ” /docker/webdata”. Akandiisi file/aplikasi PHP

I Masuk (cd) ke direktori ”webdata” tersebut

I Buat file PHP, harus ada index.php. Isinya terserah.<?php print(”Halaman ini berasal dari HOST”)?>

I Jalankan image img-webserver menjadi container:sudo docker run -d -v /docker/webdata:/var/www-p 8000:80 –name co-webserver img-webserver

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Mengakses Container Baru

Salah satu cara berikut:

I Gunakan sudo docker inspect co-webserver | grep”IPAddress” dan akses dengan curldocker inspect tidak memberikan hasil. TIDAKDAPAT DIGUNAKAN.

I Buka web browser, arahkan URL ke IP Address HOSTpada port 8000.curl 10.1.2.46:8000

I stop dan rm container co-webserver. Kemudianjalankan lagi img-websever dengan cara berikut:sudo docker run -d -v /docker/webdata:/var/www-p 80:80 –name co-webserver img-webserver

I Buka web browser, arahkan URL ke IP Address HOST(tidak perlu sebutkan port lagi)

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Bagi Web DeveloperKemudahan update content

I Gunakan Text Editor atau IDE Pilihan.

I Tulis program atau aplikasi (misal PHP)

I Simpan hasil pekerjaan di dalam direktori yangdipetakan ke /var/www tersebut.

I Cek hasilnya dengan mengakses IP Address Host:8000

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Bagi Administrator Web HostingPengeloaan banyak container

I Setiap Container (Server Web) berjalan pada port 80.

I Petakan setiap Container ke nomor Port berbeda padaHost, misanya 8001, 8002, 9000, dst...

I Gunakan Reverse Proxy (misal HAProxy) untukmengarahkan request ke subdomain tertentu menujuPort dari Host yang bersesuaian

I Jika terdapat lebih dari satu Container untuk aplikasiyang sama, terapkan load balancing pada HAProxy.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image DNS Serverbind9 di Ubuntu

I Buat direktori, misalnya /docker/dnsserver. cd kedirektori tersebut.

I Buat Dockerfile

I Buat file-file konfigurasi DNS, masukkan semuanya kedalam direktori, misalnya /docker/dnsserver/etc

I Buat image DNS server menggunakan perintah dockerbuild

I Jalankan image menjadi container. Gunakan -v untukpemetaan volume, misalnya -v/docker/dnsserver/etc/:/etc/bind/

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image DNS ServerContoh Dockerfile

I FROM ubuntu

I RUN apt-get update && apt-get install -y bind9

I ADD /etc /etc/bind

I #RUN rm -rf /etc/bind/*

I EXPOSE 53

I RUN mkdir -p /var/run/named && chown bind:bind/var/run/named

I ENTRYPOINT [”/usr/sbin/named”, ”-g”, ”-c”,”/etc/bind/named.conf”, ”-u”, ”bind”]

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image DNS ServerKonfigurasi DNS server: Demo hari ini

I docker IN A 10.1.2.46

I kamal IN CNAME docker

I telang IN CNAME docker

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

HAProxyReverse proxy dan load balancer

I Pada Host, 1 port hanya dapat dipetakan ke satucontainer aktif (running). One port to one containermapping.

I Banyak container dapat berjalan di dalam satu host,misal: 20 Web server (port 80)

I Bagaimana agar setiap container dapat diakses?Apakah pengunjung harus tahu nomor port? REVERSEPROXY

I Jika ada lebih dari satu container menyediakan layanansama (subdomain sama), maka diperlukan LOADBALANCER.

I HAProxy tidak dibuat khusus untuk Docker tetapidapat diintegrasikan ;-)

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image HAProxyhaproxy di Ubuntu

I Buat direktori, misalnya /docker/haproxy. cd (masuk)ke direktori tersebut.

I Buat file haproxy.cfg

I Buat Dockerfile

I Buat image haproxy menggunakan perintah docker build

I Jalankan image menjadi container. Alternatif: gunakan-v (-v /docker/haproxy:/etc/haproxy)

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image HAProxyDockerfile

FROM ubuntuRUN add-apt-repository ppa:vbernat/haproxy-1.5 && \apt-get update && \apt-get install -y haproxy && \sed -i ’s/ENABLED=.*/ENABLED=1/’/etc/default/haproxy && \rm -rf /var/lib/apt/lists/*ADD haproxy.cfg /etc/haproxy/haproxy.cfgWORKDIR /etc/haproxyCMD [”haproxy -f /etc/haproxy/haproxy.cfg”]#CMD [”haproxy”, ”-f”, ”/etc/haproxy/haproxy.cfg”]EXPOSE 80

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Konfigurasi Reverse Proxy HAProoxyhaproxy.cfg

frontend http-inbind *:80acl is kamal hdr end(host) -i kamal.trunojoyo.ac.idacl is telang hdr end(host) -i telang.trunojoyo.ac.iduse backend coba if is kamaluse backend test if is telangbackend kamalbalance roundrobinserver kamal1 10.1.2.46:8001 check cookie maxconn 32server kamal2 10.1.2.46:8002 check maxconn 32server kamal3 10.1.2.46:8003 backup maxconn 32backend telangbalance roundrobinserver telang1 10.1.2.46:9001 check maxconn 32server telang2 10.1.2.46:9002 check maxconn 32

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Konfigurasi Reverse Proxy HAProxyPemetaan host/domain ke backend

I Cara lama: acl dan use backend:frontend ft allappsuse backend bk app1 if hdr(Host) -i app1.domain1.comapp1.domain2.comuse backend bk app2 if hdr(Host) -i app2.domain1.comapp2.domain2.comdefault backend bk default

I Cara baru: satu map dan satu use backend.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Pembuatan Image HAProxyPemetaan host ke backend: cara baru

I File (misalnya host2backend.map) menyimpanpemetaan host ke backendnya#domain ==> backendapp1.domain1.com bk app1app1.domain2.com bk app1app2.domain1.com bk app2app2.domain2.com bk app2

I Baris penting dalam konfigurasi HAProxy:frontend ft allappsuse backend %[req.hdr(host),lower,map \(/etc/haproxy/host2backend.map,bk default)]

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Demo Reverse Proxy & Load BalancingDNS Server, HAProxy dan Web Server

I DNS Server Trunojoyo.ac.id: Pak Wahyono

I HAProxy: Pak Wahyono dan Pak Lutfi. Mendengar diport 80

I Web server Telang.trunojoyo.ac.id: Mas Bono, MasUbaid. 2 container: port 9001, 9002

I Web Server Kamal.trunojoyo.ac.id: Mas Basith, MasCholil.3 container: port 8001, 8002, 8002.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Satu Image Banyak Container: Load balancing

I Buat direktori /docker/kamal1, /docker/kamal1, dan/docker/kamal1.Buat file index.php dan letakkan kedalam.

I Buat direktori /docker/telang1 dan/docker/telang2.Buat file index.php dan letakkan kedalamnya.

I Restart haproxy: service haproxy restart

I Lihat lembar tutorial HAProxy (terpisah)

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Menguji Reverse Proxy & Load balancing

I Jalankan (run) img-webserver, menjadi 5 container.Gunakan -v untuk pemetaan Data Volume.docker -d -v /docker/kamal1:/var/www –nameco-webkamal1 -p 8001:80 img-webserverdocker -d -v /docker/kamal2:/var/www –nameco-webkamal2 -p 8002:80 img-webserverdocker -d -v /docker/kamal3:/var/www –nameco-webkamal3 -p 8003:80 img-webserverdocker -d -v /docker/telang1:/var/www –nameco-webtelang1 -p 9001:80 img-webserverdocker -d -v /docker/telang2:/var/www –nameco-webtelang2 -p 9002:80 img-webserver

I Buka web browser, akses telang.trunojoyo.ac.id dankamal.trunojoyo.ac.id.

I Lakukan langkah tersebut berulang-ulang.

I Apa yang diperoleh??!

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL ServerMudah, tetapi....data tidak persistent

I Buat direktori, misal: mysql-server. Buat Dockerfile didalamnya:FROM ubuntuRUN apt-get update && apt-get -y install mysql-clientmysql-serverRUN sed -i ’s/bind-address/#bind-adress/g’/etc/mysql/my.cnfRUN /etc/init.d/mysql start && echo ”GRANT ALLON *.* TO admin@’%’ IDENTIFIED BY ’admin123’WITH GRANT OPTION; FLUSH PRIVILEGES” %|mysql -u rootEXPOSE 3306CMD [”/usr/bin/mysqld safe”]

I Buat image mysql-server dengan perintah build.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL Server: Solusi Persistensi2 cara mengelola data di dalam container

I Data volumes: A data volume is a specially-designateddirectory within one or more containers that bypassesthe Union File System to provide several useful featuresfor persistent or shared data

I Data volume containers: If you have some persistentdata that you want to share between containers, orwant to use from non-persistent containers, it’s best tocreate a named Data Volume Container, and then tomount the data from it.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistensidengan Data Volume

I Perlu setidaknya 3 file: Dockerfile, my.cnf dan scriptinisiasi ulang database (misal: run.sh)

I Perlu direktori Data Volume, misalnya/home/admin/docker/mydata

I Eksekusi Image harus menggunakan parameter -v

I Container lain dapat mengakses MySQL Server viaHost:3306 atau parameter –link.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistent - Data VolumeDockerfile

FROM ubuntu:14.04RUN apt-get update && apt-get -y install mysql-clientmysql-serverVOLUME [”/data”]ADD my.cnf /etc/mysql/conf.d/my.cnfADD run.sh /run.shRUN chmod +x run.shEXPOSE 3306ENTRYPOINT [”/run.sh”]

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistent - Data VolumeScript inisiasi ulang database: run.sh

#!/bin/bash#jika direktori /data/mysql telah ada maka:#1. Inisiasi ulang database ke dalam /data/mysql#2. jalankan MySQL serverif [ ! -d /data/mysql ]; thenmysql install db –datadir=/data/mysqlecho ”=> Memulai MySQL.”/usr/bin/mysqld safe –datadir=/data/mysql > /dev/null2>&1 &RET=1while [[ $RET -ne 0 ]]; doecho ”=> Menunggu konfirmasi dari startup layananMySQL”sleep 5mysql -uroot -e ”status” > /dev/null 2>&1RET=$?done

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistent - Data VolumeScript inisiasi ulang database: run.sh

PASS=’admin123’echo ”=> Membuat pengguna MySQL”mysql -uroot -e ”CREATE USER ’admin’@’%’ IDENTIFIEDBY ’$PASS’”mysql -uroot -e ”GRANT ALL PRIVILEGES ON *.* TO’admin’@’%’ WITH GRANT OPTION”echo ”=> shutdown setelah setup.”mysqladmin -uroot shutdownelseecho ”=> Lanjutkan dengan seting MySQL yang telah ada”fiecho ”=> Menjalankan MySQL Server”exec mysqld safe –datadir=/data/mysql

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistent - Data VolumeKonfigurasi awal MySQL: my.cnf

#my.cnf#bolehkan koneksi dari manapun, tidak hanya localhost[mysqld]bind-address=0.0.0.0

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL-Server: Persistent - Data Volume

I Buat image img-mypersitentserver dengan perintahbuild

I Buat direktori /docker/mydata (mkdir/docker/mydata)

I Jadikan container (run):docker run -d -p 3306:3306 -v/docker/mydata:/data –name co-mysqlserverimg-mypersistentserver

I Buat container untuk akses MySQL-Server(co-mysqlserver) tersebut:sudo docker run -it –name co-mysqlclient –linkco-mysqlserver:db –entrypoint=”mysql”img-mypersistentserver -u admin -p -h db

I Buat database, tabel dan isikan data ke dalamnya.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Aplikasi yang mengakses MySQL Server

I Buat aplikasi PHP (index.php) yang mengaksesdatabase server MySQL. Simpan ke dalam direktori”webdata” sebelumnya.

I Jalankan image img-webserver:sudo docker run -d -v /docker/webdata:/var/www-p 8000:80 –name co-testweb img-webserver

I Gunakan web browser dan akses IP ADDRESS HOST,misalnya curl 10.1.2.46.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

MySQL dan Web Server: PengujianMengenal –link

I Hentikan container co-testweb, hapus juga.

I Jalankan kembali img-webserver dengan cara:sudo docker run -d -v /docker/webdata:/var/www–link co-mysqlserver:db -p 8000:80 –nameco-testweb img-webserver

I Pada script, baris $servername =”IP ADDRESS HOST”; dapat diubah menjadi$servername = ”db”;

I Buka web browser dan lakukan seperti sebelumnya.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Image MySQL Server: Container Data-onlyhampir sama dengan pendekatan Data Volume

Langkah-langkah pembuatan imagenya sama denganpendekatan data volume di atas. Setelah image berhasildibuat, lakukan:

I Buat container data-only:docker run -d -v /docker/mydata:/data –nameco-dataonly ubuntu:14.04 true

I Buat container MySQL Server (co-mysqlserver) yangmengakses Data Volume via container Data-only(co-dataonly):sudo docker run -d –volumes-from co-dataonly–name co-mysqlserver img-mypersistentserver

I Pemanfaatannya sama seperti sebelumnya..

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Menjalankan Perintah di Container dari Hostdocker exec

I Pernyataan exec digunakan untuk mengeksekusiperintah LINUX yang telah ada di dalam container yangsedang berjalan.

I Contoh:# Menjalankan shell di dalam container ber-id 6f2c42c0docker exec -it 6f2c42c0 bash

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Hubungan Host-Container

I Container mengakses file-file di Host melalui DataVolume (-v)

I Host menjalankan perintah di dalam container: perintahdocker exec

I Host dapat mengakses container dengan pemetaanport. Contoh:#Pemetaan acak ke port Host (49153 s.d 65535)docker run -d -P Image-serverXdocker run -d -p 5000:5000 tImage-serverXdocker run -d -p 127.0.0.1:5000:5000 Image-serverXdocker run -d -p 127.0.0.1::5000 Image-serverXdocker run -d -p 127.0.0.1:5000:5000/udp Image-Xsudo docker port nama container 5000

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Hubungan Host-Container

I –volumes-from untuk mengakses volume pada containerlain

I 2 container dihubungkan dengan –link.#container bernama dbpostdocker run -d –name dbpost postgres#container web dihubungkan ke container dbpostdocker run -d -P –name web –link dbpost:dbwebapp#inspectdocker inspect -f ” .HostConfig.Links ” web

I Perintah env akan menampilkan daftar variabellingkungan.

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Data Volume & Volume Formdata volume: -v dir Host:dir Container

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Data Volume & Volume Form–volume-from docontainer

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

TCP Socket & LinkAkses container via TCP Socket Host

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

TCP Socket & Link–link nama container:nama alias

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Membatasi Suatu ContainerContoh

I Membatasi jumlah memorydocker run -m 256m ImageXZY

I Membatasi jumlah share CPUdocker run –cpu-shares 512 ImageXYZ

I Ubah user: root menjadi wwwdocker run -u=www nginx

Docker:MembangunLingkungan

Pengembangan &Operasional

Aplikasi Web

Husni

Outline

Perintah docker

Membuat Image:commit

Backup &Restore

Membuat Image:Dockerfile

Image DNS Server

Image HAProxy

Reverse Proxy &Load Balancing

Image MySQLServer: Persistensi

Tambahan/Tips

Tamat...

Dan....

I Semoga ”Belajar Bersama” ini bermanfaat

I Semoga ada waktu belajar lagi....

I Aamiin :-)