Docker

  • DevOps,  Docker

    Docker cheatsheet

    Table of Contents

    Generic

    CommandDescription
    docker exec -ti CONTAINER_ID command_to_executeRuns, interactive mode, a command over a container already running (e.g. starts the shell, /bin/sh)
    docker rmi IMAGE_NAMEDeletes the image (all existing containers based on this image must have been stopped and deleted upfront)
    docker rm CONTAINER_IDDeletes the container
    docker stop CONTAINER_IDStops the container
    docker inspect CONTAINER_IDLists all attributes of container with id CONTAINER_ID
    Generic docker commands

    Networking

    CommandDescription
    docker network listLists all configured networks
    docker inspect NETWORK_IDDisplays all attributes of network with id NETWORK_ID
    docker run 
    –name alpine-2 
    –network=none alpine
    Runs a new container with name = alpine-2 and attachs it to network “none”, using image name = alpine
    docker network create 
    –driver bridge 
    –subnet 182.18.0.1/24 
    –gateway 182.18.0.1 
    wp-mysql-network
    Creates a new network with type = bridge, subnet 182.18.0.1/24 and gateway 182.18.0.1. Network name will be wp-mysql-network
    docker run 
    -d 
    -e MYSQL_ROOT_PASSWORD=db_pass123 
    –name mysql-db 
    –network wp-mysql-network mysql:5.6
    Runs a new container (detached mode) assigning an environment variable MYSQL_ROOT_PASSWORD=db_pass123 and container name = mysql-db. The container will be attached to the network with name wp-mysql-network. Image used to run the container: mysql:5.6
    docker run –network=wp-mysql-network 
    -e DB_Host=mysql-db -e DB_Password=db_pass123 
    -p 38080:8080 
    –name webapp 
    –link mysql-db:mysql-db 
    -d 
    kodekloud/simple-webapp-mysql
    Runs a new container from image kodekloud/simple-webapp-mysql and with name webapp.Container gets attached to network with name wp-mysql-network 2 environment variables are defined Internal (container) network port 8080 is exposed to port 38080 (host) The container gets linked to container with name mysql-db Runs in detached mode
    Docker networking most common commands

    Storage Management

    CommandDescription
    docker run -v /opt/data:/var/lib/mysql 
    -d –name mysql-db
    -e MYSQL_ROOT_PASSWORD=db_pass123 mysql
    Runs a new container in detached mode and with name mysql-dbMaps the container directory /var/lib/mysql over the host directory /opt/data (bind-mounting) Sets an environment variable Uses the image with name mysql alternative using –mount option (rather than -v)
    docker run –mount type=bind,source=/opt/data,target=/var/lib/mysql mysql
    docker volume create data_volumeCreates a new persisted volume named as data_volume (will be a new folder at /var/lib/docker/volumes into host file system) and runs a new container mapping the persisted volume to /var/lib/mysql
    docker run -v data_volume:/var/lib/mysql mysql
    Docker storage management useful commands

    Docker image build

    Docker file sample:

    FROM Ubuntu	Each statement is a layer with its space usage
    RUN apt-get update && apt-get -y install python
    RUN pip install flask flask-mysql
    COPY . /opt/source/code
    ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run

    Command to be issues in order to create an image:

    docker build Dockerfile -t username/app-name

    Docker registry management

    CommandDescription
    docker run -d -p 5000:5000 –name registry registry:2Creates a new local registry
    docker image tag my-image localhost:5000/my-imageTagging an image so that it gets stored on the local registry
    docker push localhost:5000/my-imagePushing an image to the local registry
    docker pull localhost:5000/my-imagePulling an image from the local registry
    Docker registry management useful commands

    Log management

    CommandDescription
    docker log -f CONTAINER_IDPrints out logs from CONTAINER_ID (-f = follow)
    Docker logs management

    Info & Tips

    Docker engine

    Docker is made up of 3 components:

    • Docker daemon
    • REST API
    • Docker CLI

    When you install docker on a linux host, all 3 components are deployed.

    Docker CLI can also be installed as single component and then used to run docker commands on a remote host with REST API and Docker daemon.

    To run docker commands on a remote host:

    docker -H=ip_of_remote_docker_engine:2375 run nginx

    Docker cgroups

    To limit the % of CPU that can be assigned to a container (.5 = cannot use more than 50% of host CPU):

    docker run --cpu=.5 ubuntu

    To limit the amount of memory that can be allocated from a container:

    docker run --memory=100m ubuntu