Docker Tutorial

From RidgeRun Developer Wiki

Presentation

<pdf page="0" height="455">File:Rr training sesssions docker.pdf</pdf>

Commands Quick Reference

Install

Stable Version

On Debian-based systems Docker may be installed via Apt (taken from the official documentation):

# Uninstall old versions
sudo apt remove docker docker-engine docker.io containerd runc

# Install dependencies
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# Install GPG Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Add Docker PPA
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# Finally install
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

To run as non-root user:

# Create the docker group
sudo groupadd docker

# Add yourself to the group
sudo usermod -aG docker $USER

# To avoid re-logging
newgrp docker

# Test proper installation
docker ps

Other supported OS:

Running as Non-Root (no sudo)

Create Containers

Basic Creation

These are my go-to recipes for daily container creation:

# Basic container creation
docker create -ti --name mycontainer ubuntu:18.04

# Share dir: /home/mgruner (host) in /host (container)
docker create -ti -v /home/mgruner/:/host ubuntu:18.04

# Share file: /home/mgruner/file.txt (host) in /host.txt (container)
docker create -ti -v /home/mgruner/file.txt:/host.txt ubuntu:18.04

# Create a persistent volume for future use
docker create -ti -v myvolume:/host ubuntu:18.04

# Additional useful options
# -m Memory limit
# -c CPU percentage
# --restart Restart policy
# --rm Remove container after usage
# -e Environment variable
docker create -ti -m 1G -c 1.5 --restart unless-stopped --rm -e MYENV=myenv ubuntu:18.04

Container Information

Here's some commands on how to query info about containers

# List existing containers (started)
docker ps

# List existing containers (all)
docker ps -a

# Get container info (IP address, for example)
docker inspect mycontainer

Use Containers

Basic Usage

Very basic container usage:

# Start the container
docker start mycontainer

# Open a shell in the container
docker exec -ti mycontainer bash

# Stop the container
docker stop mycontainer

Common Initial Setups

Here's my goto recipe when creating a container from scratch.

# Load up apt caches
apt update

# Install common packages
apt install git build-essential autoconf Libtool autotools emacs vi

You can also setup SSH for network access.

# Install ssh server and sudo for your new user
apt install sudo openssh-server

# Create a new user (to avoid using root to access)
adduser ridgerun

# Give it root access
adduser ridgerun sudo

# Manually start ssh server (every time container is started)
service ssh start

# Exit the container
exit

Running Long Processes

Sometimes you need to keep a long running process on the container in a remote server, and disconnect from the server and go to sleep. Here's how to run a command and disconnect from the container without stopping the session.

# Option 1: detach at creation time
docker exec -d -ti mycontainer /long_running_script.sh

Alternatively:

In the container

# Option 2: detach from the shell
./long_running_script.sh

# Now press ctrl+p ctrl+q to detach