Docker: Membangun Lingkungan Pengembangan & Operasional ... · Docker: Membangun Lingkungan...
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 :-)