Belajar Docker.

Apa itu Docker ?

Docker adalah suatu project open source yang memungkinkan kita untuk membuat sebuah wadah atau container, yang berisikan suatu aplikasi, yang sudah kita konfigurasi, kita kemas, dan kita dapat menjalankannya.

Dalam bahasa yang lebih sederhana adalah, coba teman teman membayangkan tumpukan kontainer peti kemas di pelabuhan laut. Ada kontainer warna biru untuk database Postgresql, ada kontainer warna hijau untuk web server Apache + Php, ada kontainer warna kuning untuk database MySQL, ada kontainer warna merah untuk Bisnis Intelegence Pentaho, ada kontainer warna oranye untuk Django + Python, dan banyak lagi kontainer kontainer yang lainnya.

Nah, masing masing kontainer itu memiliki konfigurasi yang berbeda beda, misalnya ada kontainer warna biru (Postgresql) memerlukan konfigurasi database replikasi Bucardo. Kontainer yang lain tidak perlu konfigurasi Bucardo ini, tetapi memerlukan konfigurasi yang lain, misalnya kontainer warna merah (BI Pentaho) memerlukan konfigurasi JAVA SDK, yang mana konfigurasi ini juga tidak diperlukan di kontainer yang lainnya.

Kontainer kontainer tersebut berada di suatu pelabuhan peti kemas, siap untuk dikirimkan menggunakan kapal laut. Managemen pelabuhan sudah mempersiapkan dokumen tata cara pengiriman kontainer kontainer berjenis DOCKER itu. Syahbandar yang akan melakukan bongkar muat kontainer sesuai permintaan dari kapal yang akan berlabuh.

Kemudian datang sebuah kapal pengangkut peti kemas milik seorang web programmer yang memiliki kemampuan mengangkut kontainer berjenis DOCKER. Syahbandar di pelabuhan kemudian membuat duplikasi kontainer warna hijau (Apache + PHP) dan warna kuning (MySQL) dan meletakkannya ke dalam kapal pengangkut ini.

Tak lama berselang, datanglah kapal pengangkut peti kemas milik seorang database administrator dan dia memerlukan kontainer warna biru (PostgreSQL) dan kontainer warna kuning (MySQL). Syahbandar pelabuhan segera melakukan duplikasi terhadap kontainer kontainer yang di perlukan tersebut.

Nah, kedua kapal ini kemudian melanjutkan perjalanan mengarungi samudra yang luas. Pada suatu saat mereka akan berhenti di pelabuhan tujuan, dan kemudian mereka menurunkan kontainer yang mereka bawa, atau menduplikasi kontainer sebelum meletakkannya di pelabuhan tujuan, atau membawa kontainer yang baru ke dalam kapal.

Dari penjelasan diatas, kita dapat menganalogikan sebagai berikut, bahwa pelabuhan atau kapal adalah suatu platform DOCKER, dimana kita bisa membawa bermacam macam kontainer didalamnya. Suatu Pelabuhan dapat diartikan sebagai suatu Server Komputer, dan suatu kapal dapat diartikan sebagai suatu adalah laptop dari seorang software engineer atau laptop dari seorang system engineer. SuatukKontainer dapat diartikan sebagai suatu applikasi dengan konfigurasi librarynya.

Semoga penjelasan sederhana diatas dapat membantu teman teman memahami mengenai apa itu Docker, dan apa itu kontainer, dan bagaimana penerapan penggunaannya.

Bagaimana pendapat teman teman ?

Design Table BLOB

Okay, artikel sebelumnya kita sudah membahas tentang bagaimana keuntungan mempergunakan tipe data BLOB dan FileSystem untuk menyimpan file Binary kita. Contoh penggunaan tipe data BLOB dengan bahasa PHP juga sudah dijelaskan didalam artikel yang lalu. Nah untuk saat ini kita akan membahas bagaimana cara membuat tabel dengan tipe data BLOB yang optimal.

   Okay, artikel sebelumnya kita sudah membahas tentang bagaimana keuntungan mempergunakan tipe data BLOB dan FileSystem untuk menyimpan file Binary kita. Contoh penggunaan tipe data BLOB dengan bahasa PHP juga sudah dijelaskan didalam artikel yang lalu. Nah untuk saat ini kita akan membahas bagaimana cara membuat tabel dengan tipe data BLOB yang optimal.

Kita ambil contoh tabel profil user. Umumnya tabel profil user berisikan data pribadi user dan foto profil. Dari informasi ini, maka prakiraan tabel profil kira kira akan seperti ini :

create table profil_user

( id numeric(18,0) NOT NULL DEFAULT nextval('profile_seq'::regclass),

nama varchar(32),

alamat varchar(64),

no_telp varchar(16),

no_fax varchar(16),

foto BLOB

);

Secara umum tidak ada yang salah tabel profil user seperti diatas. Tetapi kita perlu ingat, bahwasannya tipe data BLOB ini dapat menyimpan file dalam ukuran besar hingga gigabyte. Apa yang terjadi jika kita mengirimkan perintah select * terhadap tabel ini ?

Database Administrator, terlepas dari apapun jenis database yang dipergunakan, umumnya akan membuat tablespace atau tablearea atau  spacearea dan berbagai istilah yang lainnya, untuk memisahkan data dan index. Prinsip ini sudah merupakan dasar untuk memastikan tingkat kestabilan performance database. Table akan di buat dan diletakkan di dalam tablespace DATA. Index akan dibuat dan diletakkan didalam tablespace INDEX. Akan lebih bagus lagu apabila tablespace DATA dan INDEX diletakkan didalam Harddisk yang terpisah. Mengapa demikian ? karena DATA dan INDEX memiliki cara pengaksesan yang berbeda, sehingga dengan meletakkan mereka didalam harddisk yang terpisah akan membantu Database Engine untuk bekerja lebih optimal.

Bagaimana dengan tipe data BLOB. Hampir sama dengan DATA dan INDEX, kita harus memisahkan mereka ditablespace yang terpisah dari DATA dan INDEX. Memisahkan mereka dalam tablespace yang terpisah juga sangat disarankan. Table yang berisikan BLOB sebisa mungkin memiliki sedikit tambahan atribut/kolom informasi.

Sehingga apabila prinsip diatas diterapkan di tabel profil_user, maka struktur tabelnya akan seperti ini :

create table profile_user_foto

( id numeric(18,0) NOT NULL DEFAULT nextval('profil_user_foto_seq'::regclass),

content binary,

update_date timestamp

) using tablespace BLOB;
create table profil_user

( id numeric(18,0) NOT NULL DEFAULT nextval('profil_user_seq'::regclass),

nama varchar(32),

alamat varchar(64),

no_telp varchar(16),

no_fax varchar(16),

foto_id numeric(18),

constraint foreign key profile_user_data1_fk (foto_id) references profile_user_foto (id)

) using tablespace DATA;

Ini adalah contoh dengan menggunakan database postgresql.

Bekerja dengan BLOB dan PHP

Jikalau anda memutuskan untuk menggunakan tipe data BLOB di database untuk menyimpan file binary anda, maka dibawah ini adalah beberapa hal yang harus anda perhatikan pada saat bekerja dengan tipe data BLOB dan PHP

  Jikalau anda memutuskan untuk menggunakan tipe data BLOB di database untuk menyimpan file binary anda, maka dibawah ini adalah beberapa hal yang harus anda perhatikan pada saat bekerja dengan tipe data BLOB dan PHP :

  1. Submit file binary dengan HTML File :
    • Pastikan anda menggunakan parameter enctype di dalam form submit. Parameter ini dipergunakan untuk mengirimkan file binary anda.
      
      <form action='add_blob.php' method='post' enctype='multipart/form-data'>
          <input id='userfile' type='file' name='userfile' value='' />
      </form>
      
      
  2. Menangkap file binary
    • File Binary yang telah di submit, akan diterima oleh PHP dalam array $_FILES[“userfile”]
    • Isi dari variabel $_FILES[“userfile”] adalah sebagai berikut :
      
      $_FILES['userfile']['tmp_name'] = File binary
      $_FILES['userfile']['name'] = Nama file binary
      $_FILES['userfile']['type'] = Tipe ekstensi file
      $_FILES['userfile']['size'] = ukuran file dalam byte
      
      
    • Untuk mendapatkan lebar dan tinggi dari image gunakan perintah berikut ini :
      
      list ($file_width, $file_height, $type, $attr) = getimagesize($_FILES['userfile']['tmp_name']);
      
      
  3. Untuk menyimpan file binary ke database dengan kohana, php framework.
    • Disini kita menggunakan function fopen dan filesize dari php.
      
      $image = ORM::factory('table_image');
      $image->file_content = fread (fopen ($_FILES['userfile']['tmp_name'], 'r'),
      filesize ($_FILES['userfile']['tmp_name']));
      $image->last_update = new DATE();
      $image->save();
      
      
  4. Untuk membaca file dari BLOB dan menampilkannya ke browser terdapat 2 cara :
    • Tanpa Kompresi, file langsung dibaca dari database dan dikirim ke browser.
      
      $result = ORM::factory('table_image')->find($id);
      if ($result->id)
      {  header ('Content-type: '.$result->file_type);
         echo $result->file_content;
      };
      
      
    • Dengan Kompresi, file dibaca dari database dan di quality di turunkan ke 75%.
      
      $result = ORM::factory('table_image')->find($id);
      if ($result->id)
      {  header ('Content-type: '.$result->file_type);
         echo imagejpeg(imagecreatefromstring($result->file_content), '', 75);
      };
      
      

Demikanlah tutorial cara menggunakan tipe data BLOB dengan PHP.
Semoga bermanfaat.