Saturday 22 July 2023

Mastering Docker Minified Systems: A Step-by-Step Guide with Real Use Cases

Introduction

Docker is a powerful platform for developing, shipping, and running applications. Minified Docker systems are optimized for size and efficiency, making them ideal for production environments where resources are at a premium.

Step 1: Understanding Docker Basics

Before diving into minified systems, ensure you have a solid understanding of Docker concepts like images, containers, volumes, and networks.

Key Commands:

docker pull [image_name] # Download an image from Docker Hub
docker run -d --name [container_name] [image_name] # Run a container in detached mode

Step 2: Creating a Minified Dockerfile

A minified Dockerfile contains only the essential layers needed to run your application.

Example Dockerfile:

FROM alpine:latest
RUN apk add --no-cache python3 py3-pip
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python3", "app.py"]

Step 3: Building and Running Your Minified Container

Build your image with the Docker build command, tagging it appropriately.

Build Command:

docker build -t my-minified-app .

Step 4: Optimizing Your Image

Use multi-stage builds to reduce size and remove unnecessary build dependencies.

Multi-Stage Dockerfile:

# Build stage
FROM python:3.8-slim as builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# Final stage
FROM python:3.8-alpine
COPY --from=builder /root/.local /root/.local
COPY . .
CMD ["python", "./app.py"]

Step 5: Managing Data and State

For stateful applications, use volumes to persist data.

Volume Command:

docker volume create my_volume
docker run -d -v my_volume:/data my-minified-app

Step 6: Networking and Communication

Link containers and enable communication between them using Docker networks.

Network Commands:

docker network create my_network
docker run -d --net=my_network my-minified-app

Step 7: Deploying to Production

Deploy your containerized application using orchestration tools like Docker Swarm or Kubernetes.

Step 8: Monitoring and Maintenance

Monitor your containers and systems using tools like Docker stats, cAdvisor, or Prometheus.

Conclusion

Mastering Docker minified systems involves understanding Docker fundamentals, optimizing Dockerfiles, managing data, and deploying efficiently.

Further Learning

Remember, practice makes perfect. Start small, iterate, and gradually incorporate these practices into larger projects.

OBs:

Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. 


With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

Certainly! Here’s an extensive guide titled “Mastering Docker Minified Systems: A Step-by-Step Guide with Real Use Cases.” ]


This guide provides a foundational understanding of working with minified Docker systems. For more in-depth learning, refer to the provided links and continue exploring real-world use cases. Happy Dockering!

Thursday 6 April 2023

What would happen if a non-technological person found himself in the world of high technology?

If a non-technological person found themselves in a world of high technology, they would likely experience a significant culture shock. 

The rapid pace of technological advancements in the modern world could be overwhelming to someone who is not accustomed to it. They may find it difficult to keep up with the latest technologies and the ever-evolving digital landscape.

In some cases, the non-technological person may feel intimidated or even frightened by the advanced technology around them. They may struggle to understand the terminology and concepts used in the tech industry, which can make it challenging to communicate with others and to participate in the tech-driven economy.

On the other hand, if the person is willing to learn and adapt, they may find that the high-tech world offers many opportunities for growth and advancement. 

They could learn new skills and technologies that could help them succeed in their career or personal life.

Ultimately, whether a non-technological person thrives or struggles in a high-tech world depends on their openness to learning and their willingness to adapt to new technologies and ways of thinking.

PS I love you. And i asked the Ask AI app to write this for me. 

Get it for free --> https://get-askai.app

Wednesday 23 March 2022

Terraform Availability Zone on Azure Deployment. Documentation and Good Examples Missing..



While learning Terraform some time back, I wanted to leverage Availability Zones in Azure. I was specifically looking at Virtual Machine Scale Sets.  https://www.terraform.io/docs/providers/azurerm/r/virtual_machine_scale_set.html 

Looking at the documentation Terraform has, I noticed there is no good example on using zones. So, I tried a few things to see what was really needed for that field. While doing some research, I noticed there are many people in the same situation. No good examples. I figured I'd create this post to help anyone else. And, of course, it's a good reminder for me too if I forget the syntax on how I did this.

Here's a very simple Terraform file. I just created a new folder then a new file called zones.tf. Here's the contents:

variable "location" {
description = "The location where resources will be created"
default = "centralus"
type = string
}

locals {
regions_with_availability_zones = ["centralus","eastus2","eastus","westus"]
zones = contains(local.regions_with_availability_zones, var.location) ? list("1","2","3") : null
}

output "zones" {
value = local.zones
}


The variable 'location' is allowed to be changed from outside the script. But, I used 'locals' for variables I didn't want to be changed from outside. I hard coded a list of Azure regions that have availability zones. Right now it's just a list of regions in the United States. Of course, this is easily modifiable to add other regions.

The 'zones' local variable uses the contains function to see if the specified region is in that array. If so, then the value is a list of strings. Else it's null. This is important. The zones field in Azure resources required either a list of strings or null. An empty list didn't work for me.

As it is right now, you can run the Terraform Apply command and you should see some output. Changing the value of the location variable to something not in the list and you may not see output at all simply because the value is null.

Now, looking at a partial example from the Terraform documentation:

resource "azurerm_virtual_machine_scale_set" "example" { name = "mytestscaleset-1" location = var.location resource_group_name = "${azurerm_resource_group.example.name}" upgrade_policy_mode = "Manual" zones = local.zones

Now the zones field can be used safely when the value is either a list of strings or null. After I ran the complete Terraform script for VM Scale Set, I went to the Azure Portal to verify it worked.

I also changed the specified region to one that I know does not use Availability Zones, South Central US.

This proved to me that I can use a region with and without availability zones in the same Terraform script.

For a list of Azure regions with Availability Zones, see:
https://docs.microsoft.com/en-us/azure/availability-zones/az-overview

Tuesday 12 November 2019

Changing Perpectives into DevSecOPs - Playing around with ParrotOS


For quite sometime, I have refrain myself to keep this blog updated. The last time I did published something was around March this year (2019). Uhmm, I guess I've being a bit lazy I'd say ..

Lolo 😀 ..

Joke apart - today, I am starting a series of blog post for around stuff, I am currently working on..

And this is post is around ParrotOS ..

Due to the nature of this post, I'll presume the reader is familiar with ParrotOS - if not the please have read more about ParrotOS .. As I will not explain it here.

So - Today I did quick refreshment into the ParrotOS VM instance I have installed on VMware Workstation *[https://www.vmware.com/products/workstation-pro.html ]. I haven't used if for quite a while so, it was a bit rustier, therefore I need to updated it.

Whoever the ParrotOS update command was failing with error:

code: [
Temporary failure resolving ‘deb.parrot.sh”

Fig - 01












- As per the screenshot shows, I was unable to connect into Update ParrotOS or connect into the web, as the DNS was not resolving.

Fig. 02










- Neither ping commands worked.

--
After some search into Google here is how I did resolved this..









- By updating the DNS record I was able to then Connect into the internet .. Also you can check the following file:
 ==> $ cat /etc/resolv.conf

*Optional*  - I would advice you to add temporarily
 ==> $ echo >> "nameserver 1.1.1.1" /etc/resolv.conf

It started work afterwards ..
























As also was by then able to update the OS;































As still working.. Hope this helps whoever struggles to connect your VM or main machine into the internet.

===> $ sudo anosurf dns


Till next post  :-) 

Friday 29 March 2019

What is Kubernetes? Container orchestration explained


Docker containers have reshaped the way people think about developing, deploying, and maintaining software. Drawing on the native isolation capabilities of modern operating systems, containers support VM-like separation of concerns, but with far less overhead and far greater flexibility of deployment than hypervisor-based virtual machines.


Containers are so lightweight and flexible, they have given rise to new application architectures. The new approach is to package the different services that constitute an application into separate containers, and to deploy those containers across a cluster of physical or virtual machines. This gives rise to the need for container orchestration—a tool that automates the deployment, management, scaling, networking, and availability of container-based applications.


Enter Kubernetes. This open source project spun out of Google automates the process of deploying and managing multi-container applications at scale. While Kubernetes works mainly with Docker, it can also work with any container system that conforms to the Open Container Initiative (OCI) standards for container image formats and runtimes. And because Kubernetes is open source, with relatively few restrictions on how it can be used, it can be used freely by anyone who wants to run containers, most anywhere they want to run them.

How do I force "git pull" to overwrite local files?

 There might be situations where you want to discard your local changes and synchronise your working directory with the latest version from ...