Docker Get Started - gpawade/gpawade.github.io GitHub Wiki

This week I've started exploring Docker. I've collected this notes from Docker site.

Introduction

  • Unlike hypervisor virtualization, where one or more independent machines run virtually on physical hardware via an intermediation layer
  • containers instead run in user space on top of an operating system’s kernel.
  • container virtualization is often called operating system-level vertualization.
  • Docker is open-source engine that automates the deployment of applications into containers.
  • It is designed to provide a lightweightand fast environment in which to run your code as well as an efficient workflow to get that code from your laptop to your test environment and then into production.

Docker Components

  • The docker client-server
  • Docker container - is a striped-to-basics version of linux operating system. Container is running & execution aspect of Docker.
  • Docker Image - Images are building block of Docker world. You launch container from image. Images are building or packing aspect of Docker.

Why should we care about Docker?

  • Local developers can build, run, and share Docker containers.
  • Running stand-alone services and applications consistently across multiple environments.
  • Building a multi-user Platform-as-a-Service (PAAS) infrastructure.
  • Providing lightweight stand-alone sandbox environments for developing, testing, and teaching technologies

Technical Component

  • Linux kernel namespaces, which provide isolation for filesystems, processes,and networks.
  • Filesystem isolation: each container is its own root filesystem.
  • Process isolation: each container runs in its own process environment.
  • Network isolation: separate virtual interfaces and IP addressing between containers.
  • Resource isolation and grouping: resources like CPU and memory are allocated individually to each Docker container using the cgroups, or control groups, kernel feature.

Installation

We can see the docker installation process at Docker site.

We can confirm that docker is installed and runnning with following command

$ sudo docker info

Docker User Interface Application

  • Shipyard
  • DockerUI
  • Kitematic

Getting Started

Running First Container

The docker run command is used for launch any container in Docker.

Syntax

docker run <image_name> [<command>]

NOTE - if image isn't there, then docker pull it from hub.

# Example
$ docker run -i -t ubuntu /bin/bash

WHERE, -i flag interactive container -t flag creates a pseudo-TTY that attach stdin & stdout To detach the tty without existing the shell, use sequence Ctrl-p + Ctrl-q

We can find full list of the available docker run flag with command docker help run.

If everything went well, we can see below shell terminal.

root@@57496d97bc0e:/# 

Docker has added a host entry for our container with ip address. We can verify it with following command.

root@@57496d97bc0e:/# cat /etc/hosts
Container Naming

Docker will generate a random name for each container we create. If we want to specify the name, then we can use --name flag in docker run command.

$ docker run --name "my_container" -i -t ubuntu /bin/bash
Container Start/Attach/STOP
# start previously created container my_container
$ docker start my_container

# stop the container
$ docker stop my_container

# attaching to existing container
$ docker attach my_container
Damonized Container

We can also creaet longer-running containers. Damonized container don't have interactive session and are ideal for running applications & services.

Docker Cli - Command

# Will display running container
$ docker ps

# will display running & stopped container
$ docker ps -a

# Fetches the logs of a container
$ docker logs my_container

# Delete the container
$ docker rm container-name  --- or container-id

Docker command cheatsheet

$ docker build -t friendlyname .  # Create image using this directory's Dockerfile

$ docker run -p 4000:80 friendlyname  # Run "friendlyname" mapping port 4000 to 80
$ docker run -d -p 4000:80 friendlyname         # Same thing, but in detached mode

$ docker container ls                                # List all running containers
$ docker container ls -a             # List all containers, even those not running
$ docker container stop <hash>           # Gracefully stop the specified container
$ docker container kill <hash>         # Force shutdown of the specified container
$ docker container rm <hash>        # Remove specified container from this machine
$ docker container rm $(docker container ls -a -q)         # Remove all containers

$ docker image ls -a                             # List all images on this machine
$ docker image rm <image id>            # Remove specified image from this machine
$ docker image rm $(docker image ls -a -q)   # Remove all images from this machine

$ docker login             # Log in this CLI session using your Docker credentials
$ docker tag <image> username/repository:tag  # Tag <image> for upload to registry
$ docker push username/repository:tag            # Upload tagged image to registry

$ docker run username/repository:tag                   # Run image from a registry
$ docker stack ls                                            # List stacks or apps
$ docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
$ docker service ls                 # List running services associated with an app
$ docker service ps <service>                  # List tasks associated with an app
$ docker inspect <task or container>                   # Inspect task or container
$ docker container ls -q                                      # List container IDs
$ docker stack rm <appname>                             # Tear down an application

Docker swarm

$ docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
$ docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
$ docker-machine env myvm1                # View basic information about your node
$ docker-machine ssh myvm1 "docker node ls"         # List the nodes in your swarm
$ docker-machine ssh myvm1 "docker node inspect <node ID>"        # Inspect a node
$ docker-machine ssh myvm1 "docker swarm join-token -q worker"   # View join token
$ docker-machine ssh myvm1   # Open an SSH session with the VM; type "exit" to end
$ docker-machine ssh myvm2 "docker swarm leave"  # Make the worker leave the swarm
$ docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
$ docker-machine start myvm1            # Start a VM that is currently not running
$ docker-machine stop $(docker-machine ls -q)               # Stop all running VMs
$ docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
$ docker-machine scp docker-compose.yml myvm1:~     # Copy file to node's home dir
$ docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # Deploy an app

Set Docker in CMD

Docker default set in docker command console. If we want to set the same in normal command console.

$ docker-machine env                    # display the command to setup the environment
⚠️ **GitHub.com Fallback** ⚠️