Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web
Outline Perintah docker Membuat Image: commit Backup &Restore
Husni PTIK Universitas Trunojoyo Madura
Membuat Image: Dockerfile Image DNS Server Image HAProxy
10 April 2015
Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Image & Containernya Jum’at, 10 April 2015
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
Perintah di Docker client: pull, run, ps, images, rm, inspect
Perintah docker
I
Membuat Image dari Container: commit
Backup &Restore
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
I
Membuat Image: commit
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Outline Senin, 13 April 2015
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Image DNS Server
I
Satu Image banyak Container
I
Image HAProxy
I
Konfigurasi Reverse Proxy & Load Balancing.
Image DNS Server
I
Image MySQL Server: Persistensi.
Image HAProxy
I
Pengujian: studi kasus terpadu (team).
Reverse Proxy & Load Balancing
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile
Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Arsitektur Sistem Hosting Integrasi Docker & HAProxy
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...
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 Docker registry 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: 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...
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 tar archive
I
history Show the history of an image
I
import Create a new filesystem image from the contents of a tarball
I
inspect Return low-level information on a container or image
I
load Load an image from a tar archive
I
port Lookup the public-facing port that is NAT-ed to PRIVATE PORT
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server
I
rmi Remove one or more images
I
save Save an image to a tar archive
Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
sudo docker inspect Return low-level information on a container or image
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Usage: docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
Perintah docker Membuat Image: commit
I
sudo docker inspect ubuntu
I
sudo docker run -it –name cubuntu ubuntu:14.04.2
I
buka console (terminal) baru
Image DNS Server
I
sudo docker ps
Image HAProxy
I
sudo docker inspect cubuntu | grep ”IPAddress”
Reverse Proxy & Load Balancing
I
sudo docker inspect cubuntu | grep ”Gateway”
Image MySQL Server: Persistensi
Backup &Restore Membuat Image: Dockerfile
Tambahan/Tips Tamat...
sudo docker history Show the history of an image
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Usage: docker history [OPTIONS] IMAGE
I
sudo docker history ubuntu:14.04.2
I
Perintah apa saja yang telah dijalankan sampai diperoleh image bernama apachephp: sudo docker history apachephp
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Membuat Image dari Container Perintah commit
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Sebelumnya: menjalankan Image menjadi Container, menggunakan perintah run
I
Image bersifat read-only, saat Container selesai (logout), update di dalam Container tidak tersimpan ke dalam Image
I
Container pada kondisi terakhir (saat berjalan) dapat dijadikan Image baru dengan perintah commit.
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Container Apache + PHP Update container sesuai kebutuhan
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
I
Jalankan Image ubuntu menjadi container. Jangan lupa sertakan opsi –name, misalnya nama 01: sudo docker run -ti –name husni 01 ubuntu /bin/bash 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();, simpan sebagai index.php.
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...
Container Apache + PHP Akses Web Server dari Host
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
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! Atau gunakan curl
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Container Apache + PHP Update container bukan update image
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Jalankan Image ubuntu dan beri nama Container nama 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 dalam Container tersebut, tidak mempengaruhi Imagenya.
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...
Meng-Image-kan Container Perintah commit
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
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 php nano curl” -a ”Husni Ilyas” 0b2616b0e5a8 web-server 2015
Outline Perintah docker Membuat Image: commit Backup &Restore
I
sudo docker commit -p nama 01 web-server nama
I
Matikan/logout dari Container nama 01.
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Update Aplikasi Web Update container nama 01
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Jalankan Image web-server nama menjadi Container
I
Jalankan web server Apache: service apache2 start
I
I
Perintah docker Membuat Image: commit Backup &Restore
Cara lain: Buat Container sekaligus jalankan aplikasi. sudo docker run -d web-server nama service apache2 start
Membuat Image: Dockerfile
Opsi -d digunakan untuk menjalankan daemon/Server. SEMENTARA GAGAL!
Reverse Proxy & Load Balancing
Image DNS Server Image HAProxy
Image MySQL Server: Persistensi Tambahan/Tips Tamat...
A Daemonized Hello world sudo docker -d
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
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”
Backup &Restore
I
sudo docker ps
Image DNS Server
I
sudo docker logs 8e53a3a0a7c3
I
sudo docker stop 8e53a3a0a7c3
Membuat Image: commit
Membuat Image: Dockerfile
Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Mengenal Data Volume sudo docker run -v
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
I
Image bersifat read-only, padahal Container perlu update. Image baru harus dibuat setiap waktu?. Bagaimana jika server (fisik) mati? Data Volume: memetakan direktori di HOST ke direktori 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 -P web-server nama service apache2 start
I
Pastikan direktori /home/husni/web-data telah ada. Buat file web dan letakkan di dalam direktori tersebut.
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...
Menyimpan Image dan Menggunakan Kembali sudo docker save dan sudo docker load
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
Perintah save digunakan untuk menyimpan Image.
I
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
I
sudo docker save web-server nama -o web-server nama.tar
I
Perintah load digunakan untuk memuat suatu image yang tersimpan ke sistem Docker.
Outline Perintah docker Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy
I
Usage: docker load [OPTIONS]
I
sudo docker load -i web-server nama.tar
I
sudo docker images –tree
Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Menyimpan Container dan Menggunakan Kembali sudo docker export dan sudo docker import
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
Perintah export digunakan untuk mengekspor container (bukan image)
Membuat Image: commit
I
Perintah import digunakan untuk mengimpor backup (file tar) ke dalam Docker.
Membuat Image: Dockerfile
I
sudo docker export CONTAINER ID ¿ nama image.tar
Image HAProxy
I
sudo docker import - nama image.tar
Reverse Proxy & Load Balancing
I
Beda antara save dan load?
Image MySQL Server: Persistensi
I
Backup &Restore
Image DNS Server
Tambahan/Tips Tamat...
Membuat Image dengan Dockerfile Langkah Praktis
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
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-perintah membangun 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.
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...
Image Web server Langkah 1: Membuat file bernama Dockerfile
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
FROM ubuntu:14.04 RUN apt-get -y update RUN apt-get -y install apache2 php5 ADD web.conf /etc/apache2/sites-available/ RUN a2dissite 000-default RUN a2ensite web ADD index.php /var/www/ EXPOSE 80 ENTRYPOINT [”/usr/sbin/apache2ctl”] CMD [”-D”, ”FOREGROUND”]
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...
Image Web server Langkah 2: Membuat file bernama web.conf
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
DocumentRoot /var/www/ LogLevel warn ErrorLog /dev/stdout CustomLog /dev/stdout combined
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Image Web server Langkah 3: Membuat file bernama index.php
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
Situs ini sedang MAINTENANCE...”); echo ”
admin.min at puskom.kom
”; ?>
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Image Web server sudo docker build
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Pastikan ada 3 file di dalam direktori ” /docker/webserver”: Dockerfile, web.conf dan index.php
Perintah docker Membuat Image: commit Backup &Restore
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
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Menjalankan Image & Mengakses Containernya docker run -d & docker inspect
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Jalankan Image img-webserver dengan perintah run: sudo docker run -d –name co-webserver img-webserver
Perintah docker Membuat Image: commit Backup &Restore
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
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Perintah dalam Dockerfile Perintah-perintah BUILD
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
FROM The image the new image will be based on.
I
MAINTAINER Name and email of the maintainer of this image.
I
COPY Copy a file or a directory into the image.
I
ADD Same as COPY, but handle URL:s and unpack tarballs automatically.
I
RUN Run a command inside the container, such as apt-get install.
I
ONBUILD Run commands when building an inherited Dockerfile.
Outline Perintah docker Membuat Image: commit Backup &Restore
I
.dockerignore Not a command, but it controls what files are added to the build context.
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Perintah dalam Dockerfile Perintah-perintah RUN I
CMD Default command to run when running the container. Can be overridden with command line parameters.
I
ENV Set environment variable in the container.
I
EXPOSE Expose ports from the container. Must be explicitly exposed by the run command to the Host with -p or -P.
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server
I
I
VOLUME Specify that a directory should be stored outside the union file system. If is not set with docker run -v it will be created in /var/lib/docker/volumes ENTRYPOINT Specify a command that is not overridden by giving a new command with docker run image cmd. It is mostly used to give a default executable and use commands as parameters to it.
Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Perintah dalam Dockerfile Perintah-perintah BUILD dan RUN
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker Membuat Image: commit
I
USER Set the user for RUN, CMD and ENTRYPOINT.
Backup &Restore
I
WORKDIR Sets the working directory for RUN, CMD, ENTRYPOINT, ADD and COPY.
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Data Volume & Pemetaan Port Rasakan bedanya...
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
Tutup Container dengan sudo docker stop co-webserver
Outline Perintah docker
I
Hapus Container tersebut dengan sudo docker rm co-webserver
I
Pada Host, buat direktori ” /docker/webdata”. Akan diisi file/aplikasi PHP
I
Masuk (cd) ke direktori ”webdata” tersebut
I
Buat file PHP, harus ada index.php. Isinya terserah.
I
Jalankan image img-webserver menjadi container: sudo docker run -d -v /docker/webdata:/var/www -p 8000:80 –name co-webserver img-webserver
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Mengakses Container Baru Salah satu cara berikut: I
I
I
I
Gunakan sudo docker inspect co-webserver | grep ”IPAddress” dan akses dengan curl docker inspect tidak memberikan hasil. TIDAK DAPAT DIGUNAKAN. Buka web browser, arahkan URL ke IP Address HOST pada port 8000. curl 10.1.2.46:8000 stop dan rm container co-webserver. Kemudian jalankan lagi img-websever dengan cara berikut: sudo docker run -d -v /docker/webdata:/var/www -p 80:80 –name co-webserver img-webserver Buka web browser, arahkan URL ke IP Address HOST (tidak perlu sebutkan port lagi)
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...
Bagi Web Developer Kemudahan update content
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Gunakan Text Editor atau IDE Pilihan.
Membuat Image: commit
I
Tulis program atau aplikasi (misal PHP)
Backup &Restore
I
Simpan hasil pekerjaan di dalam direktori yang dipetakan ke /var/www tersebut.
I
Cek hasilnya dengan mengakses IP Address Host:8000
Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Bagi Administrator Web Hosting Pengeloaan banyak container
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
Setiap Container (Server Web) berjalan pada port 80.
I
Petakan setiap Container ke nomor Port berbeda pada Host, misanya 8001, 8002, 9000, dst...
I
I
Perintah docker Membuat Image: commit Backup &Restore
Gunakan Reverse Proxy (misal HAProxy) untuk mengarahkan request ke subdomain tertentu menuju Port dari Host yang bersesuaian
Membuat Image: Dockerfile
Jika terdapat lebih dari satu Container untuk aplikasi yang sama, terapkan load balancing pada HAProxy.
Reverse Proxy & Load Balancing
Image DNS Server Image HAProxy
Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Pembuatan Image DNS Server bind9 di Ubuntu
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
Buat direktori, misalnya /docker/dnsserver. cd ke direktori tersebut.
Outline Perintah docker Membuat Image: commit
I
Buat Dockerfile
I
Buat file-file konfigurasi DNS, masukkan semuanya ke dalam direktori, misalnya /docker/dnsserver/etc
Backup &Restore
Buat image DNS server menggunakan perintah docker build
Image DNS Server
I
I
Jalankan image menjadi container. Gunakan -v untuk pemetaan volume, misalnya -v ˜ /docker/dnsserver/etc/:/etc/bind/
Membuat Image: Dockerfile
Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Pembuatan Image DNS Server Contoh Dockerfile
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
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”]
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...
Pembuatan Image DNS Server Konfigurasi DNS server: Demo hari ini
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker Membuat Image: commit
I
docker IN A 10.1.2.46
Backup &Restore
I
kamal IN CNAME docker
Membuat Image: Dockerfile
I
telang IN CNAME docker
Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
HAProxy Reverse proxy dan load balancer
I
I
I
I
I
Pada Host, 1 port hanya dapat dipetakan ke satu container aktif (running). One port to one container mapping.
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
Banyak container dapat berjalan di dalam satu host, misal: 20 Web server (port 80)
Membuat Image: commit
Bagaimana agar setiap container dapat diakses? Apakah pengunjung harus tahu nomor port? REVERSE PROXY
Membuat Image: Dockerfile
Jika ada lebih dari satu container menyediakan layanan sama (subdomain sama), maka diperlukan LOAD BALANCER.
Reverse Proxy & Load Balancing
HAProxy tidak dibuat khusus untuk Docker tetapi dapat diintegrasikan ;-)
Backup &Restore
Image DNS Server Image HAProxy
Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Pembuatan Image HAProxy haproxy di Ubuntu
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
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)
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...
Pembuatan Image HAProxy Dockerfile
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
FROM ubuntu RUN 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.cfg WORKDIR /etc/haproxy CMD [”haproxy -f /etc/haproxy/haproxy.cfg”] #CMD [”haproxy”, ”-f”, ”/etc/haproxy/haproxy.cfg”] EXPOSE 80
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...
Konfigurasi Reverse Proxy HAProoxy haproxy.cfg
frontend http-in bind *:80 acl is kamal hdr end(host) -i kamal.trunojoyo.ac.id acl is telang hdr end(host) -i telang.trunojoyo.ac.id use backend coba if is kamal use backend test if is telang backend kamal balance roundrobin server kamal1 10.1.2.46:8001 check cookie maxconn 32 server kamal2 10.1.2.46:8002 check maxconn 32 server kamal3 10.1.2.46:8003 backup maxconn 32 backend telang balance roundrobin server telang1 10.1.2.46:9001 check maxconn 32 server telang2 10.1.2.46:9002 check maxconn 32
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...
Konfigurasi Reverse Proxy HAProxy Pemetaan host/domain ke backend
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
I
Cara lama: acl dan use backend: frontend ft allapps use backend bk app1 if hdr(Host) -i app1.domain1.com app1.domain2.com use backend bk app2 if hdr(Host) -i app2.domain1.com app2.domain2.com default backend bk default Cara baru: satu map dan satu use backend.
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...
Pembuatan Image HAProxy Pemetaan host ke backend: cara baru
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
File (misalnya host2backend.map) menyimpan pemetaan host ke backendnya #domain ==> backend app1.domain1.com bk app1 app1.domain2.com bk app1 app2.domain1.com bk app2 app2.domain2.com bk app2
Outline Perintah docker Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy
I
Baris penting dalam konfigurasi HAProxy: frontend ft allapps use backend %[req.hdr(host),lower,map \ (/etc/haproxy/host2backend.map,bk default)]
Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Demo Reverse Proxy & Load Balancing DNS Server, HAProxy dan Web Server
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
DNS Server Trunojoyo.ac.id: Pak Wahyono
I
HAProxy: Pak Wahyono dan Pak Lutfi. Mendengar di port 80
I
I
Web server Telang.trunojoyo.ac.id: Mas Bono, Mas Ubaid. 2 container: port 9001, 9002 Web Server Kamal.trunojoyo.ac.id: Mas Basith, Mas Cholil.3 container: port 8001, 8002, 8002.
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...
Satu Image Banyak Container: Load balancing
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
I
I
Buat direktori /docker/kamal1, /docker/kamal1, dan /docker/kamal1.Buat file index.php dan letakkan ke dalam. Buat direktori /docker/telang1 dan /docker/telang2.Buat file index.php dan letakkan ke dalamnya.
I
Restart haproxy: service haproxy restart
I
Lihat lembar tutorial HAProxy (terpisah)
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...
Menguji Reverse Proxy & Load balancing I
I
Jalankan (run) img-webserver, menjadi 5 container. Gunakan -v untuk pemetaan Data Volume. docker -d -v /docker/kamal1:/var/www –name co-webkamal1 -p 8001:80 img-webserver docker -d -v /docker/kamal2:/var/www –name co-webkamal2 -p 8002:80 img-webserver docker -d -v /docker/kamal3:/var/www –name co-webkamal3 -p 8003:80 img-webserver docker -d -v /docker/telang1:/var/www –name co-webtelang1 -p 9001:80 img-webserver docker -d -v /docker/telang2:/var/www –name co-webtelang2 -p 9002:80 img-webserver Buka web browser, akses telang.trunojoyo.ac.id dan kamal.trunojoyo.ac.id.
I
Lakukan langkah tersebut berulang-ulang.
I
Apa yang diperoleh??!
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...
Image MySQL Server Mudah, tetapi....data tidak persistent I
I
Buat direktori, misal: mysql-server. Buat Dockerfile di dalamnya: FROM ubuntu RUN apt-get update && apt-get -y install mysql-client mysql-server ˆ RUN sed -i ’s/bind-address/#bind-adress/g’ /etc/mysql/my.cnf RUN /etc/init.d/mysql start && echo ”GRANT ALL ON *.* TO admin@’%’ IDENTIFIED BY ’admin123’ WITH GRANT OPTION; FLUSH PRIVILEGES” %| mysql -u root EXPOSE 3306 CMD [”/usr/bin/mysqld safe”] Buat image mysql-server dengan perintah build.
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...
Image MySQL Server: Solusi Persistensi 2 cara mengelola data di dalam container
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
I
Data volumes: A data volume is a specially-designated directory within one or more containers that bypasses the Union File System to provide several useful features for persistent or shared data Data volume containers: If you have some persistent data that you want to share between containers, or want to use from non-persistent containers, it’s best to create a named Data Volume Container, and then to mount the data from it.
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...
Image MySQL-Server: Persistensi dengan Data Volume
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Perlu setidaknya 3 file: Dockerfile, my.cnf dan script inisiasi ulang database (misal: run.sh)
I
Perlu direktori Data Volume, misalnya /home/admin/docker/mydata
Backup &Restore
I
Eksekusi Image harus menggunakan parameter -v
Image DNS Server
I
Container lain dapat mengakses MySQL Server via Host:3306 atau parameter –link.
Membuat Image: commit
Membuat Image: Dockerfile
Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Image MySQL-Server: Persistent - Data Volume Dockerfile
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
FROM ubuntu:14.04 RUN apt-get update && apt-get -y install mysql-client mysql-server VOLUME [”/data”] ADD my.cnf /etc/mysql/conf.d/my.cnf ADD run.sh /run.sh RUN chmod +x run.sh EXPOSE 3306 ENTRYPOINT [”/run.sh”]
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...
Image MySQL-Server: Persistent - Data Volume Script 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 server if [ ! -d /data/mysql ]; then mysql install db –datadir=/data/mysql echo ”=> Memulai MySQL.” /usr/bin/mysqld safe –datadir=/data/mysql > /dev/null 2>&1 & RET=1 while [[ $RET -ne 0 ]]; do echo ”=> Menunggu konfirmasi dari startup layanan MySQL” sleep 5 mysql -uroot -e ”status” > /dev/null 2>&1 RET=$? done
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...
Image MySQL-Server: Persistent - Data Volume Script inisiasi ulang database: run.sh
PASS=’admin123’ echo ”=> Membuat pengguna MySQL” mysql -uroot -e ”CREATE USER ’admin’@’%’ IDENTIFIED BY ’$PASS’” mysql -uroot -e ”GRANT ALL PRIVILEGES ON *.* TO ’admin’@’%’ WITH GRANT OPTION” echo ”=> shutdown setelah setup.” mysqladmin -uroot shutdown else echo ”=> Lanjutkan dengan seting MySQL yang telah ada” fi echo ”=> Menjalankan MySQL Server” exec mysqld safe –datadir=/data/mysql
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...
Image MySQL-Server: Persistent - Data Volume Konfigurasi awal MySQL: my.cnf
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
#my.cnf #bolehkan koneksi dari manapun, tidak hanya localhost [mysqld] bind-address=0.0.0.0
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Image MySQL-Server: Persistent - Data Volume I
I
I
I
Buat image img-mypersitentserver dengan perintah build Buat direktori /docker/mydata (mkdir /docker/mydata) Jadikan container (run): docker run -d -p 3306:3306 -v /docker/mydata:/data –name co-mysqlserver img-mypersistentserver Buat container untuk akses MySQL-Server (co-mysqlserver) tersebut: sudo docker run -it –name co-mysqlclient –link co-mysqlserver:db –entrypoint=”mysql” img-mypersistentserver -u admin -p -h db
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...
I
Buat database, tabel dan isikan data ke dalamnya.
Aplikasi yang mengakses MySQL Server
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
I
I
I
Buat aplikasi PHP (index.php) yang mengakses database server MySQL. Simpan ke dalam direktori ”webdata” sebelumnya. Jalankan image img-webserver: sudo docker run -d -v /docker/webdata:/var/www -p 8000:80 –name co-testweb img-webserver Gunakan web browser dan akses IP ADDRESS HOST, misalnya curl 10.1.2.46.
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...
MySQL dan Web Server: Pengujian Mengenal –link
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline
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 –name co-testweb img-webserver
I
I
Pada script, baris $servername = ”IP ADDRESS HOST”; dapat diubah menjadi $servername = ”db”; Buka web browser dan lakukan seperti sebelumnya.
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...
Image MySQL Server: Container Data-only hampir sama dengan pendekatan Data Volume
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni
Langkah-langkah pembuatan imagenya sama dengan pendekatan data volume di atas. Setelah image berhasil dibuat, lakukan: I
I
I
Buat container data-only: docker run -d -v /docker/mydata:/data –name co-dataonly ubuntu:14.04 true Buat container MySQL Server (co-mysqlserver) yang mengakses Data Volume via container Data-only (co-dataonly): sudo docker run -d –volumes-from co-dataonly –name co-mysqlserver img-mypersistentserver Pemanfaatannya sama seperti sebelumnya..
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...
Menjalankan Perintah di Container dari Host docker exec
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
I
Pernyataan exec digunakan untuk mengeksekusi perintah LINUX yang telah ada di dalam container yang sedang berjalan. Contoh: # Menjalankan shell di dalam container ber-id 6f2c42c0 docker exec -it 6f2c42c0 bash
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Hubungan Host-Container I
I
I
Container mengakses file-file di Host melalui Data Volume (-v) Host menjalankan perintah di dalam container: perintah docker exec Host dapat mengakses container dengan pemetaan port. Contoh: #Pemetaan acak ke port Host (49153 s.d 65535) docker run -d -P Image-serverX docker run -d -p 5000:5000 tImage-serverX docker run -d -p 127.0.0.1:5000:5000 Image-serverX docker run -d -p 127.0.0.1::5000 Image-serverX docker run -d -p 127.0.0.1:5000:5000/udp Image-X sudo docker port nama container 5000
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...
Hubungan Host-Container
I
I
I
–volumes-from untuk mengakses volume pada container lain 2 container dihubungkan dengan –link. #container bernama dbpost docker run -d –name dbpost postgres #container web dihubungkan ke container dbpost docker run -d -P –name web –link dbpost:db webapp #inspect docker inspect -f ” .HostConfig.Links ” web Perintah env akan menampilkan daftar variabel lingkungan.
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...
Data Volume & Volume Form data volume: -v dir Host:dir Container
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...
Data Volume & Volume Form –volume-from docontainer
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...
TCP Socket & Link Akses container via TCP Socket Host
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...
TCP Socket & Link –link nama container:nama alias
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...
Membatasi Suatu Container Contoh
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Membatasi jumlah memory docker run -m 256m ImageXZY
I
Membatasi jumlah share CPU docker run –cpu-shares 512 ImageXYZ
I
Ubah user: root menjadi www docker run -u=www nginx
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...
Dan....
Docker: Membangun Lingkungan Pengembangan & Operasional Aplikasi Web Husni Outline Perintah docker
I
Semoga ”Belajar Bersama” ini bermanfaat
I
Semoga ada waktu belajar lagi....
I
Aamiin :-)
Membuat Image: commit Backup &Restore Membuat Image: Dockerfile Image DNS Server Image HAProxy Reverse Proxy & Load Balancing Image MySQL Server: Persistensi Tambahan/Tips Tamat...