(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
- 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
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:
- Masuk ke environments
- Klik add environment
- Pilih docker swarm lalu klik start wizard
- Pilih yg agent
- 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:
- Name: pod-[username]-node02
- Environment URL: 10.7.7.20:9001
- 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


Comments
Post a Comment