Week of June 5 Detailed Log

Install Docker Compose

sudo curl -L “https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

<script type=”text/javascript” src=”https://platform.linkedin.com/badges/js/profile.js&#8221; async defer></script>

<div class=”LI-profile-badge”  data-version=”v1″ data-size=”medium” data-locale=”en_US” data-type=”horizontal” data-theme=”dark” data-vanity=”markshay”><a class=”LI-simple-link” href=’https://www.linkedin.com/in/markshay?trk=profile-badge’>Mark Shay</a></div>

#Clean up

docker ps -aq

docker stop $(docker ps -aq)

docker rm $(docker ps -aq)

docker rmi $(docker images -q)

docker system prune

docker container prune

docker image prune

docker volume prune

docker network prune

cd ..

cd compose-sample-2

docker-compose up

Control-C

docker-compose up -d

docker-compose logs

docker-compose ps

docker-compose top

docker-compose down

nano docker-compose.yml

# create your drupal and postgres config here, based off the last assignment

version: ‘2’

services:

  drupal:

    image: drupal

    ports:

      – “8080:80”

    volumes:

      – drupal-modules:/var/www/html/modules

      – drupal-profiles:/var/www/html/profiles

      – drupal-sites:/var/www/html/sites

      – drupal-themes:/var/www/html/themes

  postgres:

    image: postgres

    ports:

      – “5432:5432”

    environment:

      – POSTGRES_PASSWORD=mypasswd

volumes:

  drupal-modules:

  drupal-profiles:

  drupal-sites:

  drupal-themes:

#cleanup

docker-compose down -v

#cleanup local images

docker-compose down –rmi local

#DockerFile

#create your custom drupal image here, based of official drupal

FROM drupal:8.2

RUN apt-get update && apt-get install -y git \

    && rm -rf /var/lib/apt/lists/*

WORKDIR /var/www/html/themes

RUN git clone –branch 8.x-3.x –single-branch –depth 1 https://git.drupal.org/project/bo$

    && chown -R www-data:www-data bootstrap

WORKDIR /var/www/html

#Docker Swarm

git clone https://github.com/BretFisher/udemy-docker-mastery

docker info

docker swarm init –advertise-addr 127.0.0.1

docker node ls

docker service create alpine ping 8.8.8.8

docker service ls

docker service ps reverent_goldberg

docker service update j9lrdop3by0d –replicas 3

docker service ps reverent_goldberg

docker container ls

docker container rm -f reverent_goldberg.3.p1ks7ok0w1sm1y7ikvh3gndow

docker service ls

docker service ps reverent_goldberg

docker service rm reverent_goldberg

docker service ls

docker container ls

docker swarm init

#Build Docker Swarm

#Manager Server

docker swarm init –advertise-addr 192.168.10.2

docker swarm join –token SWMTKN-1-6aynyb5mmgyb1qy6ofikeny5axuhzk303bau9vdncnpigkclcf-500wa21q29k5rl9pw3dbllimp 192.168.10.2:2377

#Node1 

docker swarm join –token SWMTKN-1-6aynyb5mmgyb1qy6ofikeny5axuhzk303bau9vdncnpigkclcf-500wa21q29k5rl9pw3dbllimp 192.168.10.2:2377

#Node2

docker swarm join –token SWMTKN-1-6aynyb5mmgyb1qy6ofikeny5axuhzk303bau9vdncnpigkclcf-500wa21q29k5rl9pw3dbllimp 192.168.10.2:2377

#Manager Server # promote Node 1

docker node ls

docker node update –role manager worker1

docker node ls

docker swarm join-token manager

#Node3 # Join as Manager by default


docker swarm join –token SWMTKN-1-6aynyb5mmgyb1qy6ofikeny5axuhzk303bau9vdncnpigkclcf-d3j1ol33vs16ythghosga20n9 192.168.10.2:2377

#Manager Server 

docker node ls

docker service create –replicas 3 alpine ping 8.8.8.8

docker service ls

docker node ps

docker node ps worker1

#Scaling Out with Overlay Networking

docker network create –driver overlay mydrupal

docker network ls

#Create Postgres Service on Swarm

#docker service create –name psql –network mydrupal -e POSTGRES_PASSWORD=mypass postgres

docker service create –name psql –network mydrupal –publish 5432:5432 -e POSTGRES_PASSWORD=mypass postgres

#Verify Image running

docker service ls

#Verify Node which is running Service

docker service ps psql

#Run to see if service is running on server

docker container logs psql.1.oey4ud9gbd87vvp7j8i11zv8b

#Create Drupal Service on Swarm

docker service create –name drupal –network mydrupal -p 80:80 drupal

docker service ls

#repeats command every 2 seconds

watch docker service ls

docker service ps drupal

# Scaling Out with Routing Mesh

docker service create –name search –replicas 3 -p 9200:9200 elasticsearch:2

docker service ps search

curl localhost:9200

#Create A Multi-Service Multi-Node Web App

docker node ls

docker ps -a

docker service ls

#Create Network backend

docker network create -d overlay backend

#Create Network frontend

docker network create -d overlay frontend

#Vote 

docker service create –name vote -p 80:80 –network frontend –replicas 2 dockersamples/examplevotingapp_vote:before

#redis

docker service create —-name redis –network frontend –replicas 1 redis:3.2

#worker

docker service create –name worker –network frontend –network backend dockersamples/examplevotingapp_worker

#db

docker service create –name db –network backend –mount type=volume,source=db-data,target=/var/lib/postgresql/data postgres:9.4

#result

docker service create —name result —network backend -p 5001:80 dockersamples/examplevotingapp_vote:before:before

Docker service logs

#Swarm Stacks and Production Grade Compose

docker stack deploy -c example-voting-app-stack.yml voteapp

docker stack ls

docker stack ps voteapp

docker container ls

docker stack services voteapp

docker stack ps voteapp

docker network ls

nano example-voting-app-stack.yml 

replicas: 5

docker stack deploy -c example-voting-app-stack.yml voteapp

#Secrets Storage for Swarm: Protecting Your Environment Variables 

docker service create –name psql -e POSTGRES_USER_FILE=/run/secrets/psql_user -e POSTGRES_PASSWORD_FILE=/run/secrets/psql_pass postgres

docker secret ls

docker secret inspect psql_user

docker service ps psql

docker exec -it voteapp_db.1.e9oz0nv6nl41pk42lcridqv7p bash

ls /run/secrets/

cat /run/secrets/psql_user

docker container logs voteapp_db.1.e9oz0nv6nl41pk42lcridqv7p 

#Using Secrets with Swarm Stacks

docker service create –name search –replicas 2 -p 9200:9200 elasticsearch:2

docker stack deploy -c docker-compose.yml mydb

docker stack rm mydb

# create your drupal and postgres config:

nano docker-compose.yml

version: ‘3.1’

# NOTE: move this answer file up a directory so it’ll work

services:

  drupal:

    image: drupal:8.2

    ports:

      – “8080:80”

    volumes:

      – drupal-modules:/var/www/html/modules

      – drupal-profiles:/var/www/html/profiles       

      – drupal-sites:/var/www/html/sites      

      – drupal-themes:/var/www/html/themes

  postgres:

    image: postgres:12.1

    ports:

      – “5432:5432”    environment:

      – POSTGRES_PASSWORD_FILE=/run/secrets/psql-pw

    secrets:

      – psql-pw

    volumes:

      – drupal-data:/var/lib/postgresql/data

volumes:

 – drupal-data:/var/lib/postgresql/data

volumes:

  drupal-data:

  drupal-modules:

  drupal-profiles:

  drupal-sites:

  drupal-themes:

secrets:

  psql-pw:

    external: true

echo “oagy938hs” | docker secret create psql-pw – 

docker stack deploy -c docker-compose.yml drupal

#Swarm App Lifecycle

cd secrets-sample-2

docker node ls

docker-compose up -d

docker-compose exec psql cat /run/secrets/psql_user

#Full App Lifecycle: Dev, Build and Deploy With a Single Compose

docker-compose up -d

docker-compose -f docker-compose.yml -f docker-compose.test.yml up -d

docker-compose -f docker-compose.yml -f docker-compose.prod.yml config

docker-compose -f docker-compose.yml -f docker-compose.prod.yml config > output.yml

#Service Updates: Changing Things In Flight

docker service create -p 8088:80 –name web nginx:1.13.7

docker service scale web=5

docker service update –image nginx:1.13.6 web

docker service update –publish-rm 8080 –publish-add 9090:80

#Health checks in Dockerfiles

docker container run –name p1 -d postgres

docker container ls

docker container run –name p2 -d –health-cmd=”pg_isready -U postgress|| exit 1″ postgres

docker container ls

docker container inspect p2

docker service create –name psql –network mydrupal –publish 5432:5432 -e POSTGRES_PASSWORD=mypass postgres

docker service create –name psql –network mydrupal –publish 5432:5432 -e POSTGRES_PASSWORD=mypass postgres  –health-cmd=”pg_isready -U postgres || exit 1″ postgres

#Run a Private Docker Registry

docker container run -d -p 5000:5000 –name registry registry

docker container ls

docker image ls

docker pull hello-world

docker run hello-world

docker tag hello-world 127.0.0.1:5000/hello-world

docker image ls

docker push 127.0.0.1:5000/hello-world

docker image remove hello-world

docker image remove 127.0.0.1:5000/hello-world

docker pull 127.0.0.1:5000/hello-world

docker container rm registry -f

docker container run -d -p 5000:5000 –name registry -v $(pwd)/registry-data:/var/lib/registry registry

docker image ls

docker push 127.0.0.1:5000/hello-world

ll registry-data

#Docker Registry With Swarm

docker node ls

docker service create –name registry –publish 5000:5000 registry

docker service ps registry

docker pull hello-world

docker tag hello-world 127.0.0.1:5000/hello-world

docker push 127.0.0.1:5000/hello-world

docker pull nginx

docker tag nginx 127.0.0.1:5000/nginx

docker push 127.0.0.1:5000/nginx

docker service create –name nginx -p 80:80 127.0.0.1:5000/nginx

#Install Kubernetes

#Install & Configure MicroK8s Ubuntu

sudo snap install microk8s –classic –channel=1.17/stable

sudo usermod -a -G microk8s vagrant

nano .bashrc

alias kubectl=’microk8s.kubectl’

microk8s.enable dns

microk8s.status

#Our First Pod With kubectl run

kubectl version

kubectl run my-nginx –image nginx

# Pre Version 1.18

kubectl get pods

#Clean up

kubectl delete deployment my-nginx

kubectl get all

# Scaling ReplicaSets

kubectl run my-apache –image httpd

kubectl get all

kubectl scale deploy/my-apache –replicas 2 #kubectl scale deployment my-apache —replicas 2

kubectl get all

kubectl logs deployment/my-apache

kubectl logs deployment/my-apache –follow –tail 1

kubectl logs -l run=my-apache

kubectl get pods

kubectl describe pod/my-apache-5d589d69c7-jmbmh

#Watch Commmand

#Terminal Window 1

kubectl get pods -w

#Terminal Window 2

kubectl delete pod/my-apache-5d589d69c7-jmbmh

kubectl get pods

#Clean up

kubectl delete deployment my-apache

# K8s Services

#Creating a ClusterIP Service

#Terminal Window 1

kubectl get pods -w

#Terminal Window 2

kubectl create deployment httpenv –image=bretfisher/httpenv

kubectl scale deployment/httpenv –replicas=5

kubectl expose deployment/httpenv –port 8888

kubectl get service

kubectl run –generator run-pod/v1 tmp-shell –rm -it –image bretfisher/netshoot — bash

curl httpenv:8888

#Alternative method from Ubuntu

kubectl get service

curl 10.152.183.202:8888

#Creating a NodePort and LoadBalancer Service

kubectl get all

kubectl expose deployment/httpenv –port 8888 –name httpenv-np –type NodePort

kubectl get services

NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE

httpenv      ClusterIP   10.152.183.202   <none>        8888/TCP         13m

httpenv-np   NodePort    10.152.183.136   <none>        8888:31585/TCP   70s

kubernetes   ClusterIP   10.152.183.1     <none>        443/TCP          3h26m

kubectl expose deployment/httpenv –port 8888 –name httpenv-lb –type LoadBalancer

kubectl get services

curl 10.152.183.147:8888

#Clean up

kubectl delete service/httpenv service/httpenv-np

kubectl delete service/httpenv-lb deployment/httpenv

#Kubernetes Services DNS

kubectl get namespaces

#Run, Expose, and Create Generators

kubectl create deployment test –image nginx –dry-run

kubectl create deployment test –image nginx –dry-run -o yaml

kubectl create job test –image nginx –dry-run -o yaml

kubectl create deployment test –image nginx

kubectl expose deployment/test –port 80 –dry-run -o yaml

#Clean up

kubectl delete deployment test 

#Moving to Declarative Kubernetes YAML

#Building Your YAML Files

kubectl api-resources

kubectl api-versions

#Building Your YAML Spec

kubectl explain services –recursive

kubectl explain services.spec

kubectl explain services.spec.type

kubectl explain deployment.spec.template.spec.volumes.nfs.server

# Dry Runs and Diff’s

kubectl apply -f app.yml –dry-run

kubectl apply -f app.yml

kubectl apply -f app.yml –server-dry-run

kubectl diff -f app.yml

nano app.yml

metadata:

  name: app-nginx-deployment

  servers: dmz

spec:

  replicas: 2

kubectl diff -f app.yml

# Clean up

kubectl get all

kubectl delete deployment.apps/app-nginx-deployment

kubectl delete service/app-nginx-service

#Namespaces and Context

kubectl get namespaces

kubectl get all –all-namespaces

kubectl config get-contexts

Leave a Reply