(Adinusa) Docker Fundamental

Di course Adinusa Docker Fundamental (gratis) saya mendapatkan banyak ilmu tentang bagaimana cara membangun, menjalankan, dan mengelola container menggunakan Docker.dan  juga belajar membuat image, mengatur jaringan antar container, serta memahami konsep isolasi sistem yang membuat aplikasi lebih ringan, cepat, dan mudah dijalankan di berbagai lingkungan.

Modul 1 

menjelaskan gimana caranya download paket iso dari adinusa BTA-Server dan saya menyarankan pakai VirtualBox versi 7.1.12 dikarenakan stabil dan tidak ada error ktka menjalankan paket iso dri adinusa.

----------------------------------- 

pastikan ktka kita memulai lab adinusa ketik

  • servera login:student
  • pw:Adinusa2023

 dan

  • student@servera:~$nusactl login 
  • student@servera:~$nusactl start do-002-1 (menyesuaikan lab)

dan ktka sdh selesai

  • student@servera:~$nusactl grade do-002-1 
  • student@servera:~$nusactl finish do-002-1 

Modul 2

Berikut Penyelesaian lab 2.1 Installing docker
  • student@servera:~$sudo apt-get update
  • student@servera:~$sudo apt-get install ca-certificates curl
  • student@servera:~$sudo install -m 0755 -d /etc/apt/keyrings
  • student@servera:~$sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  • student@servera:~$sudo chmod a+r /etc/apt/keyrings/docker.asc
  • student@servera:~$echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  • student@servera:~$sudo apt-get update
  • student@servera:~$sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
  • student@servera:~$docker version
  • student@servera:~$docker info
  • student@servera:~$sudo usermod -aG docker $USER
  • student@servera:~$sudo chmod 666 /var/run/docker.sock
  • student@servera:~$docker run registry.adinusa.id/btacademy/hello-world
  • student@servera:~$docker image ls
  • student@servera:~$docker container ls -a
Disini kita Menyiapkan dan memverifikasi instalasi Docker agar bisa digunakan untuk membuat dan menjalankan container.

Berikut Penyelesaian lab 2.2  Docker run part 1

Cari Image redis:
  • student@servera:~$docker search redis
  • student@servera:~$skopeo list-tags docker://registry.adinusa.id/btacademy/redis
Jalankan Image redis:
  • student@servera:~$docker run registry.adinusa.id/btacademy/redis (tekan CTRL+C utk keluar)  
  • student@servera:~$docker run -d registry.adinusa.id/btacademy/redis  
  • student@servera:~$docker run -d --name redis1 registry.adinusa.id/btacademy/redis
Periksa container redis:
  • student@servera:~$docker ps
  • student@servera:~$docker container ls
  • student@servera:~$docker ps -a
  • student@servera:~$docker container ls -a
  • student@servera:~$docker inspect redis1
  • student@servera:~$docker logs redis1
  • student@servera:~$docker stats redis1
  • student@servera:~$docker top redis1
  • student@servera:~$docker stop redis1
Cari image redis:
  • student@servera:~$docker search nginx
  • student@servera:~$skopeo list-tags docker://registry.adinusa.id/btacademy/nginx
Jalankan nginx:
  • student@servera:~$docker run -d --name nginx1 -p 80:80 registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker inspect nginx1
  • student@servera:~$docker run -d --name nginx2 -p 80 registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$curl localhost:$(docker port nginx2 80 | cut -d : -f 2)
  • student@servera:~$docker ps -a 
  • student@servera:~$docker container ls -a
  • student@servera:~$docker images
Berikut penyelesaian lab 2.3 Docker run part 2

Cari image nginx:
  • student@servera:~$docker search nginx
  • student@servera:~$skopeo list-tags docker://registry.adinusa.id/btacademy/nginx
  • student@servera:~$docker run -d --name nginx1 -p 8080:80 registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker inspect nginx1
  • student@servera:~$docker run -d --name nginx2 -p 8081:80 registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker ps -a 
  • student@servera:~$docker container ls -a
Cek output nginx:
  • student@servera:~$curl localhost:8080
  • student@servera:~$curl localhost:8081

  • student@servera:~$docker exec -it nginx2 /bin/bash
  • student@servera:~$apt-get update -y && apt-get install nano -y
  • student@servera:~$nano index.html (isi"hello,dhika8")
  • student@servera:~$mv index.html /usr/share/nginx/html
  • student@servera:~$service nginx restart
  • student@servera:~$docker start nginx2
  • student@servera:~$docker ps
  • student@servera:~$docker container ls
  • student@servera:~$curl localhost:8080
  • student@servera:~$curl localhost:8081
inspect dan log:
  • student@servera:~$docker inspect nginx1
  • student@servera:~$docker inspect nginx2
  • student@servera:~$docker logs nginx1
  • student@servera:~$docker logs nginx2
Cek penggunaan resource dan proses:
  • student@servera:~$docker stats nginx1
  • student@servera:~$docker stats nginx2
  • student@servera:~$docker top nginx1
  • student@servera:~$docker top nginx2
Cari image ubunntu:
  • student@servera:~$docker search ubuntu
  • student@servera:~$skopeo list-tags docker://registry.adinusa.id/btacademy/ubuntu
  • student@servera:~$docker pull registry.adinusa.id/btacademy/ubuntu
Menjalankan ubuntu1 & ubuntu2:
  • student@servera:~$docker run -it --name ubuntu1 registry.adinusa.id/btacademy/ubuntu (CTRL+D,utk keluar)
  • student@servera:~$docker ps -a
  • student@servera:~$docker run -it --rm --name ubuntu2 registry.adinusa.id/btacademy/ubuntu (CTRL+D,utk keluar)
  • student@servera:~$docker ps -a
Disini agar kita memahami cara menjalankan,memeriksa, dan mengelola container scra langsung mengunakan docker CLI

Berikut penyelesaian lab 2.4 Docker run part  3

  • student@servera:~$docker run -d --name my-mysql \ -e MYSQL_ROOT_PASSWORD=RAHASIA \ -e MYSQL_DATABASE=latihan05 \ -p 3036:3306 \ registry.adinusa.id/btacademy/mysql
  • student@servera:~$docker pull registry.adinusa.id/btacademy/phpmyadmin:latest
  • student@servera:~$docker run --name my-phpmyadmin -d --link my-mysql:db -p 8090:80 \ registry.adinusa.id/btacademy/phpmyadmin

Lalu tes,dgn akses ke browser 
http://10.10.10.11:8090
login
user:root
password:RAHASIA

  • student@servera:~$docker run -dit --name ubuntu1 registry.adinusa.id/btacademy/ubuntu
  • student@servera:~$docker run -dit --name ubuntu2 registry.adinusa.id/btacademy/ubuntu
  • student@servera:~$docker ps
  • student@servera:~$docker pause ubuntu1
  • student@servera:~$docker pause ubuntu2
  • student@servera:~$docker ps
  • student@servera:~$docker stats ubuntu1
  • student@servera:~$docker stats ubuntu2
  • student@servera:~$docker unpause ubuntu1
  • student@servera:~$docker container run -d --name ch6_mariadb --memory 256m --cpu-shares 1024 --cap-drop net_raw -e MYSQL_ROOT_PASSWORD=test registry.adinusa.id/btacademy/mariadb:5.5
  • student@servera:~$docker container run -d -p 80:80 -P --name ch6_wordpress --memory 512m --cpu-shares 512 --cap-drop net_raw --link ch6_mariadb:mysql -e WORDPRESS_DB_PASSWORD=test registry.adinusa.id/btacademy/wordpress:5.0.0-php7.2-apache
  • student@servera:~$docker logs ch6_mariadb
  • student@servera:~$docker logs ch6_wordpress
  • student@servera:~$docker top ch6_mariadb
  • student@servera:~$docker top ch6_wordpress
  • student@servera:~$docker stats ch6_mariadb
  • student@servera:~$docker stats ch6_wordpress
Disini agar kita melatih integrasi antar-container (database, web, admin panel) dan pembatasan resource container

Modul 3

Berikut penyelesaian lab 3.1 Mount volume

  • student@servera:~$mkdir -p latihan/latihan01-volume
  • student@servera:~$cd latihan/latihan01-volume
Buat 10 file:
  • student@servera:~$for i in {1..10};do touch file-$i;done
Buat container data volume bernama my-volume:
  • student@servera:~$sudo docker create -v /my-volume --name my-volume registry.adinusa.id/btacademy/busybox
Salin file ke dlm volume:
  • student@servera:~$sudo docker cp . my-volume:/my-volume 
Mount volume ke containe ubuntu dan tampilkan isi:
  • student@servera:~$docker run --volumes-from my-volume registry.adinusa.id/btacademy/ubuntu ls /my-volume
Berikut penyelesaian lab 3.2 Mount volume with NFS server

Jalankan di node01:
  • student@servera:~$sudo mkdir -p /data/nfs-storage01/
  • student@servera:~$docker run -itd --privileged --restart unless-stopped -e SHARED_DIRECTORY=/data -v /data/nfs-storage01:/data -p 2049:2049 registry.adinusa.id/btacademy/nfs-server-alpine:12
  • student@servera:~$ssh 10.7.7.20
Jalankan di node02:
  • student@servera:~$sudo apt install nfs-client -y
  • student@servera:~$sudo mount -v -t nfs4 10.7.7.10:/ /mnt
  • student@servera:~$df -h
  • student@servera:~$sudo touch /mnt/file1.txt
  • student@servera:~$sudo touch /mnt/file2.txt
  • student@servera:~$ls /data/nfs-storage01/
Berikut penyelesaian lab 3.3 Mount volume with read-only mode
  • student@servera:~$docker volume create my-vol
  • student@servera:~$docker volume ls
  • student@servera:~$docker volume inspect my-vol
  • student@servera:~$docker run -d --name=nginx-rwvol -v my-vol:/usr/share/nginx/html -p 4005:80 registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker inspect nginx-rwvol | jq -r '.[].NetworkSettings.IPAddress'
  • student@servera:~$curl http://172.17.X.X
  • student@servera:~$sudo echo "This is from my-vol source directory" > index.html
  • student@servera:~$sudo mv index.html /var/lib/docker/volumes/my-vol/_data
  • student@servera:~$curl http://172.17.X.X
  • student@servera:~$docker run -d --name=nginx-rovol -v my-vol:/usr/share/nginx/html:ro registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker inspect nginx-rovol | jq '.[].Mounts'
Berikut penyelesaian lab 3.4 Volume driver

Jalankan di node02:
  • student@servera:~$sudo mkdir /share
  • student@servera:~$sudo chmod 777 /share
  • student@servera:~$echo "Hello Adinusa!" > /share/index.html
Jalankan di node01:
  • student@servera:~$docker plugin install --grant-all-permissions vieux/sshfs
  • student@servera:~$docker plugin ls
  • student@servera:~$docker plugin disable [PLUGIN ID]
  • student@servera:~$docker plugin set vieux/sshfs sshkey.source=/home/student/.ssh/
  • student@servera:~$docker plugin enable [PLUGIN ID]
  • student@servera:~$docker plugin ls
  • student@servera:~$docker volume create --driver vieux/sshfs -o sshcmd=student@10.7.7.20:/share -o allow_other sshvolume
  • student@servera:~$docker run -d --name=nginxtest-sshfs -p 8090:80 -v sshvolume:/usr/share/nginx/html registry.adinusa.id/btacademy/nginx:latest
  • student@servera:~$docker ps
  • student@servera:~$curl http://localhost:8090
Disini kita Mempelajari cara agar data container tidak hilang saat container dihapus menggunakan Docker Volume

Berikut penyelesaian lab 3.5 Default bridge network
  • student@servera:~$sudo docker network ls
  • student@servera:~$docker run -dit --name alpine1 registry.adinusa.id/btacademy/alpine ash
  • student@servera:~$docker run -dit --name alpine2 registry.adinusa.id/btacademy/alpine ash
  • student@servera:~$docker container ls
  • student@servera:~$docker network create --driver bridge bridge1
  • student@servera:~$docker network connect bridge1 alpine1
  • student@servera:~$docker inspect alpine2 | jq -r '.[].NetworkSettings.Networks.bridge.IPAddress'
  • student@servera:~$docker exec -it alpine1 sh
  • student@servera:~$ip add
  • student@servera:~$ping -c 3 8.8.8.8
  • student@servera:~$ping -c 3 172.17.X.X
  • student@servera:~$ping -c 3 alpine2 (lalu CTRL+D)
  • student@servera:~$docker network connect bridge1 alpine2
  • student@servera:~$docker exec -it alpine1 sh
  • student@servera:~$ping -c 3 alpine2
Berikut penyelesaian lab 3.6 Host network
    • student@servera:~$docker run -itd --network host --name my_nginx registry.adinusa.id/btacademy/nginx
    • student@servera:~$curl http://localhost
    • student@servera:~$ip add
    • student@servera:~$sudo netstat -tulpn | grep :80
    Disini agar kita Memahami komunikasi antar-container dalam satu jaringan dan mode host untuk kinerja tinggi

    Modul  4

    Berikut penyelesaian lab 4.1 Exploring dockerfile

    • student@servera:~$git clone https://github.com/spkane/docker-node-hello.git \   --config core.autocrlf=input latihan01
    • student@servera:~$cd latihan01
    • student@servera:~$docker build -t node-latihan01 .
    • student@servera:~$docker run -d --rm --name node-latihan01 -p 8080:8080 node-latihan01
    • student@servera:~$curl localhost:8080
    • student@servera:~$cd $HOME
    • student@servera:~$mkdir latihan02
    • student@servera:~$cd latihan02
    • student@servera:~$vim Dockerfile
    • (# Use whalesay image as a base image
    • FROM registry.adinusa.id/btacademy/whalesay:latest
    • # Install fortunes
    • RUN apt -y update && apt install -y fortunes
    • # Execute command
    • CMD /usr/games/fortune -a | cowsay) isi ini
    • student@servera:~$docker build -t docker-whale .
    • student@servera:~$docker image ls
    • student@servera:~$docker run docker-whale
    • student@servera:~$docker ps
    • student@servera:~$docker container ls -a
    Berikut Penyelesaian lab 4.2 Exploring dockerfile (flask apps)

    Jika belum punya akun DockerId,daftar di https://app.docker.com/signup

    • student@servera:~$docker login -u <username>
    • student@servera:~$mkdir latihan03
    • student@servera:~$cd latihan03
    • student@servera:~$vim app.py
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def hello_world():
        return 'Hey, we have Flask in a Docker container!'
    if __name__ == '__main__':
        app.run(debug=True, host='0.0.0.0')
    • student@servera:~$vi requirements.txt
    Flask==0.10.1
    Werkzeug==1.0.0
    Jinja2==2.8.1
    MarkupSafe==1.1.1
    itsdangerous==1.1.0
    • student@servera:~$vim Dockerfile
    FROM registry.adinusa.id/btacademy/ubuntu:16.04
    RUN mkdir /app
    RUN apt-get update -y && \
        apt-get install python-pip python-dev -y
    COPY ./requirements.txt /app
    COPY . /app
    WORKDIR /app
    RUN pip install -r requirements.txt
    ENTRYPOINT ["python"]
    CMD ["app.py"]

    • student@servera:~$docker build -t flask-latihan03 .
    • student@servera:~$docker tag flask-latihan03 [usernamedocker]/flask-latihan03:latest
    • student@servera:~$docker push [usernamedocker]/flask-latihan03:latest
    • student@servera:~$docker run -d -p 5000:5000 --name flask03 [usernamedocker]/flask-latihan03
    • student@servera:~$curl localhost:5000
    Berikut penyelesaian lab 4.3 Exploring dockerfile  (quiz)
    • student@servera:~$Mkdir latihan-quiz01
    • student@servera:~$cd latihan-quiz01
    • student@servera:~$git clone https://github.com/rivawahyuda/mywebsite
    • student@servera:~$nano Dockerfile
    FROM registry.adinusa.id/btacademy/nginx:latest
    COPY mywebsite/ /usr/share/nginx/html
    • student@servera:~$docker build -t latihan-quiz01-image .
    • student@servera:~$docker run -d --name quiz01 -p 80:80 latihan-quiz01-image
    • student@servera:~$curl http://localhost
    disini kita Membuat image kustom dari Dockerfile dan menjalankan aplikasi buatan sendiri

    Modul 5
    Berikut Penyelesaian lab 5.1 Using docker compose

    Jalankan di kedua node:
    • student@servera:~$VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
    • DESTINATION=/usr/bin/docker-compose
    • student@servera:~$sudo curl -sL https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
    • student@servera:~$sudo chmod 755 $DESTINATION
    • student@servera:~$docker-compose --version
    • student@servera:~$mkdir -p latihan/my_wordpress
    • student@servera:~$cd latihan/my_wordpress
    • student@servera:~$vim docker-compose.yml
    services:
       db:
         image: registry.adinusa.id/btacademy/mysql:5.7
         volumes:
           - dbdata:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: [username]
           MYSQL_PASSWORD: [password]

       wordpress:
         depends_on:
           - db
         image: registry.adinusa.id/btacademy/wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: [username]
           WORDPRESS_DB_PASSWORD: [password]
    volumes:
        dbdata:
    • student@servera:~$docker-compose up -d
    • student@servera:~$docker container ls
    Disini kita menjalankan beberapa container yang saling terhubung dengan satu file konfigurasi
    Modul 7
    Berikut penyelesaian lab 7.1 Crate swarm

    Jalankan di node01:
    • student@servera:~$docker swarm init --advertise-addr 10.7.7.10
    Jalankan di node02:
    • student@servera:~$docker swarm join --token [TOKEN] 10.7.7.10:2377
    • student@servera:~$docker node ls
    Berikut penyelesaian lab 7.2 Deploy service to swarm

    Jalankan di node01:
    • student@servera:~$docker service create --name web --replicas 2 -p 80:80 registry.adinusa.id/btacademy/nginx:latest
    • student@servera:~$docker service ls
    Jalankan dinode01 dan node02:
    • student@servera:~$curl http://10.XX.XX.10
    • student@servera:~$curl http://10.XX.XX.20
    Jalankan di node01:
    • student@servera:~$docker service inspect --pretty web
    • student@servera:~$docker service ps web
    • student@servera:~$docker service create --name [username] --reserve-cpu 1 --limit-cpu 1 --reserve-memory 256mb --limit-memory 128mb registry.adinusa.id/btacademy/httpd:latest
    • student@servera:~$docker service inspect --pretty [username]
    Berikut penyelesaian lab 7.3 Deploy swarm scale & update
    • student@servera:~$docker service create --name web2 --replicas 3 -p 80:80 registry.adinusa.id/btacademy/nginx:latest
    • student@servera:~$docker service scale web2=1
    • student@servera:~$docker service ls
    • student@servera:~$docker service ps web2
    • student@servera:~$docker service update --image sistyo/myweb web2
    • student@servera:~$docker service inspect --pretty web2
    Disini kita menjalankan Docker dalam mode cluster dan mengelola beberapa node
    Berikut penyelesaian lab 7.4 Install portainer and configuration

    Jalankan di node01:
    • student@servera:~$docker volume create portainer_data
    • student@servera:~$docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
    Buka browser dan akses:
    http://10.10.10.11:9000

    Di Portainer Dashboard:
    1. Masuk ke environments
    2. Klik add environment
    3. Pilih docker swarm lalu klik start wizard
    4. Pilih yg agent
    5. Muncul docker run command. salin perintah tsb, lalu jalankan di node01 (karena Agent akan menghubungkan node02 dari node01).
    Contoh perintah (cek sesuai ortainer, karena bisa berbeda beda imagenya):
        docker run -d \
        --name portainer_agent \
        --restart=always \
        -p 9001:9001 \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v /var/lib/docker/volumes:/var/lib/docker/volumes \
        portainer/agent:latest
    Pastikan node02 bisa diakses via IP: 10.7.7.20:9001

    Kembali ke form Add Environment
    Isi:
    1. Name: pod-[username]-node02
    2. Environment URL: 10.7.7.20:9001
    3. Klik Connect
    Kembali ke Home
    Pastikan muncul environment kedua utk node02
    portainer dashboard bisa diakses dan node02 muncul

    Berikut penyelesaian lab 7.5 Running container from portainer
    Akses Dashboard Portainer lalu
    Buka browser dan akses:
    http://10.10.10.11:9000
    (gunakan ssh tunneling jika dibutuhkan, sesuai arahan platform.)
     
    Jalankan container nginx dri Portainer
    Masuk ke Portainer
    Pilih:
    Home - node02
    Masuk ke menu:
    Containers - + add container
    Isi formulir:
    1.Name:
        [username]-web
    2.Image:
        nginx:latest
    Klik Publish a new network port
        Host: 8080
    Container: 80
    Pastikan Node adalah:
        pod-[username]-node02
    lalu klik deploy the container

    setelah mendeploy,lihat notifikasi di kanan atas.
    Masuk ke menu containers utk melihat [username]-web sudah berjalan.

    Cek Container
    Gunakan menu quick actions untuk:
    • Logs
    • Inspect
    • Stats
    • Console
    Akses Website di Browser
        http://10.10.10.12:8080

    Pastikan ada container dengan nama:
        [username]-web
    Berjalan di node02

    Berikut penyelesaian lab 7.6 Build & push image from portainer
    Masuk ke Portainer:
    • Di sidebar kiri, klik "Images"
    • Klik tombol “+ Build a new image”
    Isi Formulir:
    • Name: adinusa_username/nginx:lab76
    • Build method: pilih Web Editor
    Isi Dockerfile di Web Editor:
        FROM registry.adinusa.id/btacademy/nginx:latest
        ARG USERNAME=username adinusa
        RUN echo "nginx running on image $USERNAME/nginx:lab76" > /usr/share/nginx/html/index.html
        EXPOSE 80

    Pastikan tidak ada typo dan semua sintaks benar.
    Klik “Build the image” dan tunggu sampai proses selesai - Pastikan image muncul di menu Images

    Masuk ke Menu Registries:
    • Klik add registry
    Isi Data:
    • Registry provider: DockerHub
    • Name: repo-username adinusa
    • Username: username Docker Hub kamu
    • Password: password Docker Hub kamu
    • Klik Add Registry
    Kembali ke menu Images, Klik image yang sudah dibuild sebelumnya:
    • adinusa_username/nginx:lab76
    Scroll ke bawah ke bagian Tag Image

    Isi Formulir:
    • Registry: repo-username adinusa (yang dibuat tdi)
    • Image: dockerhub_username/nginx:lab76
    • Klik tag
    • Setelah selesai, klik push to registry
    Cek image berhasil masuk di https://hub.docker.com atau coba pull dengan:
    • docker pull dockerhub_username/nginx:lab76
    Cek histori image:
    • docker history dockerhub_username/nginx:lab76 (Harus ada line dengan ARG USERNAME=username adinusa) 
    Jalankan container dari image:
    • docker run -d -p 8080:80 dockerhub_username/nginx:lab76
    Akses di browser:
    http://[IP_atau_localhost]:8080
    Harus muncul:
    nginx running on image usernameadinusa/nginx:lab76

    Disini kita menggunakan portainer sbg antarmuka GUI untuk mengelola docker dan swarm dgn mudah
    Modul 8
    Berikut penyelesaian lab 8.1 configuring logging driver 
    • student@servera:~$sudo vim /etc/docker/daemon.json
    {
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "10m",
        "max-file": "100"
      }
    }
    • student@servera:~$sudo systemctl daemon-reload
    • student@servera:~$sudo systemctl restart docker
    • student@servera:~$docker run --name alpine --log-driver json-file --log-opt max-size=10m registry.adinusa.id/btacademy/alpine echo hello world  
    • student@servera:~$sudo cat /var/lib/docker/containers/CONTAINER/xxx-json.log
    Disini kita Mengelola sistem log agar efisien dan tidak memenuhi disk
    Modul 9
    Berikut penyelesaian lab 9.1 Health check
    • student@servera:~$mkdir hc-latihan01
    • student@servera:~$cd hc-latihan01
    • student@servera:~$vim Dockerfile
    FROM registry.adinusa.id/btacademy/docker-http-server:health
    HEALTHCHECK --interval=1s --retries=3 \
    CMD curl --fail http://localhost:80/ || exit 1

    • student@servera:~$docker build -t http-healthcheck .
    • student@servera:~$docker run -d -p 80:80 --name http-healthcheck http-healthcheck
    • student@servera:~$docker ps
    • student@servera:~$curl http://localhost/
    • student@servera:~$curl http://localhost/unhealthy
    • student@servera:~$docker container ls
    • student@servera:~$curl http://localhost/
    • student@servera:~$cd $HOME
    • student@servera:~$mkdir hc-latihan02
    • student@servera:~$cd hc-latihan02
    • student@servera:~$vim server.js
    "use strict";
    const http = require('http');

    function createServer () {
    return http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('OK\n');
    }).listen(8080);
    }

    let server = createServer();

    http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    if (server) {
    server.close();
    server = null;
    res.end('Shutting down...\n');
    } else {
    server = createServer();
    res.end('Starting up...\n');
    }
    }).listen(8081);
    • student@servera:~$vim Dockerfile
    FROM registry.adinusa.id/btacademy/node
    COPY server.js /
    EXPOSE 8080 8081
    HEALTHCHECK --interval=5s --timeout=10s --retries=3 CMD curl -sS 127.0.0.1:8080 || exit 1
    CMD ["node","server.js"]
    • student@servera:~$docker build -t node-server .
    • student@servera:~$docker run -d --name nodeserver -p 8080:8080 -p 8081:8081 node-server
    • student@servera:~$curl 127.0.0.1:8080
    • student@servera:~$docker ps
    • student@servera:~$docker inspect --format "{{ json .State.Health }}" nodeserver | jq .
    • student@servera:~$curl 127.0.0.1:8081
    • student@servera:~$docker ps
    • student@servera:~$docker inspect --format "{{ json .State.Health }}" nodeserver | jq .
    • student@servera:~$curl 127.0.0.1:8081
    • student@servera:~$docker ps
    • student@servera:~$docker inspect --format "{{ json .State.Health }}" nodeserver | jq .
    Disini kita Menambahkan pemeriksaan otomatis untuk memastikan container berjalan sehat
    Modul 11
    Berikut penyelesaian lab 11.1 Configuring storage driver
    • student@servera:~$sudo vim /etc/docker/daemon.json
    {
      "storage-driver": "vfs"
    }
    • student@servera:~$sudo service docker restart
    • student@servera:~$docker info
    • student@servera:~$docker pull registry.adinusa.id/btacademy/ubuntu
    • student@servera:~$sudo ls -al /var/lib/docker/vfs/dir/
    • student@servera:~$sudo du -sh /var/lib/docker/vfs/dir/
    Disini agar kita mengetahui bagaimana Docker menyimpan image dan container di sistem file host
    Modul 13
    Berikut penyelesaian challenge 1 Haproxy with docker
    • student@servera:~$mkdir challenge1
    • student@servera:~$cd challenge1
    • student@servera:~$docker run -d --name web1 registry.adinusa.id/btacademy/nginx:latest
    • student@servera:~$docker run -d --name web2 registry.adinusa.id/btacademy/nginx:latest
    • student@servera:~$nano haproxy.cfg
    global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client  50000ms
        timeout server  50000ms

    frontend http_front
        bind *:80
        acl is_web1 hdr(host) -i web1.dhika8.id
        acl is_web2 hdr(host) -i web2.dhika8.id

        use_backend web1_back if is_web1
        use_backend web2_back if is_web2

    backend web1_back
        server web1 web1:80 check

    backend web2_back
        server web2 web2:80 check

    • student@servera:~$docker volume create haproxy_config
    • student@servera:~$docker run --rm -v haproxy_config:/haproxy_config -v $(pwd):/backup alpine cp /backup/haproxy.cfg /haproxy_config/
    • student@servera:~$docker run -d --name dhika8-haproxy \
      --network bridge \
      -p 80:80 \
      -v haproxy_config:/usr/local/etc/haproxy \
      --link web1 \
      --link web2 \
      registry.adinusa.id/btacademy/haproxy-alpine:2.4

    Disini agar kita melatih penggunaan haproxy sebagai load balancer antar web server dalam container

    Berikut penyelesaian challenge 2 Deploy laravel with docker( hard)
    • student@servera:~$mkdir challenge2
    • student@servera:~$cd challenge2
    • student@servera:~$git clone https://github.com/academynusa/perpus-laravel.git
    • student@servera:~$cd perpus-laravel
    • student@servera:~$nano Dockerfile
    FROM php:7.2-apache

    # Install dependencies
    RUN apt-get update && apt-get install -y \
        libpng-dev \
        libonig-dev \
        libxml2-dev \
        zip \
        unzip \
        git \
        curl \
        libzip-dev \
        && docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

    # Install Composer
        COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

    # Set working directory
        WORKDIR /var/www/html

    # Copy project files
        COPY . /var/www/html

    # Set permission
        RUN chown -R www-data:www-data /var/www/html \
        && chmod -R 755 /var/www/html

    # Expose port
        EXPOSE 8000

    # Copy startup script
        COPY start.sh /start.sh
        RUN chmod +x /start.sh
        CMD ["/start.sh"]

    student@servera:~$nano start.sh
    #!/bin/bash

    # Copy .env
        cp .env.example .env

    # Install dependencies
        composer update

    # Generate key
        php artisan key:generate

    # Migrate dan seed
        php artisan migrate
        php artisan db:seed

    # Jalankan Laravel
        php artisan serve --host=0.0.0.0 --port=8000

    • student@servera:~$chmod +x start.sh
    • student@servera:~$docker build -t img-perpus-dhika8 .
    • student@servera:~$docker run -d -p 8000:8000 --name perpus-dhika8 img-perpus-dhika8
    • student@servera:~$cp .env.example .env
    • student@servera:~$nano .env
    DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_PORT=3306
        DB_DATABASE=perpusku_gc
        DB_USERNAME=root
        DB_PASSWORD=

    buka browser dan akses:
    • http://<IP-node02>:8000
    Disini kita mendeploy aplikasi Laravel secara penuh menggunakan container Docker

    Kunjungi situs resmi kami di 
    https://radnet-digital.id untuk informasi lebih lanjut.

          Comments

          Popular posts from this blog

          (Adinusa) Linux System Administration

          (Webinar) CSCU Introduction : Securing Email Communication