Skip to content

Latest commit

 

History

History

docker

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Docker

Table of contents

  • Commands
  • Dockerfile
  • Multi Container Environments
  • Network
  • Docker compose
  • Reference

Commands

# -> Check docker is OK:
sudo docker run hello-world
# -> General commands:

docker --help                           # H...
docker run --help

docker ps                               # list containers
docker ps -a

docker images                           # list images
docker run -it IMAGE-REPO-NAME          # run image

docker stop CONTAINER-NAME              # ...
docker kill CONTAINER-NAME              # ...
docker container stop NAME
docker container rm NAME

docker search IMAGE-NAME
docker search elasticsearch

docker container ls                     # List containers
docker container logs CONTAINER-NAME    # View logs

docker network ls                       # List networks
docker network inspect bridge           # Show network information
# -> Pull image and run:

# Get image from Hub Docker. 
docker pull IMAGE-NAME
docker pull busybox

# Get image of specific version.
docker pull ubuntu:18.04

# Run...
docker run -it busybox # Interactive tty
docker run busybox echo "IHS"

# Run custom:
#   -d = detach terminal
#   -P = publish all exposed ports to random ports
#   --name = new name to container
docker run -d -P --name static-site prakhar1989/static-site
# ...
# Show ports:
docker port static-site
# ...
# Custom ports:
docker run -p 8888:80 prakhar1989/static-site
# -> Delete containers:

# Lista all.
docker ps -a

# Delete by ID.
docker rm CONTAINER_ID
docker rm 4fa446aa2f3f ce88c1f3aec8

# Delete all.
#   -q = get IDs
#   -f = filter output
docker rm $(docker ps -a -q -f status=exited)

Dockerfile

Syntax:

# Comment
INSTRUCTION arguments
# Comment
RUN echo 'IHS s2'

Example:

git clone https://github.com/prakhar1989/docker-curriculum.git
cd docker-curriculum/flask-app

Filename: Dockerfile

# image base
FROM python:3.8

# set a directory for the app
WORKDIR /usr/src/app

# copy all the files to the container
COPY . .

# install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# define the port number the container should expose
EXPOSE 5000

# Run app / run command
CMD ["python", "./app.py"]

Create image from Dockerfile:

# Make image
docker build -t melchisedech333/catnip .

# List images
docker images

# Run image
docker run -p 8181:5000 melchisedech333/catnip

# ... acess http:https://localhost:8181

Publish on Docker Hub:

docker login

Output:

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: abcd
Password: 
WARNING! Your password will be stored unencrypted in /home/user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Publish:

docker push melchisedech333/catnip

Repos: https://hub.docker.com/u/USERNAME-HERE

Repos: https://hub.docker.com/u/melchisedech333


Multi Container Environments

# Project repo
git clone https://github.com/prakhar1989/FoodTrucks
cd FoodTrucks

# Install elasticsearch image
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.2

# Run elasticsearch
#   --name = new name
#   -e "discovery.type... = environment variable, run as a single-node.

# Run normal
# docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

# Run in network
docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

# Test elasticsearch
curl 0.0.0.0:9200
# Output:
# {
#   "name" : "EN3bcr6",
#   "cluster_name" : "docker-cluster",
#   "cluster_uuid" : "_MjrjI9GSXefvxrSHfcMrg",
#   "version" : {
#     "number" : "6.3.2",
#     "build_flavor" : "default",
#     "build_type" : "tar",
#     "build_hash" : "053779d",
#     "build_date" : "2018-07-20T05:20:23.451332Z",
#     "build_snapshot" : false,
#     "lucene_version" : "7.3.1",
#     "minimum_wire_compatibility_version" : "5.6.0",
#     "minimum_index_compatibility_version" : "5.0.0"
#   },
#   "tagline" : "You Know, for Search"
# }

# Create docker image.
docker build -t melchisedech333/foodtrucks-web .

# Test elasticseach connection:
docker run -it --rm --network foodtrucks-net melchisedech333/foodtrucks-web bash

curl es:9200 # elastic response output...

# Run app...
docker run -P --rm melchisedech333/foodtrucks-web

# In network
docker run -d --net foodtrucks-net -p 5000:5000 --name foodtrucks-web melchisedech333/foodtrucks-web

Script:
#!/bin/bash

# build the flask container
docker build -t yourusername/foodtrucks-web .

# create the network
docker network create foodtrucks-net

# start the ES container
docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

# start the flask app container
docker run -d --net foodtrucks-net -p 5000:5000 --name foodtrucks-web yourusername/foodtrucks-web

Network

List networks:

docket network ls

Create new network:

docker network create NAME
docker network create foodtrucks-net

... Run a container:

# --net foodtrucks-net
docker run -d --name es --net foodtrucks-net -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.3.2

Check network:

docker network inspect foodtrucks-net

Docker compose

File: docker-compose.yml

version: "3"

# Define the services (es, web)
services:
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.3.2
    container_name: es
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
    volumes:
      - esdata1:/usr/share/elasticsearch/data
  web:
    image: melchisedech333/foodtrucks-web
    command: python3 app.py
    depends_on:
      - es
    ports:
      - 5000:5000
    volumes:
      - ./flask-app:/opt/flask-app
volumes:
    esdata1:
      driver: local

Commands:

docker-compose up       # start
docker-compose up -d
docker-compose ps       # list
docker-compose down -v  # stop

Reference