Kumpulan Penyelesaian course Adinusa (Docker Fundamental)

 

Lab 2.1 : Installing Docker

"sudo apt-get update"

"sudo apt-get install ca-certificates curl"

"sudo install -m 0755 -d /etc/apt/keyrings"

 "sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc"

"sudo chmod a+r /etc/apt/keyrings/docker.asc"

"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"

"sudo apt-get update"

"sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y"

"docker version"

"docker info"

"sudo usermod -aG docker $USER"

"sudo chmod 666 /var/run/docker.sock"

"docker run registry.adinusa.id/btacademy/hello-world"

"docker image ls"

"sudo systemctl restart docker"

Lab 2.2 : Docker Run - Part 1

"docker search redis"

"skopeo list-tags docker://registry.adinusa.id/btacademy/redis"

"docker run registry.adinusa.id/btacademy/redis", ctrl + c"

"docker run -d registry.adinusa.id/btacademy/redis"

"docker run -d --name redis1 registry.adinusa.id/btacademy/redis"

"docker ps"

"docker container ls"

"docker inspect redis1"

"docker logs redis1"

"docker stats redis1"

"docker top redis1"

"docker stop redis1"

"docker search nginx"

"skopeo list-tags docker://registry.adinusa.id/btacademy/nginx"

"docker run -d --name nginx1 -p 80:80 registry.adinusa.id/btacademy/nginx:latest"

"docker inspect nginx1"

"docker run -d --name nginx2 -p 80 registry.adinusa.id/btacademy/nginx:latest"

"curl localhost:$(docker port nginx2 80 | cut -d : -f 2)"

"docker ps -a"

"docker container ls -a"

"docker images"

Lab 2.3 : Docker Run - Part 2

"docker search nginx"

"skopeo list-tags docker://registry.adinusa.id/btacademy/nginx"

"docker inspect nginx1"

"docker ps -a"

"curl localhost:8080"
"curl localhost:8081"

"docker exec -it nginx2 /bin/bash"

"apt-get update -y && apt-get install nano -y"

"nano index.html
isi dengan hello, geralda.
jika sudah ctrl + x lalu y enter

"mv index.html /usr/share/nginx/html"

"service nginx restart"

"docker start nginx2"

"docker inspect nginx1"
"docker inspect nginx2"

"docker logs nginx1"
"docker logs nginx2"

"docker stats nginx1"
"docker stats nginx2"

"docker top nginx1"
"docker top nginx2"

"docker search ubuntu"

"skopeo list-tags docker://registry.adinusa.id/btacademy/ubuntu"

"docker pull registry.adinusa.id/btacademy/ubuntu"

"docker run -it --name ubuntu1 registry.adinusa.id/btacademy/ubuntu"

"docker ps -a"

"docker run -it --rm --name ubuntu2 registry.adinusa.id/btacademy/ubuntu"

"docker ps -a"

Lab 2.4 : Docker Run - Part 3

"docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD=RAHASIA -e MYSQL_DATABASE=latihan05 -p 3306:3306 registry.adinusa.id/btacademy/mysql"

"docker pull registry.adinusa.id/btacademy/phpmyadmin:latest"

"docker run --name my-phpmyadmin -d --link my-mysql:db -p 8090:80 registry.adinusa.id/btacademy/phpmyadmin"

"docker run -dit --name ubuntu1 registry.adinusa.id/btacademy/ubuntu"
"docker run -dit --name ubuntu2 registry.adinusa.id/btacademy/ubuntu"

"docker ps"

"docker pause ubuntu1"
"docker pause ubuntu2"

"docker ps"

"docker stats ubuntu1"
"docker stats ubuntu2"

"docker unpause ubuntu1"

"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"

"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"

"docker logs ch6_mariadb"
"docker logs ch6_wordpress"

"docker top ch6_mariadb"
"docker top ch6_wordpress"

"docker stats ch6_mariadb"
"docker stats ch6_wordpress"

Lab 3.1: Mount Volume

"cd $HOME"

"mkdir -p latihan/latihan01-volume"

"cd latihan/latihan01-volume"

"for i in {1..10}; do touch file-$i; done"

"sudo docker create -v /my-volume --name my-volume registry.adinusa.id/btacademy/busybox"

"sudo docker cp . my-volume:/my-volume"

"docker run --volumes-from my-volume registry.adinusa.id/btacademy/ubuntu ls /my-volume"

Lab 3.2: Mount Volume with NFS Server

"sudo mkdir -p /data/nfs-storage01/"

"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"

"ssh 10.7.7.20"

"sudo apt install nfs-client -y"

"sudo mount -v -o vers=4,loud 10.7.7.10:/ /mnt"

"df -h"

"sudo touch /mnt/file1.txt"

"sudo touch /mnt/file2.txt"

"exit"

"ls /data/nfs-storage01/"

Lab 3.3: Mount Volume with Read-only Mode

"docker volume create my-vol"

"docker volume ls"

"docker volume inspect my-vol"

"docker run -d --name=nginx-rwvol -v my-vol:/usr/share/nginx/html -p 4005:80 registry.adinusa.id/btacademy/nginx:latest"

"docker inspect nginx-rwvol | jq -r '.[].NetworkSettings.IPAddress'"


"echo "This is from my-vol source directory" | sudo tee /var/lib/docker/volumes/my-vol/_data/index.html"


"docker run -d --name=nginx-rovol -v my-vol:/usr/share/nginx/html:ro registry.adinusa.id/btacademy/nginx:latest"

"docker inspect nginx-rovol | jq '.[].Mounts'"

Lab 3.4: Volume Driver

"sudo mkdir /share"

"sudo chmod 777 /share"

"echo "Hello Adinusa!" | sudo tee /share/index.html"

"docker plugin install --grant-all-permissions vieux/sshfs

"docker plugin ls"

"docker plugin disable [PLUGIN ID]"

"docker plugin set vieux/sshfs sshkey.source=/home/student/.ssh/"

"docker plugin enable [PLUGIN ID]"

"docker plugin ls"

"docker volume create --driver vieux/sshfs -o sshcmd=student@10.7.7.20:/share -o allow_other sshvolume"

"docker run -d --name=nginxtest-sshfs -p 8090:80 -v sshvolume:/usr/share/nginx/html registry.adinusa.id/btacademy/nginx:latest"

Lab 3.5: Default Bridge Network

"sudo docker network ls"

"docker run -dit --name alpine1 registry.adinusa.id/btacademy/alpine ash"

"docker run -dit --name alpine2 registry.adinusa.id/btacademy/alpine ash"

"docker container ls"

"docker network create --driver bridge bridge1"

"docker network connect bridge1 alpine1"

"docker inspect alpine2 | jq -r '.[].NetworkSettings.IPAddress'"

"docker exec -it alpine1 sh"

"ip add"

"ping -c 3 8.8.8.8"

"ping -c 3 172.17.0.7"

Lab 3.6: Host Network

"docker run -itd --network host --name my_nginx registry.adinusa.id/btacademy/nginx"


"ip add"

"sudo netstat -tulpn | grep :80"

Lab 4.1: Exploring Dockerfile

"git clone https://github.com/spkane/docker-node-hello.git --config core.autocrlf=input latihan01"

"cd latihan01"

"docker build -t node-latihan01 ."

"docker run -d --rm --name node-latihan01 -p 8080:8080 node-latihan01"

"curl localhost:8080"

"cd $HOME"

"mkdir latihan02"

"cd latihan02"

"vim Dockerfile" 

"FROM registry.adinusa.id/btacademy/whalesay:latest

RUN apt -y update && apt install -y fortunes

CMD /usr/games/fortune -a | cowsay"

"docker build -t docker-whale ."

Lab 4.2: Exploring Dockerfile (Flask Apps)

"cd $HOME"

"mkdir latihan03"

"cd latihan03"

"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')"

"vim requirements.txt"

"Flask==0.10.1

Werkzeug==1.0.0
Jinja2==2.8.1
MarkupSafe==1.1.1
itsdangerous==1.1.0"

"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"]"

"docker build -t flask-latihan03 ."

"docker tag flask-latihan03 [usernamedocker]/flask-latihan03:latest"

"docker push [usernamedocker]/flask-latihan03:latest"

"docker run -d -p 5000:5000 --name flask03 [usernamedocker]/flask-latihan03"

Lab 4.3: Exploring Dockerfile (Quiz)

"mkdir latihan-quiz01"

"cd latihan-q"uiz01"

"git clone https://github.com/rivawahyuda/mywebsite.git"

"vim Dockerfile"

"FROM registry.adinusa.id/btacademy/nginx:latest

COPY ./mywebsite /usr/share/nginx/html"

"docker build -t latihan-quiz01-image ."

"docker run -d -p 80:80 --name quiz01 latihan-quiz01-image"

Lab 5.1: Using Docker Compose

"VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)"

"DESTINATION=/usr/bin/docker-compose"

"sudo curl -sL https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION"

"sudo chmod 755 $DESTINATION"

"cd $HOME"

"mkdir -p latihan/my_wordpress"

"cd latihan/my_wordpress"

"vim docker-compose.yml"

"version: '3.2'


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:"

"docker-compose up -d"

Lab 7.1 - Create Swarm

"docker swarm init --advertise-addr 10.7.7.10"

"docker swarm join --token [TOKEN] 10.7.7.10:2377"


"docker swarm join --token [TOKEN] 10.7.7.10:2377"

"docker node ls"

Lab 7.2 - Deploy Service to Swarm

"docker service create --name web --replicas 2 -p 80:80 registry.adinusa.id/btacademy/nginx:latest"

"docker service inspect --pretty web"

"docker service create --name [username] --reserve-cpu 1 --limit-cpu 1

--reserve-memory 256mb --limit-memory 128mb registry.adinusa.id/btacademy/httpd:latest"

"docker service inspect --pretty [username]"

Lab 7.3 - Docker swarm Scale & Update

"docker service create --name web2 --replicas 3 -p 80:80 registry.adinusa.id/btacademy/nginx:latest"

"docker service scale web2=1"

"docker service ls"

"docker service ps web2"

"docker service update --image sistyo/myweb web2"

"docker service inspect --pretty web2"

Lab 7.4 - Install Portainer and configuration

"docker volume create portainer_data
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 "10.10.10.11:9000"

klik menu Environments -> Add environmets

pilih Docker Swarm -> Start Wizard

pilih Agent -> Copy command to run in node01


kembali ke portainer Dashboard

isi kolom nama dengan hostname pod-geralda-node02

isi Environment URL dengan ip address di  node02 10.7.7.20:9001

klik Connect

Lab 7.5 - Running Container from Portainer

akses Portainer di  browser "http://10.10.10.11:9000"

pilih Home -> node02

klik Containers -> + Add Container

isi kolom nama dengan geralda-web

isi kolom gambar dengan nginx:latest

klik Publish a new network port -> isi port kolom host dengan 8080 dan kolom container dengan 80

klik Deploy the Container

akses browser dengan ip "http://10.10.10.12:8080"

Lab 7.6 - Build & Push Image from Portainer

Masuk ke Menu Image di Portainer, Di dalam Portainer, buka menu Image.

Klik + Build a new Image untuk membuat image baru.

Isikan nama image di kolom Name dengan format geralda/nginx:lab76

Pilih Web Editor sebagai metode build.

Di Web Editor, buat Dockerfile dengan konten berikut:
"FROM registry.adinusa.id/btacademy/nginx:latest
ARG USERNAME=geralda
RUN echo "nginx running on image $USERNAME/nginx:lab76" > /usr/share/nginx/html/index.html
EXPOSE 80"

Setelah Dockerfile selesai, klik Build the image dan tunggu sampai proses build selesai.

Setelah build selesai, periksa image yang telah dibuat di menu Images.

Buka menu Registries di Portainer, kemudian klik Add registry.

Pilih DockerHub sebagai provider registry.

Isi formulir sebagai berikut:
Name: repo-geralda 
Username: geraldarthur (isi dengan username docker hub)
Password: {password docker} (isi dengan password Docker Hub Anda).

Klik Add Registry.

Kembali ke menu Images, dan buka image yang sebelumnya telah dibuat.
Di kolom Registry, pilih repo-geralda
Di kolom Image, isikan dengan tag berikut:
geraldarthur/nginx:lab76

Klik Tag.

Setelah menandai image, klik Push to Registry untuk mengupload image ke Docker Hub.
Pastikan image berhasil dipush dengan memeriksa Docker Hub Dashboard Anda.

"docker pull geraldarthur/nginx:lab76"

"docker history geraldarthur/nginx:lab76"

"docker run -d --name nginx-lab76 geraldarthur/nginx:lab76"

Lab 8.1: Configuring Logging Driver

"sudo vim /etc/docker/daemon.json"

"{

"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "100"
}
}"

"sudo systemctl daemon-reload"

"sudo systemctl restart docker"

"docker run --log-driver json-file --log-opt max-size=10m registry.adinusa.id/btacademy/alpine echo hello world"

"sudo cat /var/lib/docker/containers/$(docker ps --no-trunc -a | grep 'alpine' | awk '{print $1}')/$(docker ps --no-trunc -a | grep 'alpine' | awk '{print $1}')-json.log | jq ."

Lab 9.1: Health Check

"cd $HOME
mkdir hc-latihan01
cd hc-latihan01"

"vim Dockerfile"

FROM registry.adinusa.id/btacademy/docker-http-server:health
HEALTHCHECK --interval=1s --retries=3 \
CMD curl --fail http://localhost:80/ || exit 1

"docker build -t http-healthcheck ."

"docker run -d -p 80:80 --name http-healthcheck http-healthcheck"

"cd $HOME
mkdir hc-latihan02
cd hc-latihan02"

"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);

"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"]

"docker build -t node-server ."

"docker run -d --name nodeserver -p 8080:8080 -p 8081:8081 node-server"

Lab 11.1: Configuring Storage Driver

"sudo vim /etc/docker/daemon.json"
"{

"storage-driver": "vfs"
}" 

"sudo service docker restart"

"docker pull registry.adinusa.id/btacademy/ubuntu"

Challenge 1 - Haproxy With Docker

"mkdir challenge1
cd challenge1"

"docker run -d --name web1 -p 8081:80 registry.adinusa.id/btacademy/nginx:latest
docker run -d --name web2 -p 8082:80 registry.adinusa.id/btacademy/httpd:latest"

"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 host_web1 hdr(host) -i web1.geralda.id
    acl host_web2 hdr(host) -i web2.geralda.id
    use_backend web1_backend if host_web1
    use_backend web2_backend if host_web2

backend web1_backend
    server web1 web1:80

backend web2_backend
    server web2 web2:80

"docker volume create haproxy-config"

"docker run -d --name geralda-haproxy \
  -p 80:80 \
  --link web1:web1 \
  --link web2:web2 \
  -v $(pwd)/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg \
  -v haproxy-config:/usr/local/etc/haproxy/ \
  registry.adinusa.id/btacademy/haproxy-alpine:2.4"

https://radnet-digital.id/

Comments