Docker Overview
Docker
The word "Docker" refers to several thing.
● The IT software "Docker” is containerization technology.
● The open source Docker community works to improve these technologies to
benefit all users—freely.
● The company, Docker Inc., builds on the work of the Docker community,
makes it more secure, and shares those advancements back to the greater
community.
Docker
https://www.redhat.com/es/topics/containers/what-is-docker
Containers
Containers
https://www.redhat.com/es/topics/containers
What is Docker?
● Docker is a platform designed to make it easier to create, deploy and run
applications by using containers.
● Docker provides the ability to package and run an application in an isolated
environment called a container.
● The isolation and security allow you to run many containers simultaneously
on a given host
● Containers allow a developer to package up an application with all of the
parts it needs, such as libraries and other dependencies and ship it all out as
one package.
What is Docker?
Docker works with something called “Linux containers”, these are a set of technologies that
together form (forman) a container (Docker), this set of technologies are called:
● Namespaces: Permite a la aplicación que corre en un contenedor de Docker tener
una vista de los recursos del sistema operativo.
● Cgroups: Permite limitar y medir los recursos que se encuentran disponibles en el
sistema operativo.
● Chroot: Permite tener en el contenedor una vista de un sistema “falso” para el mismo,
es decir, crea su propio entorno de ejecución con su propio root y home.
Thanks to the container, the developer can rest assured (puede estar seguro) that the
application will run on any other Linux machine regardless (sin importar) of any customized
settings that machine might have that could differ from the machine used for writing and
testing the code.
Containers, or otherwise known as (virtualización a nivel de sistema operativo)
operating-system-level virtualization , are a lightweight (ligero) approach to virtualization that
only provides the (minimo necesario) bare minimum that an application requires to run
https://opensource.com/resources/what-docker
https://docs.docker.com/engine/docker-overview/
Containers & Virtual Machines
Containers & Virtual Machines
A container runs natively on Linux and shares the kernel of the host machine with
other containers. It runs a discrete process, taking no more memory than any other
executable, making it lightweight.
By contrast, a virtual machine (VM) runs a full-blown “guest” operating system with
virtual access to host resources through a hypervisor. In general, VMs incur a lot of
overhead beyond what is being consumed by your application logic.
Una hipervisor (hypervisor) o monitor de máquina virtual (virtual machine monitor) es
una plataforma que permite aplicar diversas técnicas de control de virtualización para
utilizar, al mismo tiempo, diferentes sistemas operativos en una misma computadora
https://docs.docker.com/get-started/
Docker Engine
Docker Engine
Docker is a Client - Server Application (un cliente realiza peticiones a otro programa, el
servidor, quien le da respuesta)
A server runs one or more server programs, which share their resources with clients.
Clients request content or service from a server.
- Docker CLI - cliente (command line interface, main way to interact with Docker)
- Rest API (API is the means of communication between client and docker
server)
- Docker Daemon - Server (presta el servicio de docker)
When writing docker in a terminal we are communicating through the API to docker daemon
The daemon creates and manages Docker objects, such as images, containers, networks, and
volumes
Docker Image
● Docker image is a template with instructions for creating containers.
● It is a package that includes everything needed to run an application
(the code, libraries, environment variables and configuration files).
● The official Docker Images are stored in Docker Hub (https://hub.docker.com/)
● Docker can build images automatically by reading the instructions from a
Dockerfile
● The layers of the image are created through a file called Dockerfile.
Docker Image
Docker Hub is a public registry that anyone can use, and Docker is configured to look for
images on Docker Hub by default.
The number of layers that can contain an Image is n-layers.
https://docs.docker.com/engine/docker-overview/
https://docs.docker.com/get-started/
Dockerfile
● Dockerfile use a simple syntax for defining the steps needed to create the
image and run it.
● Each instruction in a Dockerfile creates a layer in the image.
● When you change the Dockerfile and rebuild the image, only those layers
which have changed are rebuilt.
● The instructions are not case-sensitive
# OS base
FROM centOS
# comment
INSTRUCTION arguments
# OS base
from centOS
Dockerfile
The convention is to be UPPERCASE to distinguish them from arguments more easily
https://docs.docker.com/engine/reference/builder/
Dockerfile - container Image
Base Image
FROM centos:7
RUN yum -y install httpd Server HTTP Apache RO
installation LAYERS
CMD
["apachectl","-DFOREGROUND"]
Dockerfile Running Apache as
Foreground
Container Creation
“Cool_gates” RW
$ docker run apache-centos:apache-cmd
Container LAYER
Dockerfile - container
CMD : Start the service in foreground, if the cmd process dies the container dies
Apache HTTPD is an HTTP server daemon produced by the Apache Foundation. It is a piece
of software that listens for network requests (which are expressed using the Hypertext
Transfer Protocol) and responds to them.
https://geeks.ms/etomas/2019/03/05/curiosidad-esos-nombres-de-contenedores-en-docker/
https://github.com/docker/engine/blob/master/pkg/namesgenerator/names-generator.go
https://docs.docker.com/get-started/
Pull Images
To download an image you use the following command:
docker pull <image>:<version>
If the <version> is omitted Docker use the default latest tag.
Tag is a label that says the image version <version>.
docker pull centos
docker pull centos:6.7
10
Pull Images
Images have tags that are using to versioning the images.
How Can I know what is the name of the image that I need?
- Google : docker centos
Create Images
To create Docker images you only need to type:
docker build -t <image_name>:<tag> <dockerfile_path>
➤ ‘-t ’ Name and optionally a tag in the ‘image_name:tag’ format.
➤ dockerfile_path by default is ‘CURRENT_PATH/Dockerfile’.
If you want to specify a different dockerfile anywhere use
‘-f <PATH/Dockerfilename>’.
docker build -t centos:2 -f Dockerfile.debug .
11
Create Images
FROM centos:7
RUN yum -y install httpd
CMD ["apachectl","-DFOREGROUND"]
$ docker build -t apache-centos .
Layers’ Image
See the layouts of an image
docker history -H <image_name>:<tag> --no-trunc
$ docker history -H apache-centos:1.0
$ docker history -H apache-centos:1.0 --no-trunc
12
Layers’ Image
Use of the <history> command:
$ docker history apache-centos:1.0
IMAGE CREATED CREATED BY LAYERS
a5344bf00ac6 19 seconds ago /bin/sh -c #(nop) CMD ["apachectl" "-DFOREG… CMD
9e688069c3d1 5 weeks ago /bin/sh -c yum install httpd -y Apache
67fa590cfc1c 8 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"]
<missing> 8 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… CentOS
<missing> 8 weeks ago /bin/sh -c #(nop) ADD file:4e7247c06de9ad117…
13
Create Containers
Docker container creation:
docker run -d --name <container_name> -p
<local_port>:<container_port> <docker_image>
➤ ‘-d’ Run container in background and returns the
container_id.
➤ ‘--name’ Optional parameter. If it is not specified Docker will
create a random container_name .
➤ ‘-p’ Optional parameter. Expose ports
14
Create Containers
docker run --name apache-centos -p 81:80 apache-centos
localhost:81
Isolating Docker Containers
Output Of: docker ps -a
15
Create Containers
To understand the isolation we are going to do an example:
docker run alpine ls -l
docker run alpine /bin/sh
docker run alpine echo “hello world!”
docker run hello-world
Even though each docker container run command used the same alpine image, each
execution was a separate, isolated container.
Each container has a separate filesystem and runs in a different namespace; by default a
container has no way of interacting with other containers, even those from the same image
Docker users take advantage of this feature not only for security, but to test the effects of
making application changes.
Isolation allows users to quickly create separate, isolated test copies of an application or
service and have them run side-by-side (lado a lado) without interfering with one another.
https://training.play-with-docker.com/ops-s1-hello/ (terminal online)
Docker Container Instances
16
Docker Container Instances
Example of how to the isolation works. If I create a file ‘hello.txt’ this file is only
belongs to the container where I run the instruction.
docker run -it alpine /bin/sh
# echo “hello world” > hello.txt
# ls ; exit
https://training.play-with-docker.com/ops-s1-hello/
Docker Exec
17
1.
Basic
Command for
Docker
Basic Commands ▸ Download CentOS image
● docker pull
docker pull centos
● docker images
● docker rmi
▸ Download CentOS image version 6.7
docker pull centos:6.7
▸ List the images downloaded
docker images
▸ List only the CentOS images
docker images | grep centos
▸ Remove the CentOS:6.7 image
docker rmi <Image ID> | <Repository:Tag>
docker rmi centos:6.7
docker rmi 9f1de3c6ad53
19
Basic Commands ▸ Dockerfile
● docker build
● docker build --help FROM centos
RUN yum install httpd -y
CMD apachectl -DFOREGROUND
▸ Create image
$ docker build -t apache-centos .
Successfully tagged apache-centos:latest
▸ Create image with a different tag
$ docker build -t apache-centos:1.0 .
▸ List only the CentOS images
$ docker images | grep apache-centos
20
Basic Commands ▸ Create container
● docker run
$ docker run --name apache-centos -p
● docker run --help 81:80 apache-centos
● docker ps
▸ List containers
$ docker ps (running)
$ docker ps -a (all)
21
EXAMPLES OF
USE THE
DOCKERFILE
INSTRUCTIONS
Dockerfile Instructions
FROM: Specify the OS or Image base
RUN: Instructions that can be executed in a terminal such as add users,
create directories, install programs, etc. )
COPY/ADD: Copy files from localhost to the image
ARG: Known as ‘build-time variables’, available until image creation
ENV: Define environment variables
WORKDIR: Path from where the RUN instructions are executed (cd /path/)
EXPOSE: Expose ports of the container
LABEL: Give Metadata
USER: Change the user that execute the sentences
VOLUMEN: Share directories between Docker and our machine
CMD: Process in FOREGROUND that keeps life the container
23
Dockerfile is a file where you define the steps to configure an image.
Basic Commands COPY <local_folder> <destination_path>
●
●
FROM
RUN
▸ Relative path
● COPY
● CMD FROM centos
RUN yum install httpd -y
COPY sb-admin /var/www/html
CMD apachectl -DFOREGROUND
docker build -t apache-centos .
docker run -d -p 81:80 apache-centos
localhost:81
▸ Absolute path (windows error)
FROM centos
RUN yum install httpd -y
To avoid this error, the ideal is COPY /C/docker/apache-php/sb-admin /var/www/html
CMD apachectl -DFOREGROUND
to have the Dockerfile, folders
and files that you want to docker build -t apache-centos .
copy in the same directory COPY failed: stat
/var/lib/docker/tmp/docker-builder107384051/c/docker
/apache-php/sb-admin: no such file or directory
24
If you use COPY /home/yourname/file1, Docker build interprets it as ${docker build working
directory}/home/yourname/file1, if no file with same name here, no file or directory error is
thrown.
URL to download examples from bootstrap: https://startbootstrap.com/themes/
Basic Commands ENV <variable> <value>
● FROM
● RUN FROM centos
● COPY RUN yum install httpd -y
● ENV COPY sb-admin /var/www/html
● CMD ENV foo “hello world!”
RUN echo “$foo” > /var/www/html/test.html
CMD apachectl -DFOREGROUND
docker build -t apache-centos .
docker run -d -p 81:80 apache-centos
http://localhost:81/test.html
25
http://www.sigt.net/general/el-significado-de-foo-bar-y-foobar.html
Basic Commands WORKDIR <path> (cd /path)
● FROM
● RUN FROM centos
● COPY RUN yum install httpd -y
● ENV WORKDIR /var/www/
● WORKDIR COPY sb-admin html/
● CMD ENV foo “hello world!”
RUN echo “$foo” > html/test.html
CMD apachectl -DFOREGROUND
docker build -t apache-centos .
docker run -d -p 81:80 apache-centos
http://localhost:81/test.html
26
Basic Commands EXPOSE <port>
● FROM
● RUN FROM centos
● COPY RUN yum install httpd -y
● EXPOSE COPY sb-admin /var/www/html/
● CMD EXPOSE 8080
CMD apachectl -DFOREGROUND
docker build -t apache-centos .
docker run -d -p 81:80 apache-centos
27
Basic Commands CMD <command>
run.sh
● FROM
● RUN #!/bin/bash
● COPY echo "Iniciando container..."
● CMD apachectl -DFOREGROUND
FROM centos
RUN yum install httpd -y
COPY sb-admin /var/www/html/
COPY run.sh /run.sh
CMD sh /run.sh
docker build -t apache-centos .
docker run -d -p 81:80 apache-centos
http://localhost:81
28
Build Context
Is the set of files at a specified location PATH or URL.
● The PATH is a directory on your local filesystem. The URL is a Git repository
location.
docker build -t apache-centos .
Sending build context to Docker daemon 20 MB
● To increase the performance and avoid to send unused files to Docker
daemon use a .dockerignore file.
● Warning: Do not use your root directory ‘/’ as the PATH as it causes the
build to transfer the entire contents of your hard drive to the Docker
daemon.
29
Build Context
When you issue a docker build command, the current working directory is called the build
context
https://docs.docker.com/engine/reference/builder/
.dockerignore File
● It file allows to ignore some files or folders.
● This file is hidden ( ‘.’ prefix)
.dockerignore (Ignore zip file)
startbootstrap-sb-admin-2-gh-pages.zip
30
.dockerignore File
Inadvertently including files that are not necessary for building an image results in a
larger build context and larger image size. This can increase the time to build the
image, time to pull and push it, and the container runtime size
Best practices for writing Dockerfiles
● Decouple applications: Each container should have only one concern.
Decoupling applications into multiple containers makes it easier to scale
horizontally and reuse containers.
● Exclude with .dockerignore: Keep the build context clean.
● Minimize the number of layers: Use the (&&) or (\) command.
○ Only the instructions RUN, COPY, ADD create layers. Other
instructions create temporary intermediate images, and do not
increase the size of the build
31
Best practices for writing Dockerfiles
1. (Decouple applications) One service by image, i.e. do not have a Apache and
MySQL installed in the same image because this was difficult to maintain
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Multi-line sentences
RUN echo "1" >> /usr/share/nginx/html/test.txt
RUN echo "2" >> /usr/share/nginx/html/test.txt Create 3 different
RUN echo "3" >> /usr/share/nginx/html/test.txt layers
Using ‘&&’ operator
RUN echo "1" >> /usr/share/nginx/html/test.txt && echo "2"
>> /usr/share/nginx/html/test.txt && echo "3" >>
/usr/share/nginx/html/test.txt
Using ‘&&’ and ‘\’ operator
RUN echo "1" >> /usr/share/nginx/html/test.txt && \
echo "2" >> /usr/share/nginx/html/test.txt && \ Create 1 layer
echo "3" >> /usr/share/nginx/html/test.txt
32
Pipe Dockerfile Through stdin
Docker allow us to build images by piping through stdin.
● Creation of an image using ‘|’ and stdin:
$ echo -e ‘FROM busybox\nRUN echo ”hello world”’ | docker build -
$ docker build -<<EOF
FROM busybox
RUN echo “hello world”
EOF
$ docker build -t myimage:latest -<<EOF
FROM busybox
RUN echo “hello world”
EOF
The hyphen (-) takes the position of the PATH, and instructs Docker to read the
build context (which only contains a Dockerfile) from stdin instead of a directory
33
Pipe Dockerfile Through stdin
● standard input (stdin) / standard output (stdout) / standard error (stderr)
● A pipe (|) is a form of redirection (transfer of standard output to some other
destination)
BusyBox originally aimed to put a complete bootable system on a single floppy disk that
would serve both as a rescue disk and as an installer for the Debian distribution (Wikipedia)
echo -e ‘FROM busybox\nRUN echo ”hello world”’ | docker build -t
busybox-stdin -
Pipe Dockerfile Through stdin
● Using (-) to avoid path error when copying file
$ touch somefile.txt
# Build an image using the current directory as context, and
# a Dockerfile passed through stdin
$ docker build -t myimage:latest -f- . <<EOF
FROM busybox
COPY somefile.txt .
RUN cat /somefile.txt
EOF
34
Dangling Images
It is a image that doesn’t have name <repository> nor tag <none> but they take up
space.
This happen when you create an image with the same name and tag but with
different content.
# List only dangling images
$ docker images -f dangling=true
# Show only the IMAGE_ID for dangling images
$ docker images -f dangling=true -q
# Remove only dangling images
$ docker images -f dangling=true -q | xargs docker rmi
35
Multi-stage-build
● Allows to use several FROM within the same Dockerfile to create multiples
images with dependencies.
● Each FROM instruction can use a different base image, you can copy artifacts
from one stage to another, leaving behind you don’t want in the final image.
36
Multi-stage-build
https://docs.docker.com/develop/develop-images/multistage-build/
Multi-stage-build
Create a jar from Maven image and use this jar in a Java image
# Create a folder
mkdir multi-stage && cd multi-stage
# Download a Maven project (google: maven sample app)
$ git clone https://github.com/jenkins-docs/simple-java-maven-app.git
# Dockerfile
FROM maven:3.5-alpine as builder
COPY simple-java-maven-app/ /app
RUN cd /app && mvn package
docker build -t java .
37
Multi-stage-build
Docker images tags with alpine the make reference tha using Alpine Linux distribution and
the reason is because this distribution is minimalist based on Busybox and Musl-libc, what
makes that the final size is much less than an image with Ubuntu or Debian.
docker build --no-cache -t java .
- 'mvn package' build the initial jar in the path
(/app/target/my-app-1.0-SNAPSHOT.jar)
Multi-stage-build
● Add a second FROM command
# Dockerfile
FROM maven:3.5-alpine as builder
COPY simple-java-maven-app/ /app
RUN cd /app && mvn package
FROM openjdk:8-alpine
COPY --from=builder /app/target/my-app-1.0-SNAPSHOT.jar /opt/app.jar
CMD java -jar /opt/app.jar
docker build -t my-app .
# Consult the size of the previous images
$ docker images | grep -e “java” -e “my-app” -e “openjdk”
38
Multi-stage-build
El peso de la imagen resultante va dado por el tamaño del ultimo FROM definido en el
Dockerfile.
Docker asume que las sentencias previas al FROM son sentencias temporales que no se
requieren en su totalidad en la imagen resultante.
Multi-stage-build
● Create a container and see the logs
# Container creation
$ docker run -d --name c-my-app my-app
# See the logs
$ docker logs c-my-app
The simple-java-maven-app app only print a “Hello World” and the process
Finish. For this reason the container not appears in the running containers.
39
Containers
40
Docker Container
● A container is an additional layer that contains an execution in real-time of an
image.
● The container will execute CentOS that has installed Apache and it will run
the Apache service.
docker run -d --name <container_name> <image>:<version>
‘-d’ Run container in background
‘--name’ Assign a name to the container
41
. son una instancia de ejecución de una imagen
. son temporales
. capa de RW (lectura y escritura)
. se pueden crear varios contenedores a partir de una misma imagen
. cuando no se especifica un nombre al contenedor, docker asigna un nombre por
defecto
. si la imagen a usar no es encontrada, docker procederá a descargarla
docker run hello-world
Test de docker
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -d
mysql
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
Ports mapping
● With docker ps, we can see the mapping ports
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=12345678 mysql
docker ps
As in the previous container we don’t expose a port, we can not be
able to do a request to the 3306 port. To solve this we need to use
the ‘-p’ option.
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 mysql
docker ps
localhost:3306
42
this environment, which is isolated from the rest of your system, so you need to map ports
to the outside world
Shell’s container
● When we create a container we can enter to the shell terminal of that
container.
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=12345678 -p 3306:3306 mysql
docker ps
docker exec -it <container_name> bash
‘-i’ interactive (Keep STDIN open even if not attached)
‘-t’ terminal
43
execute an interactive bash shell on the container.
Docker exec
● Enter to the terminal container.
docker exec -it mysql bash
The input device is not a TTY. Add ‘winpty’ at the beginning
root@53e0e38db15c:/# whoami
root
root@53e0e38db15c:/# hostname
53e0e38db15c Inside the terminal
root@53e0e38db15c:/# exit container
44
What is a TTY? It's a terminal interface that supports color output, escape
sequences, moving the cursor around, etc,
Docker exec
● Enter to the terminal with a specific user.
docker exec -u root -it mysql bash
root@53e0e38db15c:/# whoami
root
root@53e0e38db15c:/# hostname
53e0e38db15c
root@53e0e38db15c:/# exit
● To know the user list in Linux see the file /etc/passwd
45
MySQL Database with
Docker
Pull Image
Check DB
status
Create
Container Use the DB
46
MySQL Database with Docker
1. docker run -d --name mysql -e “MYSQL_ROOT_PASSWORD=12345678”
mysql:5.7
2. docker logs -f mysql
-----------------------------
3. docker run --rm -ti centos bash
# yum install mysql -y
# mysql (ERROR 2002)
# mysql -u root -p12345678 -> (ERROR 2002) “xq?, en la
creación del contenedor docker no se especificó prt”
5. docker inspect mysql
- Check the Networks, IPAddress (172.17.0.2)
6. En el contenedor centOS
# mysql -u root -h 172.17.0.2 -p12345678
MYSQL > show databases;
Host
IP 172.17.0.2
mysql-db centos
- 3306 (MySQL) - MySQL (client)
show databases;
Information_schema, mysql,
performance_schema, sys
172.17.0.2:3306
127.0.0.1:3306
47
Host (127.0.0.1)
- 3305 (MySQL-DB)
IP 172.17.0.2
mysql-db centos
- 3306 (MySQL) - MySQL (client)
172.17.0.2:3306
127.0.0.1:3305
48
1. docker run -d --name mysql-db -p 3305:3306 -e
“MYSQL_ROOT_PASSWORD=root” -e “MYSQL_DATABASE=docker-db” -e
MYSQL_USER=docker-user" -e "MYSQL_PASSWORD=12345678" mysql:5.7
2. docker logs -f mysql-db
3. $ mysql -u root -p12345678 -h 127.0.0.1 --port 3305 (First root user)
MYSQL > show databases;
$ mysql -u docker-user -p12345678 -h 127.0.0.1 --port 3305 (First
root user)
MYSQL > show databases;
Commit PostgreSQL
Create
Database Image
Container
Generate
an image
Create a Tagging the
database image
49
● docker run -d --name postgres -e "POSTGRES_PASSWORD=12345678" -e
"POSTGRES_USER=docker" -e "POSTGRES_DB=docker-db" -p 5432:5432
postgres
● docker exec -ti postgres bash
# psql -d docker-db -U docker // ingresar a la db
# create table MCT(connection_type varchar(10) CONSTRAINT x101
PRIMARY KEY, minimum_connection_time numeric(4));
# \dt
# insert into MCT values ('DOM_DOM', 20);
# select * from MCT;
# exit;
● docker ps -a
● docker diff <container ID> # inspect all the changes we made
● docker commit <container ID>
● docker images
# REPOSITORY TAG IMAGE ID CREATED
SIZE
# <none> <none> ee60ba054526 7
seconds ago 93MB
● docker image tag <image id> <repository>
Creating Images
Jenkins (https://hub.docker.com/r/jenkins/jenkins/)
docker run -d -p 7070:8080 --name jenkins jenkins
winpty docker exec -ti jenkins bash
jenkins@9013d6d9b2a1:/$ cat /var/jenkins_home/secrets/initialAdminPassword
50
You can start and stop the container and all the data will remain inside the container,
but, if you need to update the image you will probably to lost the data because you
need to create a new container pointing to the newest image. To solve this problem
you are able to use volumenes.
Any change that you made inside the image you need to recreate the container
Docker users managements
In the Dockerfile you can specify the creation and use of users
FROM centos
ENV BAR foo
RUN useradd daniel
USER daniel
docker build -t centos:users .
docker run -d -ti --name centos-user centos:users
docker exec -ti centos-user bash
Nota: If the -ti
# whoami parameter is not
# echo $BAR passed as parameter,
the container will die
51
Docker users managements
Create a user but not leave it as main user
FROM centos
RUN useradd daniel
docker build -t centos:users-2 -f Dockerfile.user .
docker run -d -ti --name centos-user-v2 centos:users-2
docker exec -ti centos-user-v2 bash
# whoami
Log in with the user created in the Dockerfile (daniel)
docker exec -ti -u daniel centos-user-v2 bash
# whoami
52
Limit Container Resources
Create a user but not leave it as main user
53
# List images # Show layers of an image
docker images docker history -H <image>:<tag>
--no-trunc
# Filter images based on conditions
docker images -f dangling=true # Build a images using a different
Dockerfile
# Delete images docker build -t <image_name> -f
docker rmi <image id> </PATH/Dockerfile_name> .
docker rmi <repository>:<tag>
If you have 2 o more image with different
tags and you don’t put the tag in the moment
of delete the image it will delete the
latest version
# Delete several images in the same line
docker rmi <image_id1> .. <image_idn>
# Delete all images
docker image prune -a -f
docker image prune --help
docker images -q | xargs docker rmi
54
# Create a container # Delete container
docker run -d <image> docker rm <container_name>
# Assign a name to the container # Delete all containers
docker run -d --name <cont_name> <image> docker rm -fv $(docker ps -aq)
# List containers running # Port mapping
docker ps docker run -d -p <local_p>:<docker_p>
<image>
# List all containers
# Create env variable
docker ps -a docker run -d -e “<var=value>” <image>
# Show the last container created # Statistic resources used
docker ps -l docker stats <container_name>
# Start container
docker start <container_name> | <container_id>
# Stop container
docker stop <container_name> | <container_id>
# Restart container
docker restart <container_name>|<container_id>
55
# Create a container and database # Commit container
docker run -d --name postgres -e docker commit <container id>
"POSTGRES_PASSWORD=12345678" -e
"POSTGRES_USER=docker" -e # List images
"POSTGRES_DB=docker-db" -p 5432:5432 docker images
postgres
# Tagging the image
# Enter to the container docker image tag <image id> <repository
docker exec -ti postgres bash name>
# psql -d docker-db -U docker
# create table MCT(connection_type varchar(10)
CONSTRAINT x101 PRIMARY KEY,
minimum_connection_time numeric(4));
# \dt
# insert into MCT values ('DOM_DOM', 20);
# select * from MCT;
# exit;
# List all containers
docker ps -a
# Inspect the changes
docker diff <container id>
56
SlidesCarnival icons are editable shapes.
This means that you can:
● Resize them without losing quality.
● Change line color, width and style.
Isn’t that nice? :)
Examples:
57
https://training.play-with-docker.com/ops-stage1/