Docker pada Ubuntu 20.04

Docker

Docker merupakan layanan yang menyediakan kemampuan untuk mengembangkan dan menjalankan suatu lingkungan terisolasi yang disebut container. Dengan lingkungan terisolasi ini dapat meningkatkan keamanan saat menjalankan container.

Pada Docker terdapat beberapa komponen utama yang harus kalian pelajari.

  • Images
  • Container
  • Dockerfile
  • Docker Compose
  • Docker Hub

Belajar Perintah Dasar Docker

  • docker pull <nama images>Untuk mengambil atau pull images dari registry docker. Untuk melihat hasil image yang dipull kalian dapat menggunakan perintah docker images.
  • docker push <nama image>Untuk mengunggah image yang telah dibuat ke registriy lokal maupun global, tergantung kebutuhan. Untuk melakukan push ke docker hub, pastikan kalian sudah membuat tag untuk image dan login menggunakan akun docker hub terlebih dahulu. Gunakan perintah docker tag dan docker login.//pastikan login menggunakan akun docker hub kalian #docker login#docker tag <nama image asli:tag> <image yang ditag:tag> //dalam membuat tag pastikan kalian juga menggunakan format usernamedockerhub/namaimage
  • #docker push <nama image>
  • docker run <options> <nama image>Untuk menjalankan container menggunakan images yang ada. Untuk opsi yang digunakan beragam. Untuk melihat container yang sedang berjalan kalian dapat menggunakan perintah docker ps. Nanti akan terlihat status dari container.#docker run -d -p 80:80 --name web-1 nginx penjelasan opsi perintah: -d --> agar container dapat berjalan dilatar belakang -p --> untuk expose port dari container. --name --> untuk menentukan nama container yang akan dideploy
  • docker stop <nama atau id container>Untuk menghentikan atau stop container yang sedang aktif atau berjalan. Untuk melihat container docker yang statusnya tidak jalan dapat menggunakan perintah docker ps -a. Jika status dari container sudah Exited, berarti container sudah dalam keadaan down.
  • docker start <nama atau id container>Untuk menjalankan container yang sedang tidak aktif atau tidak berjalan. Jika berhasil kalain dapat lihat containernya sudah status Up kembali.
  • docker exec <options> <nama container> <perintah>Untuk masuk ke terminal dari container yang sudah berjalan.#docker exec -it web-1 /bin/bash //Disini saya uji coba masuk ke container web-1 dan masuk dengan privileged /bin/bash. //Untuk keluar dari terminal container kalian cukup ketikan perintah #exit
  • docker rename <nama container lama> <nama container baru>Digunakan untuk merename nama container. Disini kita akan mencoba rename container web-1 menjadi web-2#docker rename web-1 web-2
  • p

Goals

  • Deploy simple app dengan flask
    • Isi file main.pyfrom flask import Flask from flask import request from flask import render_template sample = Flask( name ) @sample.route("/") def main(): return render_template("index.html") if name == " main ": sample.run(host="0.0.0.0", port=8080)
    • Isi file index.html<html> <head> <title>Sample app using Flask python</title> </head> <body> <h1>You are calling me from {{request.remote_addr}}</h1> </body> </html>
  • Deploy simple app tersebut ke dalam container

Instalasi

  1. Lakukan update pada server dan instal package docker.io.$sudo apt update -y && sudo apt install docker.io
  2. Instal juga package virtual environment python3 untuk uji coba menjalankan aplikasi webnya.$sudo apt install python3.8-venv -y
  3. p

Konfigurasi Sample App

  1. Pertama kita akan membuat folder untuk menyimpan file konfigurasi simple app yang akan kita buat.$sudo mkdir -p /flask/sample-app/templates
  2. Masuk ke direktori yang sudah dibuat.$cd /flask/sample-app
  3. Buatlah virtual environment python3 baru pada direktori tempat kita menyimpan konfigurasi simple app.$sudo python3 -m venv /flask/sample-app
  4. Buatlah file main.py dan isikan sesuai dari ketentuan goals.$sudo vim main.py -----Isi File dengan ketentuan Goals----- from flask import Flask from flask import request from flask import render_template sample = Flask(__name__) @sample.route("/") def main(): return render_template("index.html") if __name__ == "__main__": sample.run(host="0.0.0.0", port=8080)
  5. Buatlah file index.html dan isikan dengan source code sesuai dengan ketentuan.$sudo vim templates/index.html -----Isi File dengan ketentuan Goals---- <html> <head> <title>Sample app using Flask python</title> </head> <body> <h1>You are calling me from {{request.remote_addr}}</h1> </body> </html>
  6. Masuk sebagai user sudo dan jalankan perintah untuk mengaktifkan virtual environment python yang tadinya telah dibuat.$sudo su #. bin/activate
  7. Sekarang kita instal Flask menggunakan perintah pip.#pip3 install Flask

Pengujian

  1. Sekarang kita akan menguji coba, apakah simple app yang kita buat sudah berjalan.#python3 main.py
  2. Jika hasil dari menjalankan perintah diatas seperti ini, maka simple app yang kita buat telah berjalan.
  3. Sekarang kita buka web browser dan ketikkan alamat ip beserta port simple app yang kita buat. Jika berhasil maka hasilnya akan seperti gambar dibawah
  4. Kalian juga dapat melihat log alamat IP apa saja yang mengakses simple app yang kita buat.

Konfigurasi Docker

  1. Setelah kita melakukan uji coba pada simple app kita, sekarang kita akan melakukan konfigurasi untuk menjalankan web kita pada docker container. Pertama buatlah file requirements.txt.#touch requirements.txt
  2. Jalankan perintah pip3 freeze. Fungsinya disini untuk memasukkan semua requirements dependencies yang perlu di instal untuk menjalankan simple app yang kita buat (Fungsi file ini sama seperti file package.json pada NodeJS). File ini nanti berguna saat kita mendeploy simple app yang kita buat pada container.#pip3 freeze > requirements.txt
  3. Keluar dari virtual environment dengan menggunakan perintah dibawah.#deactivate
  4. Sekarang kita akan membuat Dockerfile. Dockerfile ini digunakan untuk membuat image sesuai dengan kebutuhan yang kita perlukan. Umumnya isi pada dockerfile merupakan langkah-langkah yang kita gunakan saat mencoba deploy simple app flask kita. Jika kalian perhatikan dengan baik, isi Dockerfile merupakan requirement-requirement saat kita mendeploy simple app flask.#vim Dockerfile ------Isi Docker File----- FROM python:3.8-slim EXPOSE 80 RUN mkdir -p /flask/sample-app WORKDIR /flask/sample-app COPY requirements.txt . COPY main.py . COPY templates/index.html templates/index.html RUN pip3 install -r requirements.txt CMD ["python3", "main.py"]Penjelasan beberapa perintah pada Dockerfile:
    • FROM python:3.8-slimMengambil atau mengepull image python:3.8-slim dari docker hub
    • EXPOSE 80Untuk mendefinisikan port untuk container saat diaktifkan
    • RUN mkdir -p /flask/sample-appDigunakan untuk mengeksekusi perintah mkdir… pada saat pembuatan image.
    • WORKDIR /flask/sample-appPerintah ini digunakan untuk masuk ke Working Directory (direktori kerj)a yang akan digunakan. Sama seperti saat kita menggunakan perintah cd /flask/sample-app.
    • COPY requirements.txt .Digunakan untuk mengcopy file requirements.txt yang telah kita buat kedalam Working Directory.
    • COPY main.py .Digunakan untuk mengcopy file main.py yang telah kita buat kedalam Working Directory.
    • COPY templates/index.html templates/index.htmlDigunakan untuk mengcopy file index.html yang telah kita buat kedalam folder templates/.
    • RUN pip3 install -r requirements.txtDigunakan untuk mengeksekusi perintah pip3… yang dimana menginstal semua dependencies yang ada pada isi file requirements.txt.
    • CMD [“python3”, “main.py“]Digunakan untuk mengeksekusi perintah utama pada saat container berjalan.
  5. Selanjutnya kita build docker images dengan perintah dibawah.#docker built -t <tag untuk nama images> <direktori letak Dockerfile> contoh: #docker built -t sampleapp .
  6. Kemudian, jalankan docker container menggunakan images yang telah kita buat. Jangan lupa untuk expose portnya ke 80, agar nantinya kita tidak perlu lagi mengetikkan port saat uji coba diweb browser.#docker run -d -p 80:8080 --name sampleapp-flask sampleapp

Pengujian

  1. Setelah container dijalankan, kita lihat status dari container sudah benar-benar jalan atau belum. Gunakan perintah dibawah untuk melihat status container.#docker container ls
  2. Selanjutnya kita uji coba lagi dengan mengetikkan alamat IP server. Dapat dilihat pada hasil gambar dibawah, kita tidak perlu lagi mengetikkan port untuk membuka simple app yang kita buat.

Deploy Simple App NodeJS

Pada materi sebelumnya kita melakukan deploy pada server kita menggunakan Simple App NodeJS. Nah pada kesempatan ini saya akan membantu kalian dalam melakukan konfigurasi sederhana untuk mendeploy Simple App NodeJS kedalam docker. Seperti halnya pada pembuat simple app flask, kita akan membuat Dockerfile terlebih dahulu lalu menjalankannya. Selain itu kita akan coba juga untuk membuat Docker Compose. Untuk memahami lebih lanjut, simaklah artikel ini!!!!.

Konfigurasi Dockerfile

  1. Masuk ke diretory tempat kalian menyimpan source code dari simple apps. Kemudian buatlah sebuah file baru dengan naman Dockerfile. Isikan Dockerfile dengan perintah dibawah. Dockerfile digunakan untuk membuat image baru berdasarkan konfigurasi yang diperlukan. Umumnya isi Dockerfile berupa requirements yang diperlukan dalam mendeploy apps kita. Pada sebelumnya kita menggunakan nodejs versi 16, namun disini saya ubah menggunakan nodejs versi 18.#cd /deploy/simple-apps --> direktori tempat saya menyimpan source code #vim Dockerfile ===isi file=== FROM node:18.16.0-slim WORKDIR /app ADD . . RUN npm install CMD npm start ===end===
  2. Setelah Dockerfile dibuat, kita build image baru dari Dockerfile tersebut dengan perintah dibawah.#docker build -t simple-apps . //penjelasan -t --> untuk memberikan tag untuk image yang akan dibuat docker build -t <tag> <lokasi dockerfile berada>
  3. p

Pengujian

  1. Setelah membuat images dari Dockerfile, kita lihat apakah images yang sudah dibuat telah muncul atau belum dengan perintah docker images.#docker images
  2. Jika images yang dibuat telah muncul, sekarang kita buat container dari images simple apps.#docker run -d -p 3000:3000 --name test-simple simple-apps
  3. Kemudian kita lihat apakah container yang telah dibuat sudah jalan atau belum.#docker ps
  4. Sekarang kita uji coba untuk dibuka dengan browser.
  5. p

Konfigurasi Docker Compose

  1. Sebelumnya kita telah membuat images dengan Dockerfile dan menjalankannya menjadi container. Sekarang kita akan coba mendeploy kembali menggunakan fitur Docker Compose. Sebelum itu install terlebih dahulu docker-composenya.#apt update && apt install docker-compose -y
  2. Setelah instalasi berhasil, kita hapus terlebih dahulu container yang tadinya telah kita buat.#docker rm -f test-simple
  3. Buatlah sebuah direktori baru dengan nama apps untuk menyimpan file source code yang telah kita buat. Pindahkan semua file source code ke direktori apps.#mkdir apps #mv * apps/
  4. Kemudian kita buat file docker-compose.yml. Isikan file tersebut dengan konfigurasi dibawah.#vim docker-compose.yml #versi yang digunakan mungkin dapat berbeda tergantung dari versi docker compose yang diinstall version: "3.3" services: #perintah ini digunakan untuk membuat container dari folder apps kita backend: build: ./apps restart: always links: - db ports: - "3000:3000" volumes: - app-data:/app/public/images #perintah ini digunakan untuk membuat container mariadb, sebelumnya pada saat kita membuat dockerfile kita hanya menjalankan web untuk route ke page utama dan /app. Sedangkan route ke /users tidak dapat dibuka karena tidak ada container mariadbnya db: image: "mariadb" restart: always links: - phpmyadmin ports: - "3306" environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=training - MYSQL_USER=peserta - MYSQL_PASSWORD=password volumes: - ./apps/database/:/docker-entrypoint-initdb.d - db-data:/var/lib/mysql #perintah ini digunakan untuk membuat container phpmyadmin, dengan ini kalian dapat mengakses phpmyadmin untuk mengubah isi database phpmyadmin: image: "phpmyadmin" restart: always ports: - "8000:80" environment: - PMA_HOST=db #konfigurasi volume volumes: app-data: db-data:
  5. Sekarang kita edit file .env untuk disesuaikan arah kedatabase container mariadb.#vim apps/.env ===edit file=== DB_NAME='training' DB_HOST='db' DB_USER='peserta' DB_PASS='password' APP_PORT='3000' //dengan menggunakan value db, kita akan mengarahkan database ke container mariadb ===END===
  6. p

Pengujian

  1. Setelah semua konfigurasi dilakukan, sekarang kita akan jalankan docker composenya. Gunakan perintah dibawah untuk menjalankan docker compose.#docker-compose build #docker-compose up -d
  2. Sekarang kita lihat apakah containernya sudah jalan atau belum.#docker ps atau #docker-compose ps
  3. Sekarang kita buka web browser dan lihat apakah simple appsnya sudah jalan atau belum.
  4. Kemudian kita coba ubah pathnya ke /users. Jika berhasil akan menampilkan json dalam bentuk raw. Disini karena saya menggunakan browser firefox jadi bisa ditampilkan dalam bentu raw dan json.

Tertarik mengikuti training di ID-Networkers? Kami menyediakan berbagai pilihan training yang bisa kamu ikuti, klik disini untuk info lengkapnya.

Penulis : M. Syawal Saputra