Apa itu Docker dan Sejarahnya

Docker adalah program komputer yang melakukan virtualisasi di tingkat sistem operasi. Pertama kali dirilis pada tahun 2013 dan dikembangkan oleh Docker, Inc.
Docker digunakan untuk menjalankan paket perangkat lunak yang disebut container. Container diisolasi satu dengan yang lainnya dan dibundel secara terpisah berdasarkan aplikasi mereka masing-masing seperti, peralatan, perpustakaan dan file konfigurasi.
Akan tetapi mereka dapat berkomunikasi satu sama lain melalui saluran yang telah ditentukan. Semua kontainer dijalankan oleh satu sistem operasi dan oleh karenanya lebih ringan dari mesin virtual.
Container dibuat dari docker image yang berisi aplikasi-aplikasi yang spesifik sesuai fungsi dari container tersebut. Docker image biasanya dibangun dengan menggabungkan dan memodifikasi image standar yang diunduh dari repositori publik.


Perbandingan Docker vs Mesin virtual

Sebuah container berjalan secara native di Linux dan membagi kernel linux untuk menjalankan banyak container.
Program di dalam container berjalan dengan penggunaan memory tidak lebih banyak dengan menjalankannya di luar container, menjadikannya ringan.
Sebaliknya, mesin virtual (VM) menjalankan sistem operasi “tamu” lengkap dengan akses virtual ke sumber daya host melalui hypervisor. Secara umum, VM menyediakan lingkungan dengan sumber daya lebih banyak dari kebutuhan yang dibutukan oleh aplikasi.

Gambar di bawah ini bisa sebagai perbandingan antara docker vs mesin virtual


Perbedaan versi docker

Disini saya coba jelaskan perbedaan versi docker yang ada, Sederhananya docker terbagi menjadi 3 versi yaitu docker versi EE (Enterprise Edition), docker versi CE (Community Edition) dan docker versi CS (Commercially Supported).

  • Community Edition adalah standart Docker Engine yang bersifat Opensources dengan dukungan berbasis komunitas.
  • Enterprise Edition adalah Docker CE Engine yang telah di sertifikasi kepada beberapa sistem dan disupport secara ekslusif oleh Docker Inc yang tentu saja versi ini berbayar untuk supportnya.
  • Commercially Supported adalah Docker EE versi lama <= 1.13 yang usernya tidak ingin mengupdate ke sistem baru akan tetapi membutuhkan support untuk pembaharuan dan keamanan lebih lanjut ini pun termasuk versi berbayar untuk supportnya.


Docker Repository

Install terlebih dahulu paket-paket yang dibutuhkan oleh docker khususnya driver devicemapper.

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Untuk bisa menginstall docker versi terbaru perlu di tambahkan official repo dari docker CE.

$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


Docker instalasi

Instal docker menggunakan repo yang baru saja kita tambahkan.

$ sudo yum install docker-ce

Docker.ce sudah terinstall akan tetapi user dan group belum di setting, jalankan perintah berikut untuk menambahkan group docker dan memasukan user system kita kedalam group tersebut contoh di tulisan ini adalah user aghe.

$ sudo echo $USER
aghe
$ sudo groupadd docker
$ sudo usermod -aG docker $USER

Set docker untuk berjalan otomatis setiap server di hidupkan

$ sudo systemctl enable docker.service

Jalankan docker daemon service.

$ sudo systemctl start docker.service

Tes apakah docker sudah bisa di jalankan oleh regular user tanpa perintah sudo lakukan verifikasi dengan menjalankan program hello-world.

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/


Setting remote access melalui systemd file unit.

Gunakan perintah sudo systemctl edit docker.service untuk bisa merubah atau menambahkan docker.service menggunakan program text editor default di centos nano text editor.
Masukan baris dibawah berikut kedalam unit file yang sedang di edit.

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375

Simpan dan keluar dari text editor, kemudian muat ulang konfigurasi systemctl dan restart docker.

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service

Cek untuk melihat apakah hasil konfigurasi diatas sudah sesuai dengan konfigurasi yang telah kita buat dengan mengecek output dari perintah netstat.

$ sudo netstat -lntp | grep dockerd
tcp    0   0 127.0.0.1:2375   0.0.0.0:*     LISTEN     18539/dockerd


Docker compose instalasi

Tambahkan Repo EPEL jika sebelumnnya belum di tambahkan

$ sudo yum install epel-release
$ sudo yum update

Instalasi python-pip

$ sudo yum install -y python-pip

Instalasi docker compose

$ sudo pip install docker-compose

Upgrade paket python di centos 7 untuk memastikan compose bisa berjalan tanpa kendala

$ sudo yum upgrade python*

Tes jalankan compose sebagai verifikasi

$ docker-compose version
docker-compose version 1.24.0, build 0aa5906
docker-py version: 3.7.2
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017


Perintah-perintah di dalam docker container

Check versi docker

$ docker version
Client:
 Version:           18.09.6
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        481bc77156
 Built:             Sat May  4 02:34:58 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.6
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       481bc77
  Built:            Sat May  4 02:02:43 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Melihat list docker image yang telah di download.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        4 months ago        1.84kB

Mencari image secara online dari Docker HUB sebagai contoh mencari image untuk nginx web server.

$ docker search nginx
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                                                  Official build of Nginx.                        11375               [OK]
jwilder/nginx-proxy                                    Automated Nginx reverse proxy for docker con…   1598                                    [OK]
richarvey/nginx-php-fpm                                Container running Nginx + PHP-FPM capable of…   712                                     [OK]
jrcs/letsencrypt-nginx-proxy-companion                 LetsEncrypt container to use with nginx as p…   509                                     [OK]
webdevops/php-nginx                                    Nginx with PHP-FPM                              126                                     [OK]
zabbix/zabbix-web-nginx-mysql                          Zabbix frontend based on Nginx web-server wi…   101                                     [OK]
bitnami/nginx                                          Bitnami nginx Docker Image                      66                                      [OK]
linuxserver/nginx                                      An Nginx container, brought to you by LinuxS…   60
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
zabbix/zabbix-web-nginx-pgsql                          Zabbix frontend based on Nginx with PostgreS…   33                                      [OK]
tobi312/rpi-nginx                                      NGINX on Raspberry Pi / ARM                     26                                      [OK]
nginx/nginx-ingress                                    NGINX Ingress Controller for Kubernetes         19
schmunk42/nginx-redirect                               A very simple container to redirect HTTP tra…   15                                      [OK]
nginxdemos/hello                                       NGINX webserver that serves a simple page co…   14                                      [OK]
blacklabelops/nginx                                    Dockerized Nginx Reverse Proxy Server.          12                                      [OK]
wodby/drupal-nginx                                     Nginx for Drupal container image                12                                      [OK]
centos/nginx-18-centos7                                Platform for running nginx 1.8 or building n…   10
centos/nginx-112-centos7                               Platform for running nginx 1.12 or building …   8
nginxinc/nginx-unprivileged                            Unprivileged NGINX Dockerfiles                  4
1science/nginx                                         Nginx Docker images that include Consul Temp…   4                                       [OK]
nginx/nginx-prometheus-exporter                        NGINX Prometheus Exporter                       4
mailu/nginx                                            Mailu nginx frontend                            3                                       [OK]
toccoag/openshift-nginx                                Nginx reverse proxy for Nice running on same…   1                                       [OK]
ansibleplaybookbundle/nginx-apb                        An APB to deploy NGINX                          0                                       [OK]
wodby/nginx                                            Generic nginx                                   0                                       [OK]

Docker dan docker-compose sudah terinstall dengan sempurna, langkah selanjutnya kita bisa mulai untuk membuat project di dalam docker container,atau kita juga bisa mulai untuk membangun web server dan bahasa pemrograman php di dalam container menggunakan image-image yang bisa di unduh melalui image repository dengan url https://hub.docker.com/search?q=&type=image.

Di tulisan saya berikutnya saya akan coba membahas lebih lanjut penggunaan docker dan docker compose secara lebih lengkap lagi.
Wassalam.

Leave a Reply

Your email address will not be published. Required fields are marked *