Docker Tutorial
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:
# Option 2: detach from the shell ./long_running_script.sh # Now press ctrl+p ctrl+q to detach
Now attach to your container by running:
# Reattach to the container docker attach mycontainer
Save a Container Snapshot
New Image
You can create a new image from the current state of a container:
# Save an image based on a container docker commit -a "Michael Gruner <michael.gruner@ridgerun.com>" -m "Example" mycontainer myimage:mytag
You can create a new image from another image:
# Create an alias docker tag myimage:mytag newimage:newtag
Image Utils
Here are some common utils to interact with images.
# List existing images docker images # List existing images