Docker Tutorial: Difference between revisions
No edit summary |
|||
Line 114: | Line 114: | ||
Here's my goto recipe when creating a container from scratch. | Here's my goto recipe when creating a container from scratch. | ||
<syntaxhighlight lang=Bash style="border: | <syntaxhighlight lang=Bash style="border:1px dashed black"> | ||
# Load up apt caches | # Load up apt caches | ||
apt update | apt update | ||
Line 124: | Line 124: | ||
You can also setup SSH for network access. | You can also setup SSH for network access. | ||
<syntaxhighlight lang=bash style="border: | <syntaxhighlight lang=bash style="border:1px dashed black"> | ||
# Install ssh server and sudo for your new user | # Install ssh server and sudo for your new user | ||
apt install sudo openssh-server | apt install sudo openssh-server | ||
Line 152: | Line 152: | ||
Alternatively: | Alternatively: | ||
<syntaxhighlight lang=bash style="border:1px dashed black"> | |||
<syntaxhighlight lang=bash> | |||
# Option 2: detach from the shell | # Option 2: detach from the shell | ||
./long_running_script.sh | ./long_running_script.sh | ||
# Now press ctrl+p ctrl+q to detach | # Now press ctrl+p ctrl+q to detach | ||
</syntaxhighlight> | |||
Now attach to your container by running: | |||
<syntaxhighlight lang=bash> | |||
# Reattach to the container | |||
docker attach mycontainer | |||
</syntaxhighlight> | |||
=== Save a Container Snapshot === | |||
==== New Image ==== | |||
You can create a new image from '''the current state of a container''': | |||
<syntaxhighlight lang=bash> | |||
# Save an image based on a container | |||
docker commit -a "Michael Gruner <michael.gruner@ridgerun.com>" -m "Example" mycontainer myimage:mytag | |||
</syntaxhighlight> | |||
You can create a new image from '''another image''': | |||
<syntaxhighlight lang=bash> | |||
# Create an alias | |||
docker tag myimage:mytag newimage:newtag | |||
</syntaxhighlight> | |||
==== Image Utils ==== | |||
Here are some common utils to interact with images. | |||
<syntaxhighlight lang=bash> | |||
# List existing images | |||
docker images | |||
# List existing images | |||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:docker]][[Category:tutorial]] | [[Category:docker]][[Category:tutorial]] |
Revision as of 19:36, 7 April 2020
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