Docker

Container Technologies

   Introduction - Docker

  • release of Docker as Open Source Project (2013)
  • slogan: “Build, Ship, Run”
  • ease of packaging and deploying applications
  • focused on usability
  • trigger for DevOps movement

Success Stories

Success Stories

  • 200+ Dockerized Apps
  • Increased infrastructure efficiency by reducing the number of VMs.
  • Increased agility and achieved rapid response to evolving customer needs.
  • Achieved more application portability over multiple environments.  

    Saved time, money and resources.

Success Stories

Docker != Container

user-friendly "Framework" / "Ecosystem" for handling Containers!

  • Docker Client:

for interaction with Docker Daemon
shares a UNIX socket with the daemon

  • Docker Daemon:

connects to the same UNIX socket as the client
responsible for starting, stopping and monitoring containers

  • Docker Hub:

public registry for Docker images​

Today? Not only Containers

Technical Stuff

  • A software container is very similar to a shipping container  ​

 

  • Simply package a piece of software along with everything that is needed to make it work.

 

  • Software containers: isolated working environments for an application.
    With necessary:
    • dependencies
    • libraries
    • binaries
    • configurations

Technical Stuff

  • Containers depend on an image layer system (reduces duplication, enables reusability & security) --> docker hub registry 

 

  • A Container is a Linux process, or many processes, which are running isolated from other processes on the system, using the chroot system call and some Linux kernel features such as cgroups and namespaces.

 

But why not simply use a VM? 

VM vs. Container

 

VMs

  • Virtualize a complete operating system (OS)
  • Virtualize the kernel of the host
  • Heavyweight
  • Suffer from a small overhead as the Machine instructions are translated from Guest to Host OS
  • Take a few mins to boot up
  • Take much more storage as the whole OS kernel and its associated programs have to be installed and run

Containers

  • Virtualize the required file system
  • Use/share the kernel of the host
  • Lightweight
  • Provide near-native performance as compared to the underlying Host OS
  • Can be booted up in a few secs as compared to VMs (testing & CI/CD)
  • Take a lower amount of storage as the base OS is shared

Technical Stuff

VM

Container

Docker Workflow/Lifecycle

FROM ubuntu:xenial

RUN apt-get update

RUN apt-get install -y nginx php7.0-fpm supervisor && \
    rm -rf /var/lib/apt/lists/*

...

docker build -t mysuperimage  .

mysuperimage:v2

mysuperimage:v2

   Web-Dev & Docker?

Why should Devs know containers?

 

 

 

   Web-Dev & Docker?

Demo

 

source: https://insights.stackoverflow.com/survey/2019#key-results

   Web-Dev & Docker?

  1. Build, Ship, Run principle
     
  2. No more "but this works on my machine" fails
     
  3. Test new software really quick
     
  4. Sandbox your software --> keep your laptop clean (Spotify in container etc)  
     
  5. Transition into cloud & CI/CD pipeline ready software!

--> State of the art! --> $​

Example 1

Docker hello-world and run a ubuntu based container 

 

Live Demo

 

Recorded example

Example 1

Live Demo Prisma Setup

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.31
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        databases:
          default:
            connector: mysql
            host: mysql
            user: root
            password: prisma
            rawAccess: true
            port: 3306
            migrations: true
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: prisma
    volumes:
      - mysql:/var/lib/mysql
volumes:
  mysql:

Requirements:

- Docker installed

- NPM installed

- CLI :)

To-Do:

$ npm install -g prisma
$ mkdir hello-world && cd hello-world
$ prisma init (create new database -> MySQL -> don't generate)


$ docker-compose up -d
$
prisma deploy

 

Example 2

React Setup

Live Demo of: 

https://www.peterbe.com/plog/how-to-create-react-app-with-docker​

Try it yourself

Made with Slides.com