SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
0
INSTALACION Y USO BASICO
DOCKER
MOISÉS ELÍAS ARAYA
2020
Uso básico Docker | Moisés E. Araya
[1]
Tabla de contenidos
Instalación y uso básico de Docker. ............................................................................................ 2
Introducción. .................................................................................................................... 2
¿Qué es un contenedor ..................................................................................................... 2
Qué es Docker................................................................................................................... 3
Arquitectura Docker......................................................................................................... 3
Que son los contenedores e imágenes. .................................................................................. 3
Docker Hub. .................................................................................................................. 4
Instalar Docker Linux CentOS................................................................................................. 5
Entorno utilizado. ........................................................................................................... 5
Procedimiento................................................................................................................ 5
Primeros pasos con Docker.................................................................................................... 7
Ejecutar primer contenedor..............................................................................................10
Crear imágenes con Docker File. ........................................................................................14
Mostrar contenido de contenedor (Inspeccionar).....................................................................16
Docker Compose. .............................................................................................................21
Instalación ...................................................................................................................21
Ejemplo Docker Compose con Contenedores Flask y Redis. ........................................................22
Docker Swarm. .................................................................................................................26
Listado de comandos usados.................................................................................................27
Alternativas..................................................................................................................28
Conclusión. ..................................................................................................................28
Referencias ..................................................................................................................28
Uso básico Docker | Moisés E. Araya
[2]
Instalación y uso básico de Docker.
Introducción.
El propósito de este documento es ofrecer una descripción general de la tecnología de contenedores de
Docker, donde se incluyen tareas como instalación, creación de imágenes, despliegue de contenedores,
consulta de información relevante entre otras tareas de carácter introductorio.
¿Qué es un contenedor?
Es una unidad de software ejecutable que encapsula todo lo
necesario para ejecutarse.
Virtualiza a nivel de SO lo que permite aislar procesos y
controlar los recursos asignados a estos procesos.
Son pequeños, portables y rápidos dado que no incluyen un SO
huésped en cada imagen.
Los contenedores son más ligeros que las máquinas virtuales,
se reduce la cantidad de máquinas necesarias para tener un
entorno lo que optimiza uso de espacio y recursos.
Algunos de los beneficios.
• Portables e independientes de plataformas.
• Soporta desarrollos y arquitecturas modernas.
• Despliegues rápidos y reutilizables.
Contenedores versus Máquinas Virtuales.
Comparación de maquinas virtuales y contenedores.
Uso básico Docker | Moisés E. Araya
[3]
• Máquinas Virtuales.
o Servidor, Host OS (Windows Server, Xen Server, VMWare Esxi) , Hypervisor (HyperV, Xen,
VMWare Vcenter), Se ejecutan SO, sobre ellos librerías y binarios y sobre ellos las aplicaciones
o DB.
• Docker.
o Utiliza el mismo Host, el mismo SO, Engine Docker (Las aplicaciones utilizan los mismos
binarios y/o librerías del SO).
De lo anterior desprendemos que, al utilizar contenedores, podemos escalar y realizar despliegues
rápidamente y de manera mas eficiente debido a que un contenedor utiliza muy poco espacio para operar, no
necesita de un hypervisor y dado que existe un mejor uso de recursos.
Qué es Docker.
• Es una herramienta de código abierto que está diseñada para facilitar la creación,
despliegue y ejecución de aplicaciones utilizando contenedores.
• Esta escrita en lenguaje Go, fue lanzada en el año 2013 y es comercializada por la compañía Docker
Inc.
• Posee dos versiones; Community y Enterprise.
• Dispone de un repositorio oficial y centralizado de imágenes que ofrece aplicaciones como un
contendor descargable y que a la vez pueden ser compartidas.
• Docker no virtualiza hardware, sino que el contenedor dispone acceso directo al hardware del host.
Arquitectura Docker.
Docker usa una arquitectura cliente-servidor
• El cliente Docker habla con el demonio Docker quien es el encargado de compilar, distribuir y
ejecutar sus contenedores Docker.
• El demonio Docker (dockerd) escucha las solicitudes de la API de Docker y gestiona los objetos de
Docker como imágenes, contenedores, redes y volúmenes.
• Un registro de Docker es donde se almacenan las imágenes de Docker. Docker Hub es un registro
público que cualquier puede utilizar.
Que son los contenedores e imágenes.
Contenedores.
• Contiene lo necesario para ejecutar nuestras imágenes.
• Basado en una o más imágenes.
• Lo que se ejecuta.
Uso básico Docker | Moisés E. Araya
[4]
Imágenes.
• Plantilla o archivo de solo lectura que posee código de alguna aplicación preinstalada.
• Son creadas por nosotros y/o lo que se descarga.
• Desde una imagen se pueden crear múltiples contenedores.
• Son basadas en capas y estas son de solo lectura.
Docker Hub.
Docker Hub es el repositorio principal de Docker (https://hub.docker.com/) actúa como comunidad donde se
ofrecen imágenes y estas se pueden buscar, crear y subir.
Las imágenes descargadas pueden ser públicas y privadas y estas se dividen en oficiales y no oficiales
• Imágenes oficiales: son del lado del fabricante o marcas.
• Imágenes no oficiales: son los que sube la comunidad.
Vista del home de Docker Hub.
Vista de imagen oficial de Nginx.
Uso básico Docker | Moisés E. Araya
[5]
Instalar Docker Linux CentOS.
Entorno utilizado.
• Windows 10 Home, Core i5, 12 GB RAM.
• MV CentOs V8 creada en VM Ware Workstation Player 12.
Procedimiento.
Instalar librería yum-utils.
[root@centos8 ~]# yum install -y yum-utils
Instalado:
yum-utils-4.0.12-3.el8.noarch libzstd-1.4.2-2.el8.x86_64
¡Listo!
Descargar e instalar repositorio oficial.
[root@centos8 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2424 100 2424 0 0 6105 0 --:--:-- --:--:-- --:--:-- 6105
[root@centos8 ~]# yum makecache
CentOS-8 - AppStream
2.2 kB/s | 4.3 kB 00:01
CentOS-8 - Base
5.0 kB/s | 3.9 kB 00:00
CentOS-8 - Extras
1.0 kB/s | 1.5 kB 00:01
Docker CE Stable - x86_64
90 kB/s | 25 kB 00:00
Caché de metadatos creada.
Instalar última versión de Docker.
[root@centos8 ~]# dnf -y install docker-ce --nobest
Última comprobación de caducidad de metadatos hecha hace 0:00:10, el lun 31 ago 2020 21:10:13 -04.
Dependencias resueltas.
Problema: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers
can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering
- package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering
=================================================================================================================
=========================================
Paquete Arquitectura Versión
Repositorio Ta
=================================================================================================================
=========================================
Instalando:
docker-ce x86_64 3:18.09.1-3.el7
docker-ce-stable 19
Instalando dependencias:
containerd.io x86_64 1.2.0-3.el7
docker-ce-stable 22
docker-ce-cli x86_64 1:19.03.12-3.el7
docker-ce-stable 38
libcgroup x86_64 0.41-19.el8
BaseOS 70
Uso básico Docker | Moisés E. Araya
[6]
Descartando paquetes con conflictos en las dependencias:
docker-ce x86_64 3:19.03.12-3.el7
docker-ce-stable 24
Resumen de la transacción
=================================================================================================================
=========================================
Instalar 4 Paquetes
Descartar 1 Paquete
Tamaño total de la descarga: 79 M
Tamaño instalado: 331 M
Instalado:
containerd.io-1.2.0-3.el7.x86_64 docker-ce-3:18.09.1-3.el7.x86_64 docker-ce-cli-1:19.03.12-
3.el7.x86_64 libcgroup-0.41-19.el8.x86_64
Omitido:
docker-ce-3:19.03.12-3.el7.x86_64
¡Listo!
Habilitar e iniciar el servicio.
[root@centos8 ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service →
/usr/lib/systemd/system/docker.service.
[root@centos8 docker]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2020-09-25 00:07:14 -03; 3 weeks 0 days ago
Docs: https://docs.docker.com
Main PID: 1081 (dockerd)
Tasks: 12
Memory: 129.5M
CGroup: /system.slice/docker.service
└─1081 /usr/bin/dockerd -H fd://
sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.776685792-03:00" level=info msg="Docker
daemon" commit=4c52b90 graphdriver(s)=overlay>
sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.777032912-03:00" level=info msg="Daemon has
completed initialization"
sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.916089677-03:00" level=info msg="API listen
on /var/run/docker.sock"
sep 25 00:07:14 centos8.lab systemd[1]: Started Docker Application Container Engine.
Crear usuario y agregar a grupo docker.
[root@centos8 ~]# useradd -ms /bin/bash dockerusr
[root@centos8 ~]# passwd dockerusr
Cambiando la contraseña del usuario dockerusr.
Nueva contraseña:
CONTRASEÑA INCORRECTA: La contraseña tiene menos de 8 caracteres
Vuelva a escribir la nueva contraseña:
passwd: todos los tokens de autenticación se actualizaron exitosamente.
[root@centos8 ~]# usermod -aG docker dockerusr
[root@centos8 ~]# su – dockerusr
Uso básico Docker | Moisés E. Araya
[7]
Primeros pasos con Docker.
Validar instalación.
[dockerusr@centos8 ~]$ docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.39
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.1
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 4c52b90
Built: Wed Jan 9 19:06:30 2019
OS/Arch: linux/amd64
Experimental: false
[dockerusr@centos8 ~]$
Docker versión muestra las versiones de cliente y de servidor.
Otro modo de realizar lo mismo es con el comando docker -v
[dockerusr@centos8 ~]$ docker -v
Docker version 19.03.12, build 48a66213fe
Docker info muestra información como cantidad de contenedores y su estado, driver de almacenamiento,
directorio donde se aloja la información del sistema, versión del kernel del S.O. entre otros datos
relacionados con el servidor.
[dockerusr@centos8 ~]# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.09.1
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 4.18.0-193.14.2.el8_2.x86_64
Operating System: CentOS Linux 8 (Core)
Uso básico Docker | Moisés E. Araya
[8]
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 4.92GiB
Name: centos8.lab
ID: LSCU:MDBQ:PEYB:OE52:CFKF:ZTUD:7IIR:QXBK:NUXB:W2G7:KS2L:CXAS
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
El comando docker a secas muestra todas las opciones disponibles de comandos, en ella se muestran los
comandos administradores y los comandos normales, también es posible ejecutar el comando docker –help
para obtener esta información.
[dockerusr@centos8 ~]# docker
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/root/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and
default context set with "docker context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/root/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
Buscar imágenes que contengan una palabra.
[dockerusr@centos8 ~]$ docker search httpd
NAME DESCRIPTION STARS
OFFICIAL AUTOMATED
httpd The Apache HTTP Server Project 3181 [OK]
centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 36
centos/httpd 32
[OK]
arm32v7/httpd The Apache HTTP Server Project 9
polinux/httpd-php Apache with PHP in Docker (Supervisor, CentO… 4
[OK]
salim1983hoop/httpd24 Dockerfile running apache config 2
[OK]
clearlinux/httpd httpd HyperText Transfer Protocol (HTTP) ser… 1
Uso básico Docker | Moisés E. Araya
[9]
publici/httpd httpd:latest 1
[OK]
solsson/httpd-openidc mod_auth_openidc on official httpd image, ve… 1
[OK]
jonathanheilmann/httpd-alpine-rewrite httpd:alpine with enabled mod_rewrite 1
[OK]
lead4good/httpd-fpm httpd server which connects via fcgi proxy h… 1
[OK]
dariko/httpd-rproxy-ldap Apache httpd reverse proxy with LDAP authent… 1
[OK]
dockerpinata/httpd 0
Descargar imagen.
[dockerusr@centos8 ~]$ docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
d121f8d1c412: Pull complete
9cd35c2006cf: Pull complete
b6b9dec6e0f8: Pull complete
fc3f9b55fcc2: Pull complete
802357647f64: Pull complete
Digest: sha256:5ce7c20e45b407607f30b8f8ba435671c2ff80440d12645527be670eb8ce1961
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest
# Cuando no se incluye algún tag a la imagen, se usa el tag por defecto que es el tag: latest.
Mostrar imágenes descargadas.
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 417af7dc28bc 8 days ago 138MB
Explicación de la salida del comando:
• TAG: Es la versión, en este caso latest que indica una versión estable
• IMAGE ID: Identificador.
• CREATED: Fecha creación en repositorio docker hub.
• SIZE: Tamaño de la imagen.
Buscar una imagen con un tag en particular.
[dockerusr@centos8 ~]$ docker search httpd:2.4
NAME DESCRIPTION STARS OFFICIAL
AUTOMATED
eeacms/scp-server Restricted SSH server. This image is meant t… 2
[OK]
162c01go1/httpd The Apache HTTP Server Project Clone From ht… 1
rhkl/httpd-fpm httpd:2.4-alpine with fpm for gitlab ci 0
szabogyula/shibboleth-sp httpd:2.4 based shibboleth-sp 0
[OK]
caraka/httpd-py-cgi Implements python3 cgi in the official httpd… 0
Uso básico Docker | Moisés E. Araya
[10]
Ejecutar primer contenedor.
Existe una imagen llamada hello-world que sirve para saber si Docker opera correctamente.
[dockerusr@centos8 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
# La imagen no existe en el servidor por lo que el sistema la descarga y ejecuta.
Listar los contenedores en ejecución.
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
No hay contenedores en ejecución debido a que estos tienen un fin especifico, en el caso de la imagen hello-
world, al ejecutarse muestra el mensaje “Hola desde Docker” y se detiene.
Flujo seguido por imagen Hello-World.
Listar los contenedores y su estado.
[dockerusr@centos8 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
4e9429ff69b9 hello-world "/hello" 5 seconds ago Exited (0) 45 seconds ago
loving_minsky
El contenedor se ejecutó hace 45 segundos atrás y su estado es exited o finalizado.
Uso básico Docker | Moisés E. Araya
[11]
Ejecutar comando en imágenes.
[dockerusr@centos8 ~]$ docker run httpd:latest ls
bin
build
cgi-bin
conf
error
htdocs
icons
include
logs
modules
Se muestra la estructura de los directorios existentes en el contenedor httpd.
Crear contenedor interactivo.
[dockerusr@centos8 ~]$ docker run -it httpd:latest bash
root@f41f31de112e:/usr/local/apache2# ls
bin build cgi-bin conf error htdocs icons include logs modules
root@f41f31de112e:/usr/local/apache2# exit
exit
[dockerusr@centos8 ~]$
Los flags -i y -t significan interactivo y terminal respectivamente.
De esta manera se pueden ejecutar comandos dentro del contedor, para salir digitar exit.
Mostrar imágenes descargadas.
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd latest 417af7dc28bc 8 days ago 138MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
Para más información del comando, agregar –help.
[dockerusr@centos8 ~]$ docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
Crear contenedor con nombre, detener e iniciar nuevamente (el nombre puede ser a elección).
[dockerusr@centos8 ~]$ ~]# docker run --name webserver1 httpd:latest
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the
'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the
'ServerName' directive globally to suppress this message
[Thu Sep 24 22:02:20.286647 2020] [mpm_event:notice] [pid 1:tid 139784482096256] AH00489: Apache/2.4.46 (Unix)
configured -- resuming normal operations
[Thu Sep 24 22:02:20.287292 2020] [core:notice] [pid 1:tid 139784482096256] AH00094: Command line: 'httpd -D
FOREGROUND'
Uso básico Docker | Moisés E. Araya
[12]
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
79d0a366e6c2 httpd:latest "httpd-foreground" 28 seconds ago Up 27 seconds 80/tcp
webserver1
[dockerusr@centos8 ~]$ docker stop 79
79
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
[dockerusr@centos8 ~]$ docker start 79
79
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
79d0a366e6c2 httpd:latest "httpd-foreground" 23 minutes ago Up 3 seconds 80/tcp
webserver1
Personalizar contenedores para crear imágenes a partir de otra.
[dockerusr@centos8 ~]$ docker run -it centos:latest /sbin/bash
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process
caused "exec: "/sbin/bash": stat /sbin/bash: no such file or directory": unknown.
ERRO[0000] error waiting for container: context canceled
[root@centos8 ~]# docker run -it centos:latest bash
[root@d73ded603b87 /]# yum install wget
Failed to set locale, defaulting to C.UTF-8
CentOS-8 - AppStream
9.4 MB/s | 5.8 MB 00:00
CentOS-8 - Base
2.1 MB/s | 2.2 MB 00:01
CentOS-8 - Extras
16 kB/s | 8.1 kB 00:00
Dependencies resolved.
=================================================================================================================
=============================================
Package Architecture Version
Repository Size
=================================================================================================================
=============================================
Installing:
wget x86_64 1.19.5-8.el8_1.1
AppStream 735 k
Installing dependencies:
libpsl x86_64 0.20.2-5.el8
BaseOS 61 k
publicsuffix-list-dafsa noarch 20180723-1.el8
BaseOS 56 k
Transaction Summary
=================================================================================================================
=============================================
Install 3 Packages
Total download size: 852 k
Installed size: 3.0 M
Is this ok [y/N]: y
Downloading Packages:
CentOS-8 - Base 204%
[=============================================================================================(1/3): wget-1.19.5-
8.el8_1.1.x86_64.rpm 5.1
MB/s | 735 kB 00:00
(2/3): libpsl-0.20.2-5.el8.x86_64.rpm
237 kB/s | 61 kB 00:00
(3/3): publicsuffix-list-dafsa-20180723-1.el8.noarch.rpm
216 kB/s | 56 kB 00:00
-----------------------------------------------------------------------------------------------------------------
---------------------------------------------
Total
1.4 MB/s | 852 kB 00:00
Uso básico Docker | Moisés E. Araya
[13]
warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/wget-1.19.5-8.el8_1.1.x86_64.rpm: Header V3
RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS-8 - AppStream
1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Is this ok [y/N]: y
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing :
1/1
Installing : publicsuffix-list-dafsa-20180723-1.el8.noarch
1/3
Installing : libpsl-0.20.2-5.el8.x86_64
2/3
Installing : wget-1.19.5-8.el8_1.1.x86_64
3/3
Running scriptlet: wget-1.19.5-8.el8_1.1.x86_64
3/3
Verifying : wget-1.19.5-8.el8_1.1.x86_64
1/3
Verifying : libpsl-0.20.2-5.el8.x86_64
2/3
Verifying : publicsuffix-list-dafsa-20180723-1.el8.noarch
3/3
Installed:
libpsl-0.20.2-5.el8.x86_64 publicsuffix-list-dafsa-20180723-1.el8.noarch
wget-1.19.5-8.el8_1.1.x86_64
Complete!
[root@d73ded603b87 /]# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...
Try `wget --help' for more options.
[root@d73ded603b87 /]# exit
Crear imagen con cambios, crear contenedor y validar utilitario.
[dockerusr@centos8 ~]$ docker commit d73ded603b87 centoswget
sha256:e61f5b9a659bf90bc4acb80ce1a545fc00bbaca24f806dada53218cf1284f508
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centoswget latest e61f5b9a659b 20 seconds ago 247MB
httpd latest 417af7dc28bc 12 days ago 138MB
centos latest 0d120b6ccaa8 6 weeks ago 215MB
alpine latest a24bb4013296 4 months ago 5.57MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
student_02_25150273ed02@cloudshell:~ (qwiklabs-gcp-02-2eea81483979)$ docker run -it centoswget
[root@d48a3e33a0b4 /]# wget www.google.com
--2020-09-28 16:25:34-- http://www.google.com/
Resolving www.google.com (www.google.com)... 172.217.203.103, 172.217.203.104, 172.217.203.106, ...
Connecting to www.google.com (www.google.com)|172.217.203.103|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: 'index.html'
index.html [ <=>
] 11.79K --.-KB/s in 0s
2020-09-28 16:25:34 (88.6 MB/s) - 'index.html' saved [12076]
Uso básico Docker | Moisés E. Araya
[14]
[root@d48a3e33a0b4 /]#
Ver cambios.
[dockerusr@centos8 ~]$ docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
centoswget latest e61f5b9a659b 6 minutes ago 247MB
centos latest 0d120b6ccaa8 6 weeks ago 215MB
Crear imágenes con Docker File.
Docker file es un documento de texto que contiene todos los comandos que el usuario puede invocar a las
líneas de comando para crear una imagen.
Sintaxis.
• FROM: Define una imagen base.
• MAINTAINER: Referencia al creador.
• RUN: Ejecuta comandos en la imagen antes de ser creada.
• ADD/COPY: Permite agregar o copiar archivos desde el equipo local a la imagen.
• EXPOSE: Permite exponer por defecto un puerto para el contenedor.
• CMD: Ejecuta una acción por defecto al crear el contenedor.
o CMD [“/usr/sbin/apache2”,”-D”, “FOREGROUND”]
Crear archivo dockerfile con el siguiente contenido:
FROM centos:7
RUN yum update && yum install httpd httpd-tools -y
EXPOSE 80
CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
Ejecutar el comando docker build.
[dockerusr@centos8 ~]$ docker build -t centosweb .
Sending build context to Docker daemon 58.72MB
Step 1/4 : FROM centos:7
---> 7e6257c9f8d8
Step 2/4 : RUN yum update && yum install httpd httpd-tools -y
---> Running in fc42bafe2ba1
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirror.orbyta.com
* extras: mirror.orbyta.com
* updates: mirror.orbyta.com
No packages marked for update
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: mirror.orbyta.com
* extras: mirror.orbyta.com
* updates: mirror.orbyta.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed
--> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64
---> Package httpd-tools.x86_64 0:2.4.6-93.el7.centos will be installed
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-5.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Uso básico Docker | Moisés E. Araya
[15]
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
httpd x86_64 2.4.6-93.el7.centos base 2.7 M
httpd-tools x86_64 2.4.6-93.el7.centos base 92 k
Installing for dependencies:
apr x86_64 1.4.8-5.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
centos-logos noarch 70.0.6-3.el7.centos base 21 M
mailcap noarch 2.1.41-2.el7 base 31 k
Transaction Summary
================================================================================
Install 2 Packages (+4 Dependent packages)
Total download size: 24 M
Installed size: 32 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature,
key ID f4a80eb5: NOKEY
Public key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed
--------------------------------------------------------------------------------
Total 2.1 MB/s | 24 MB 00:11
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Importing GPG key 0xF4A80EB5:
Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@CentOS)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : apr-1.4.8-5.el7.x86_64 1/6
Installing : apr-util-1.5.2-6.el7.x86_64 2/6
Installing : httpd-tools-2.4.6-93.el7.centos.x86_64 3/6
Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6
Installing : mailcap-2.1.41-2.el7.noarch 5/6
Installing : httpd-2.4.6-93.el7.centos.x86_64 6/6
Verifying : mailcap-2.1.41-2.el7.noarch 1/6
Verifying : apr-util-1.5.2-6.el7.x86_64 2/6
Verifying : httpd-2.4.6-93.el7.centos.x86_64 3/6
Verifying : apr-1.4.8-5.el7.x86_64 4/6
Verifying : httpd-tools-2.4.6-93.el7.centos.x86_64 5/6
Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6
Installed:
httpd.x86_64 0:2.4.6-93.el7.centos httpd-tools.x86_64 0:2.4.6-93.el7.centos
Dependency Installed:
apr.x86_64 0:1.4.8-5.el7 apr-util.x86_64 0:1.5.2-6.el7
centos-logos.noarch 0:70.0.6-3.el7.centos mailcap.noarch 0:2.1.41-2.el7
Complete!
Removing intermediate container fc42bafe2ba1
---> 6d9c2959cc68
Step 3/4 : EXPOSE 80
---> Running in 5a1ec0780e47
Removing intermediate container 5a1ec0780e47
---> 13f7e50cd758
Step 4/4 : CMD ["/usr/sbin/httpd","-D","FOREGROUND"]
---> Running in 68d4b9a15812
Removing intermediate container 68d4b9a15812
---> 67abf266424a
Successfully built 67abf266424a
Successfully tagged centosweb:latest
Uso básico Docker | Moisés E. Araya
[16]
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centosweb latest 67abf266424a 3 minutes ago 328MB
Ejecutar contenedor y acceder a URL.
[dockerusr@centos8 ~]$ docker run -d -p 85:80 centosweb
1b2ff0d8077732eb7de4476e0d17026e875d9e23af5e369e7786634daffcc06e
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
1b2ff0d80777 centosweb "/usr/sbin/httpd -D …" 29 seconds ago Up 28 seconds
0.0.0.0:85->80/tcp confident_wilson
Mostrar contenido de contenedor (Inspeccionar).
Docker inspect es una herramienta que permite obtener información detallada sobre los recursos de Docker
como contenedores, imágenes, volúmenes y redes.
La sintaxis básica es docker inspect + opciones + contenedor|imagen
Descargar imagen redis e iniciar contenedor para luego buscar información útil.
[dockerusr@centos8 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2f515ad351a redis "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 6379/tcp admiring_lamarr
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a
[
{
"Id": "c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9",
"Created": "2020-12-21T02:21:03.089221887Z",
"Path": "docker-entrypoint.sh",
"Args": [
"redis-server"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1894,
"ExitCode": 0,
Salida omitida. . .
Consultar contenido especifico.
Obtener ID.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Id
"Id": "c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9",
Uso básico Docker | Moisés E. Araya
[17]
Obtener Estado.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep State --after-context=10
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 1894,
"ExitCode": 0,
"Error": "",
"StartedAt": "2020-12-21T02:21:03.576564961Z",
Obtener Imagen.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Image
"Image": "sha256:ef47f3b6dc11e8f17fb39a6e46ecaf4efd47b3d374e92aeb9f2606896b751251",
"Image": "redis",
Obtener Configuración de red.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep NetworkSettings --after-context=10
"NetworkSettings": {
"Bridge": "",
"SandboxID": "ae7edcddaaf5163a49b1f74b1503907df1c5df48c947e25d036ff413f536237b",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"6379/tcp": null
},
"SandboxKey": "/var/run/docker/netns/ae7edcddaaf5",
"SecondaryIPAddresses": null,
Obtener ruta de logs.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep LogPath --after-context=10
"LogPath":
"/var/lib/docker/containers/c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9/c2f515ad351ae0da8810
63456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9-json.log",
"Name": "/admiring_lamarr",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
Obtener nombre de contenedor.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10
"Name": "/admiring_lamarr",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
Uso básico Docker | Moisés E. Araya
[18]
Obtener volúmenes asociados.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10
"Name": "/admiring_lamarr",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
Obtener configuración.
[dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10
"Name": "/admiring_lamarr",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "docker-default",
"ExecIDs": null,
"HostConfig": {
"Binds": null,
"ContainerIDFile": "",
La información mostrada anteriormente, es válida y de interés para contenedores, algunos valores para las
imágenes son:
• ID.
• Parent.
• Container.
• ContainerConfig.
• DockerVersion.
• VirtualSize.
Para obtener los valores descritos arriba, se debe seguir la misma sintaxis que la mostrada para los valores de
los contenedores:
[dockerusr@centos8 ~]$ docker inspect redis |grep VirtualSize --after-context=10
"VirtualSize": 104252176,
El resultado es en bytes por lo que el tamaño de la imagen es de 104 MB, este resultado también se puede
obtener con el comando docker ps -s.
Mostrar logs de contenedor.
[dockerusr@centos8 ~]$ docker logs c2f515ad351a
1:C 21 Dec 2020 02:21:03.589 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 21 Dec 2020 02:21:03.589 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 21 Dec 2020 02:21:03.589 # Warning: no config file specified, using the default config. In order to specify a
config file use redis-server /path/to/redis.conf
1:M 21 Dec 2020 02:21:03.591 * Running mode=standalone, port=6379.
1:M 21 Dec 2020 02:21:03.591 # Server initialized
1:M 21 Dec 2020 02:21:03.591 * Ready to accept connections
Uso básico Docker | Moisés E. Araya
[19]
Borrar contenedores e imágenes.
Primero se deben borrar todos los contenedores y luego las imágenes.
Listar todos los contenedores y luego borrarlos.
[dockerusr@centos8 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
d175a1be29ea centosweb "/usr/sbin/httpd -D …" 3 hours ago Exited (0) 20 seconds ago
practical_dhawan
f140b8115a6d ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago
keen_perlman
99eb7bfd2047 ubuntu:latest "apt install -y apac…" 3 hours ago Exited (100) 3 hours ago
inspiring_wescoff
da869fe50305 ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago
upbeat_germain
faa513b0ff25 ubuntu:latest "bash" 3 hours ago Exited (127) 3 hours ago
admiring_noether
e50f93a8b45a ubuntu:latest "/sbin/bash" 3 hours ago Created
nervous_montalcini
d4fe3f6ba79a ubuntu:latest "apt-get install ope…" 3 hours ago Exited (100) 3 hours ago
jolly_taussig
9c8b602aba1b ubuntu:latest "apt-get update" 3 hours ago Exited (0) 3 hours ago
upbeat_merkle
c2af19c9bf54 ubuntu:latest "apt install -y apac…" 3 hours ago Exited (100) 3 hours ago
blissful_wright
Listar todas las imágenes y luego eliminarlas con el comando docker rmi.
[dockerusr@centos8 ~]$ docker rm $(docker ps -aq)
[dockerusr@centos8 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centosweb latest da16018bd2f3 3 hours ago 328MB
ubuntuupdated latest e4a618c53833 3 hours ago 95.8MB
httpd latest 417af7dc28bc 9 days ago 138MB
centos 7 7e6257c9f8d8 6 weeks ago 203MB
centos latest 0d120b6ccaa8 6 weeks ago 215MB
[dockerusr@centos8 ~]$ docker rmi centosweb ubuntuupdated centos
Untagged: centosweb:latest
Deleted: sha256:da16018bd2f3076eecadf23b3368a1372e406c828df7ba14849d7866b3ee47d8
Deleted: sha256:505bebb6f20f7171e315724fba1bf004f0604a543b1748899e0c71dea1817520
Deleted: sha256:3b7736138232531fc1a2c1af88961abfd0cdd64b8bc396303fdd5d21faae8b21
Deleted: sha256:0e3e0bd6a7c69bcc42276c3f9807d95a9fe51550393b3f391a4ee94aedc35618
Untagged: ubuntuupdated:latest
Deleted: sha256:e4a618c53833b8a438546bdc6e2b941048d85a64ba198a2024eecc6cf658fec2
Deleted: sha256:2e4bc22150688f357d95c6c9172d89fbddeef515050630675a2f49e1a150c2a5
Untagged: centos:latest
Untagged: centos@sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Deleted: sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566
Deleted: sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest bb0eaf4eee00 8 days ago 72.9MB
httpd latest 417af7dc28bc 9 days ago 138MB
centos 7 7e6257c9f8d8 6 weeks ago 203MB
alpine latest a24bb4013296 3 months ago 5.57MB
hello-world latest bf756fb1ae65 8 months ago 13.3kB
Uso básico Docker | Moisés E. Araya
[20]
Otra opción de borrado es utilizando el comando docker system prune -a.
[dockerusr@centos8 ~]$ docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: centosweb:latest
deleted: sha256:e66a088747d2b206d7b8ab2021c8a2dc27bb5bffae0e533c4434e93a674251d4
deleted: sha256:6cf8134ea31cb34b824f693e99f220cff1b37259546e239e3c346963afec94f1
deleted: sha256:962b87f65563fb52bbfa09edeb70ccf6bf500cc64a59c3678be3e97fee715a28
deleted: sha256:c641f415cbaf69ce46131393a65f1cf84ef457cc4126bff10d0bd025032892c2
deleted: sha256:7e6257c9f8d8d4cdff5e155f196d67150b871bbe8c02761026f803a704acb3e9
deleted: sha256:613be09ab3c0860a5216936f412f09927947012f86bfa89b263dfa087a725f81
untagged: alpine:latest
untagged: alpine@sha256:a15790640a6690aa1730c38cf0a440e2aa44aaca9b0e8931a9f2b0d7cc90fd65
deleted: sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
deleted: sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a
untagged: webserver:latest
deleted: sha256:43d2b008104a7814a72092351d1eaddfb7c05a639031504064b8c807bf6c246d
deleted: sha256:571ac175065625e5f8ac4f99bf14f770fbb75d4ca0254cb1e8d0b870b7bd75a2
untagged: centos:latest
untagged: centos@sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71
deleted: sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566
deleted: sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726
Total reclaimed space: 593.9MB
[dockerusr@centos8 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[dockerusr@centos8 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
Uso básico Docker | Moisés E. Araya
[21]
Docker Compose.
Herramienta para crear y ejecutar varios contenedores que necesiten comunicarse entre sí,
esto es útil para entornos de desarrollo y prueba donde tenemos aplicaciones que necesitan
de varios contenedores, esto se logra mediante el uso de archivos YAML donde se deben
definir las configuraciones de las aplicaciones.
Instalación
Descargar, aplicar permisos de ejecución y validar instalación.
[root@centos8 ~]# curl -L https://github.com/docker/compose/releases/download/1.26.0/docker-
compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 651 100 651 0 0 1103 0 --:--:-- --:--:-- --:--:-- 1101
100 11.6M 100 11.6M 0 0 1096k 0 0:00:10 0:00:10 --:--:-- 1278k
[root@centos8 ~]# chmod +x /usr/local/bin/docker-compose
[root@centos8 ~]# su – dockerusr
[dockerusr@centos8 ~]$ docker compose --version
Docker version 19.03.12, build 48a66213fe
Ver los comandos disponibles.
[dockerusr@centos8 ~]$ docker compose --help
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options:
--config string Location of client config files (default "/home/dockerusr/.docker")
-c, --context string Name of the context to use to connect to the daemon (overrides
DOCKER_HOST env var and default context set with "docker
context use")
-D, --debug Enable debug mode
-H, --host list Daemon socket(s) to connect to
-l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default
"info")
--tls Use TLS; implied by --tlsverify
--tlscacert string Trust certs signed only by this CA (default
"/home/dockerusr/.docker/ca.pem")
--tlscert string Path to TLS certificate file (default "/home/dockerusr/.docker/cert.pem")
--tlskey string Path to TLS key file (default "/home/dockerusr/.docker/key.pem")
--tlsverify Use TLS and verify the remote
-v, --version Print version information and quit
Uso básico Docker | Moisés E. Araya
[22]
Ejemplo Docker Compose con Contenedores Flask y Redis.
Introducción.
• Flask es un framework escrito en Python utilizado para crear aplicaciones web con pocas líneas de
código.
• Redis es un motor de base de datos NoSQL del tipo clave-valor utilizada para almacenamiento en
cache.
En ejemplo se crearán dos contenedores; uno para el servicio web basado en Python y Redis que actuará como
backend.
Procedimiento.
Considerar la siguiente estructura de directorios:
├── compose
│ ├── aplicacion
│ │ ├── docker-compose.yml
│ │ └── dockerfile
│ ├── flask_app.py
│ └── requerimientos.txt
Crear archivo flask_app.py con el siguiente contenido:
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
@app.route('/')
def home():
return "What is your price?"
@app.route('/set_price/<int:price>')
def set_price(price):
cache.set("price", price)
return f"Price set to {price}"
@app.route('/get_price')
def get_price():
price = int(cache.get("price"))
return f"The price is {price}."
En ejemplo, redis es el hostname del contenedor redis y el puerto a utilizar será el 6379.
Crear archivo requerimientos.txt con el siguiente contenido:
redis
Flask
gunicorn
Uso básico Docker | Moisés E. Araya
[23]
Crear una carpeta con nombre aplicación y al interior de él, crear archivo dockerfile con el siguiente
contenido:
FROM python:3.6-alpine
WORKDIR /aplicacion
RUN apk add --no-cache --update make
COPY requerimientos.txt requerimientos.txt
RUN pip install -r requerimientos.txt
COPY . /aplicacion
CMD ["gunicorn", "flask_app:app", "--bind", "0.0.0.0:5000"]
Este archivo le dice a Docker que:
• Construya una imagen Python 3.6.
• Que establezca el directorio de trabajo /aplicación.
• Que actualice e instale make.
• Copiar archivo requerimientos e instale las dependencias de Python.
Crear archivo docker-compose.yml con el contenido:
version: '3'
services:
app:
build:
context: .
dockerfile: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
• En este archivo se definen los dos servicios que se van a crear para el despliegue, app y redis.
• El servicio web utiliza una imagen construida desde el archivo dockerfile y expone el puerto 5000 que
es el puerto por defecto de un servidor web flask.
• El servicio redis utiliza una imagen pública descargada de Docker Hub.
Construir y ejecutar archivo con docker-compose up --build
[root@centos8 compose3]# docker-compose up --build
Creating network "compose3_default" with the default driver
Building app
Step 1/7 : FROM python:3.6-alpine
3.6-alpine: Pulling from library/python
df20fa9351a1: Already exists
36b3adc4ff6f: Already exists
8ad3a11d3b57: Pull complete
46f8f816bc3b: Pull complete
8ca87e5ecfab: Pull complete
Digest: sha256:9a33efeb0c11a68adb4f62fd7b22a55424c608341709a1701fd37310bdde4b1e
Status: Downloaded newer image for python:3.6-alpine
---> ff89bdde5ee0
Step 2/7 : WORKDIR /aplicacion
---> Running in b124793cc701
Removing intermediate container b124793cc701
---> 752d3ed02111
Step 3/7 : RUN apk add --no-cache --update make
---> Running in 4a1a45d5cb25
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
Uso básico Docker | Moisés E. Araya
[24]
(1/1) Installing make (4.3-r0)
Executing busybox-1.31.1-r16.trigger
OK: 11 MiB in 35 packages
Removing intermediate container 4a1a45d5cb25
---> da22b583f786
Step 4/7 : COPY requerimientos.txt requerimientos.txt
---> df0020d1961c
Step 5/7 : RUN pip install -r requerimientos.txt
---> Running in d18390e4e4b5
WARNING: The directory '/root/.cache/pip' or its parent directory is not owned or is not writable by
the current user. The cache has been disabled. Check the permissions and owner of that directory. If
executing pip with sudo, you may want sudo's -H flag.
Collecting redis
Downloading redis-3.5.3-py2.py3-none-any.whl (72 kB)
Collecting Flask
Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB)
Collecting Jinja2>=2.10.1
Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
Collecting click>=5.1
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Collecting Werkzeug>=0.15
Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB)
Collecting itsdangerous>=0.24
Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB)
Collecting MarkupSafe>=0.23
Downloading MarkupSafe-1.1.1.tar.gz (19 kB)
Building wheels for collected packages: MarkupSafe
Building wheel for MarkupSafe (setup.py): started
Building wheel for MarkupSafe (setup.py): finished with status 'done'
Created wheel for MarkupSafe: filename=MarkupSafe-1.1.1-py3-none-any.whl size=12627
sha256=efedd99e4c3fd8791d0660bdb01bc629093cf2906ee7602570fbedb7e306878c
Stored in directory: /tmp/pip-ephem-wheel-cache-
xy46mirx/wheels/ca/85/2f/4c3a8ca6fb5eec7b43ec1e5666c7274dcdb86d6c32231aaa9d
Successfully built MarkupSafe
Installing collected packages: redis, MarkupSafe, Jinja2, click, Werkzeug, itsdangerous, Flask
Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2
itsdangerous-1.1.0 redis-3.5.3
Removing intermediate container d18390e4e4b5
---> a4bbb336a740
Step 6/7 : COPY . /aplicacion
---> 3b813076114b
Step 7/7 : CMD ["gunicorn", "flask_app:app", "--bind", "0.0.0.0:5000"]
---> Running in 87480c32bdc3
Removing intermediate container 87480c32bdc3
---> a8c862c2b3ce
Successfully built a8c862c2b3ce
Successfully tagged compose3_app:latest
Recreating compose3_app_1 ...
Recreating compose3_app_1 ... done
Attaching to compose3_redis_1, compose3_app_1
redis_1 | 1:C 21 Oct 2020 16:17:00.001 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 21 Oct 2020 16:17:00.001 # Redis version=6.0.8, bits=64, commit=00000000, modified=0,
pid=1, just started
redis_1 | 1:C 21 Oct 2020 16:17:00.001 # Warning: no config file specified, using the default
config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1 | 1:M 21 Oct 2020 16:17:00.006 * Running mode=standalone, port=6379.
redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING: The TCP backlog setting of 511 cannot be enforced
because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1 | 1:M 21 Oct 2020 16:17:00.007 # Server initialized
redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING overcommit_memory is set to 0! Background save may
fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to
/etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take
effect.
Uso básico Docker | Moisés E. Araya
[25]
redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING you have Transparent Huge Pages (THP) support
enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this
issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add
it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted
after THP is disabled (set to 'madvise' or 'never').
redis_1 | 1:M 21 Oct 2020 16:17:00.008 * Ready to accept connections
app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Starting gunicorn 20.0.4
app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Using worker: sync
app_1 | [2020-10-21 16:25:39 +0000] [7] [INFO] Booting worker with pid: 7
Validar funcionamiento.
[root@centos8 compose3]# curl http://localhost:5000/set_price/1000
Price set to 1000[root@centos8 compose3]#
[root@centos8 compose3]# curl http://localhost:5000/get_price
The price is 1000.[root@centos8 compose3]#
Para ver los procesos en ejecución, digitar docker-compose ps.
[root@centos8 compose3]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
compose3_app_1 gunicorn flask_app:app --b ... Up 0.0.0.0:5000->5000/tcp
compose3_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
[root@centos8 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
6e145a8d64c7 compose3_app "gunicorn flask_app:…" 4 hours ago Up 4 hours
0.0.0.0:5000->5000/tcp compose3_app_1
cafb33cd23e0 redis:alpine "docker-entrypoint.s…" 4 hours ago Up 4 hours
6379/tcp compose3_redis_1
Detener compose.
[root@centos8 compose3]# docker-compose down
Stopping compose3_app_1 ... done
Stopping compose3_redis_1 ... done
Removing compose3_app_1 ... done
Removing compose3_redis_1 ... done
Removing network compose3_default
Instalar Python.
[root@centos8 compose2]# dnf install python3
[root@centos8 compose2]# python3 --version
Python 3.6.8
Validar funcionamiento de Redis.
• Conectarse a contenedor de manera interactiva
• Ejeuctar redis-cli
• Ejecutar comando ping para saber su la conexión a la DB esta activa, PONG indica que la conexión es
satisfactoria.
• Digitar quit y exit para salir del contenedor.
Uso básico Docker | Moisés E. Araya
[26]
[root@centos8 ~]# docker exec -it compose3_redis_1 sh
/data # redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> MONITOR
OK
1603313957.859414 [0 172.21.0.3:42234] "SET" "price" "1000"
1603313977.846563 [0 172.21.0.3:42234] "GET" "price"
127.0.0.1:6379> quit
/data # exit
Docker Swarm.
Docker Swarm es una herramienta para la orquestación de clústeres Docker, esta embebido en el
motor de Docker y usa la API de Docker.
Hizo su aparición en la versión 1.12.0 y está escrito en lenguaje Go.
Para ver el listado de comandos disponibles de swarm escribir docker swarm –help
[dockerusr@centos8 ~]$ docker swarm --help
Usage: docker swarm COMMAND
Manage Swarm
Commands:
ca Display and rotate the root CA
init Initialize a swarm
join Join a swarm as a node and/or manager
join-token Manage join tokens
leave Leave the swarm
unlock Unlock swarm
unlock-key Manage the unlock key
update Update the swarm
Run 'docker swarm COMMAND --help' for more information on a command.
Algunos comandos típicos utilizados en Docker Swarm:
• docker service create -name webserver httpd:2.2
o Crea un servicio llamado webserver en base a la imagen httpd versión 2.2
• docker service update -image httpd:2.3 webserver
o Actualiza la imagen httpd a la versión 2.3
• docker service scale webserver=4
o Aumenta o disminuye la cantidad de contenedores según sea el caso.
• docker service rm webserver
o Elimina el servicio creado.
Uso básico Docker | Moisés E. Araya
[27]
Listado de comandos usados.
docker version o docker -v Ver versión
docker info Información del sistema
docker Muestra opciones de comando disponibles
docker search o docker search imagen:tag Buscar imagen en repositorio
docker pull + nombre imagen Descargar imagen de repositorio
docker images o docker images --help Mostrar imágenes descargadas
docker run + imagen
Ejecutar contenedor, primero busca local, si no está, la descarga del
registro y la ejecuta
docker ps o docker ps -a Mostrar contenedores en ejecución y su estado
docker run imagen + comando Ejecutar comandos en imágenes
docker run -it imagen + comando Ejecutar comando modo interactivo
docker run --name nombre_contenedor +
imagen Crear contenedor con nombre
docker start + Container ID o docker stop +
Container ID Iniciar y detener contenedor
docker commit + Container ID + nombre
imagen Crear imagen a partir de un contenedor con cambios
docker build -t nombre imagen Crear imagen a partir de un Docker file
docker run -d -p puerto:puerto + nombre
imagen
docker inspect + contenedor|imagen Muestra información detallada del contenedor|imagen
docker ps -s Muestra el tamaño del contenedor
docker logs container|id Muestra los registros del contenedor
docker rm $(docker ps -aq) Elimina todos los contenedores
docker rmi imagen Elimina las imágenes existentes
docker system prune -a Borra todo el sistema
docker history contenedor Muestra las capas que contiene el contenedor
docker-compose --version Muestra la versión de compose
docker-compose --help Muestra las opciones de ayuda de compose
docker-compose up --build Construye y ejecuta archivo
docker-compose ps Muestra los procesos en ejecución
docker-compose down Detiene compose
docker exec -it contenedor comando Conexión a contenedor de forma interactiva
Uso básico Docker | Moisés E. Araya
[28]
Alternativas.
Algunas de las alternativas que existen a Docker son:
• CRI-O
o Es un entorno de ejecución de contenedores ligeros para Kubernetes.
o https://cri-o.io/
• Podman
o Motor de contenedores desarrollado por RedHat.
o https://podman.io/
• RKT
o Administrador de contenedores que pertenece a la distribución Linux Core OS.
o https://coreos.com/rkt/
Conclusión.
En este documento se han presentado los siguientes temas:
• Introducción a los contenedores.
• Que es Docker.
• Arquitectura y componentes principales.
• Docker Hub.
• Instalación de Docker.
• Casos de uso prácticos.
• Uso de Docker compose.
• Introducción a Docker Swarm.
• Repaso de comandos utilizados.
• Otras tecnologías de contenedores.
Referencias
• Documentación oficial.
o https://docs.docker.com/
• Instalación Docker Compose.
o https://docs.docker.com/compose/install/
o https://docs.docker.com/compose/gettingstarted/
• Documentación Swarm.
o https://docs.docker.com/engine/swarm/
• Guía de instalación Docker CentOs.
o https://docs.docker.com/engine/install/centos/
• Ejercicio Flask-Redis.
o https://github.com/sbartek/sample_flask_with_redis
• Repositorio de imágenes
o http://pixabay.com

Weitere ähnliche Inhalte

Was ist angesagt?

Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshoploodse
 
Understanding Kubernetes
Understanding KubernetesUnderstanding Kubernetes
Understanding KubernetesTu Pham
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to KubernetesImesh Gunaratne
 
Docker Overview - Rise of the Containers
Docker Overview - Rise of the ContainersDocker Overview - Rise of the Containers
Docker Overview - Rise of the ContainersRyan Hodgin
 
Kubernetes
KubernetesKubernetes
Kuberneteserialc_w
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Krishna-Kumar
 
How OpenShift SDN helps to automate
How OpenShift SDN helps to automateHow OpenShift SDN helps to automate
How OpenShift SDN helps to automateIlkka Tengvall
 
Advanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioAdvanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioCloudOps2005
 
Getting Started with Kubernetes
Getting Started with Kubernetes Getting Started with Kubernetes
Getting Started with Kubernetes VMware Tanzu
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Simplilearn
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...Simplilearn
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesRonny Trommer
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes IntroductionPeng Xiao
 
Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Janakiram MSV
 

Was ist angesagt? (20)

Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
DevOps with Kubernetes
DevOps with KubernetesDevOps with Kubernetes
DevOps with Kubernetes
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Docker & kubernetes
Docker & kubernetesDocker & kubernetes
Docker & kubernetes
 
Understanding Kubernetes
Understanding KubernetesUnderstanding Kubernetes
Understanding Kubernetes
 
An Introduction to Kubernetes
An Introduction to KubernetesAn Introduction to Kubernetes
An Introduction to Kubernetes
 
Docker Overview - Rise of the Containers
Docker Overview - Rise of the ContainersDocker Overview - Rise of the Containers
Docker Overview - Rise of the Containers
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!Kubernetes Application Deployment with Helm - A beginner Guide!
Kubernetes Application Deployment with Helm - A beginner Guide!
 
How OpenShift SDN helps to automate
How OpenShift SDN helps to automateHow OpenShift SDN helps to automate
How OpenShift SDN helps to automate
 
Advanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and IstioAdvanced Deployment Strategies with Kubernetes and Istio
Advanced Deployment Strategies with Kubernetes and Istio
 
Getting Started with Kubernetes
Getting Started with Kubernetes Getting Started with Kubernetes
Getting Started with Kubernetes
 
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
Chef vs Puppet vs Ansible vs Saltstack | Configuration Management Tools | Dev...
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...
DevOps Interview Questions Part - 2 | Devops Interview Questions And Answers ...
 
DevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to KubernetesDevJam 2019 - Introduction to Kubernetes
DevJam 2019 - Introduction to Kubernetes
 
Kubernetes Introduction
Kubernetes IntroductionKubernetes Introduction
Kubernetes Introduction
 
Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets Kubernetes Webinar - Using ConfigMaps & Secrets
Kubernetes Webinar - Using ConfigMaps & Secrets
 

Ähnlich wie Instalación y uso básico de Docker

Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCMicael Gallego
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para DummiesRaúl Unzué
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacionStivenLopez46
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en DockerJavier Villegas
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
DockerparadesarrolloEric Zeidan
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azureOscar Gensollen
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18enyert
 
An evening with... Docker
An evening with... DockerAn evening with... Docker
An evening with... DockerArkhotech
 
DockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfDockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfAngel Borroy López
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJCMicael Gallego
 
Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakubDemian Raschkovan
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskElio Rojano
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskVOIP2DAY
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetesjdezine
 
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Vicente Gerardo Guzman Lucio
 

Ähnlich wie Instalación y uso básico de Docker (20)

Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
Docker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJCDocker para Data Scientist - Master en Data Science URJC
Docker para Data Scientist - Master en Data Science URJC
 
Docker para Dummies
Docker para DummiesDocker para Dummies
Docker para Dummies
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacion
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en Docker
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
Dockerparadesarrollo
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azure
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18
 
An evening with... Docker
An evening with... DockerAn evening with... Docker
An evening with... Docker
 
DockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdfDockerCon 2022 Spanish Room-ONBOARDING.pdf
DockerCon 2022 Spanish Room-ONBOARDING.pdf
 
Curso Kubernetes CodeURJC
Curso Kubernetes CodeURJCCurso Kubernetes CodeURJC
Curso Kubernetes CodeURJC
 
Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakub
 
Docker and networking
Docker and networkingDocker and networking
Docker and networking
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas Asterisk
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas Asterisk
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetes
 
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
 

Mehr von Moisés Elías Araya

Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10Moisés Elías Araya
 
Instalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) WindowsInstalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) WindowsMoisés Elías Araya
 
Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)Moisés Elías Araya
 
Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.Moisés Elías Araya
 
Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.Moisés Elías Araya
 
Instalar y Configurar Python para Windows
Instalar y Configurar Python para WindowsInstalar y Configurar Python para Windows
Instalar y Configurar Python para WindowsMoisés Elías Araya
 
Instalacion y uso basico de Jenkins
Instalacion y uso basico de JenkinsInstalacion y uso basico de Jenkins
Instalacion y uso basico de JenkinsMoisés Elías Araya
 
Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10Moisés Elías Araya
 
Instalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g LinuxInstalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g LinuxMoisés Elías Araya
 
Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012Moisés Elías Araya
 

Mehr von Moisés Elías Araya (20)

Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10
 
Instalacion Vz Linux
Instalacion Vz LinuxInstalacion Vz Linux
Instalacion Vz Linux
 
Conectar instancia gcp con putty
Conectar instancia gcp con puttyConectar instancia gcp con putty
Conectar instancia gcp con putty
 
Instalar SDK Google Cloud
Instalar SDK Google CloudInstalar SDK Google Cloud
Instalar SDK Google Cloud
 
Terraform Cosmos DB
Terraform Cosmos DBTerraform Cosmos DB
Terraform Cosmos DB
 
Conceptos BPM
Conceptos BPMConceptos BPM
Conceptos BPM
 
Instalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) WindowsInstalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) Windows
 
Cuadro mando Excel
Cuadro mando ExcelCuadro mando Excel
Cuadro mando Excel
 
Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)
 
Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.
 
Ver uptime Windows
Ver uptime WindowsVer uptime Windows
Ver uptime Windows
 
Modificar aspecto consola Windows
Modificar aspecto consola WindowsModificar aspecto consola Windows
Modificar aspecto consola Windows
 
Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.
 
Instalar y Configurar Python para Windows
Instalar y Configurar Python para WindowsInstalar y Configurar Python para Windows
Instalar y Configurar Python para Windows
 
Instalacion y uso basico de Jenkins
Instalacion y uso basico de JenkinsInstalacion y uso basico de Jenkins
Instalacion y uso basico de Jenkins
 
Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10
 
Instalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g LinuxInstalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g Linux
 
Instalacion y Uso de JMeter
Instalacion y Uso de JMeterInstalacion y Uso de JMeter
Instalacion y Uso de JMeter
 
Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012
 
Habilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHELHabilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHEL
 

Kürzlich hochgeladen

9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxRogerPrieto3
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Kürzlich hochgeladen (15)

9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Herramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptxHerramientas de corte de alta velocidad.pptx
Herramientas de corte de alta velocidad.pptx
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Instalación y uso básico de Docker

  • 1. 0 INSTALACION Y USO BASICO DOCKER MOISÉS ELÍAS ARAYA 2020
  • 2. Uso básico Docker | Moisés E. Araya [1] Tabla de contenidos Instalación y uso básico de Docker. ............................................................................................ 2 Introducción. .................................................................................................................... 2 ¿Qué es un contenedor ..................................................................................................... 2 Qué es Docker................................................................................................................... 3 Arquitectura Docker......................................................................................................... 3 Que son los contenedores e imágenes. .................................................................................. 3 Docker Hub. .................................................................................................................. 4 Instalar Docker Linux CentOS................................................................................................. 5 Entorno utilizado. ........................................................................................................... 5 Procedimiento................................................................................................................ 5 Primeros pasos con Docker.................................................................................................... 7 Ejecutar primer contenedor..............................................................................................10 Crear imágenes con Docker File. ........................................................................................14 Mostrar contenido de contenedor (Inspeccionar).....................................................................16 Docker Compose. .............................................................................................................21 Instalación ...................................................................................................................21 Ejemplo Docker Compose con Contenedores Flask y Redis. ........................................................22 Docker Swarm. .................................................................................................................26 Listado de comandos usados.................................................................................................27 Alternativas..................................................................................................................28 Conclusión. ..................................................................................................................28 Referencias ..................................................................................................................28
  • 3. Uso básico Docker | Moisés E. Araya [2] Instalación y uso básico de Docker. Introducción. El propósito de este documento es ofrecer una descripción general de la tecnología de contenedores de Docker, donde se incluyen tareas como instalación, creación de imágenes, despliegue de contenedores, consulta de información relevante entre otras tareas de carácter introductorio. ¿Qué es un contenedor? Es una unidad de software ejecutable que encapsula todo lo necesario para ejecutarse. Virtualiza a nivel de SO lo que permite aislar procesos y controlar los recursos asignados a estos procesos. Son pequeños, portables y rápidos dado que no incluyen un SO huésped en cada imagen. Los contenedores son más ligeros que las máquinas virtuales, se reduce la cantidad de máquinas necesarias para tener un entorno lo que optimiza uso de espacio y recursos. Algunos de los beneficios. • Portables e independientes de plataformas. • Soporta desarrollos y arquitecturas modernas. • Despliegues rápidos y reutilizables. Contenedores versus Máquinas Virtuales. Comparación de maquinas virtuales y contenedores.
  • 4. Uso básico Docker | Moisés E. Araya [3] • Máquinas Virtuales. o Servidor, Host OS (Windows Server, Xen Server, VMWare Esxi) , Hypervisor (HyperV, Xen, VMWare Vcenter), Se ejecutan SO, sobre ellos librerías y binarios y sobre ellos las aplicaciones o DB. • Docker. o Utiliza el mismo Host, el mismo SO, Engine Docker (Las aplicaciones utilizan los mismos binarios y/o librerías del SO). De lo anterior desprendemos que, al utilizar contenedores, podemos escalar y realizar despliegues rápidamente y de manera mas eficiente debido a que un contenedor utiliza muy poco espacio para operar, no necesita de un hypervisor y dado que existe un mejor uso de recursos. Qué es Docker. • Es una herramienta de código abierto que está diseñada para facilitar la creación, despliegue y ejecución de aplicaciones utilizando contenedores. • Esta escrita en lenguaje Go, fue lanzada en el año 2013 y es comercializada por la compañía Docker Inc. • Posee dos versiones; Community y Enterprise. • Dispone de un repositorio oficial y centralizado de imágenes que ofrece aplicaciones como un contendor descargable y que a la vez pueden ser compartidas. • Docker no virtualiza hardware, sino que el contenedor dispone acceso directo al hardware del host. Arquitectura Docker. Docker usa una arquitectura cliente-servidor • El cliente Docker habla con el demonio Docker quien es el encargado de compilar, distribuir y ejecutar sus contenedores Docker. • El demonio Docker (dockerd) escucha las solicitudes de la API de Docker y gestiona los objetos de Docker como imágenes, contenedores, redes y volúmenes. • Un registro de Docker es donde se almacenan las imágenes de Docker. Docker Hub es un registro público que cualquier puede utilizar. Que son los contenedores e imágenes. Contenedores. • Contiene lo necesario para ejecutar nuestras imágenes. • Basado en una o más imágenes. • Lo que se ejecuta.
  • 5. Uso básico Docker | Moisés E. Araya [4] Imágenes. • Plantilla o archivo de solo lectura que posee código de alguna aplicación preinstalada. • Son creadas por nosotros y/o lo que se descarga. • Desde una imagen se pueden crear múltiples contenedores. • Son basadas en capas y estas son de solo lectura. Docker Hub. Docker Hub es el repositorio principal de Docker (https://hub.docker.com/) actúa como comunidad donde se ofrecen imágenes y estas se pueden buscar, crear y subir. Las imágenes descargadas pueden ser públicas y privadas y estas se dividen en oficiales y no oficiales • Imágenes oficiales: son del lado del fabricante o marcas. • Imágenes no oficiales: son los que sube la comunidad. Vista del home de Docker Hub. Vista de imagen oficial de Nginx.
  • 6. Uso básico Docker | Moisés E. Araya [5] Instalar Docker Linux CentOS. Entorno utilizado. • Windows 10 Home, Core i5, 12 GB RAM. • MV CentOs V8 creada en VM Ware Workstation Player 12. Procedimiento. Instalar librería yum-utils. [root@centos8 ~]# yum install -y yum-utils Instalado: yum-utils-4.0.12-3.el8.noarch libzstd-1.4.2-2.el8.x86_64 ¡Listo! Descargar e instalar repositorio oficial. [root@centos8 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2424 100 2424 0 0 6105 0 --:--:-- --:--:-- --:--:-- 6105 [root@centos8 ~]# yum makecache CentOS-8 - AppStream 2.2 kB/s | 4.3 kB 00:01 CentOS-8 - Base 5.0 kB/s | 3.9 kB 00:00 CentOS-8 - Extras 1.0 kB/s | 1.5 kB 00:01 Docker CE Stable - x86_64 90 kB/s | 25 kB 00:00 Caché de metadatos creada. Instalar última versión de Docker. [root@centos8 ~]# dnf -y install docker-ce --nobest Última comprobación de caducidad de metadatos hecha hace 0:00:10, el lun 31 ago 2020 21:10:13 -04. Dependencias resueltas. Problema: package docker-ce-3:19.03.12-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed - cannot install the best candidate for the job - package containerd.io-1.2.10-3.2.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.13-3.1.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.13-3.2.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.2-3.3.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.2-3.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.4-3.1.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.5-3.1.el7.x86_64 is filtered out by modular filtering - package containerd.io-1.2.6-3.3.el7.x86_64 is filtered out by modular filtering ================================================================================================================= ========================================= Paquete Arquitectura Versión Repositorio Ta ================================================================================================================= ========================================= Instalando: docker-ce x86_64 3:18.09.1-3.el7 docker-ce-stable 19 Instalando dependencias: containerd.io x86_64 1.2.0-3.el7 docker-ce-stable 22 docker-ce-cli x86_64 1:19.03.12-3.el7 docker-ce-stable 38 libcgroup x86_64 0.41-19.el8 BaseOS 70
  • 7. Uso básico Docker | Moisés E. Araya [6] Descartando paquetes con conflictos en las dependencias: docker-ce x86_64 3:19.03.12-3.el7 docker-ce-stable 24 Resumen de la transacción ================================================================================================================= ========================================= Instalar 4 Paquetes Descartar 1 Paquete Tamaño total de la descarga: 79 M Tamaño instalado: 331 M Instalado: containerd.io-1.2.0-3.el7.x86_64 docker-ce-3:18.09.1-3.el7.x86_64 docker-ce-cli-1:19.03.12- 3.el7.x86_64 libcgroup-0.41-19.el8.x86_64 Omitido: docker-ce-3:19.03.12-3.el7.x86_64 ¡Listo! Habilitar e iniciar el servicio. [root@centos8 ~]# systemctl enable --now docker Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service. [root@centos8 docker]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2020-09-25 00:07:14 -03; 3 weeks 0 days ago Docs: https://docs.docker.com Main PID: 1081 (dockerd) Tasks: 12 Memory: 129.5M CGroup: /system.slice/docker.service └─1081 /usr/bin/dockerd -H fd:// sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.776685792-03:00" level=info msg="Docker daemon" commit=4c52b90 graphdriver(s)=overlay> sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.777032912-03:00" level=info msg="Daemon has completed initialization" sep 25 00:07:14 centos8.lab dockerd[1081]: time="2020-09-25T00:07:14.916089677-03:00" level=info msg="API listen on /var/run/docker.sock" sep 25 00:07:14 centos8.lab systemd[1]: Started Docker Application Container Engine. Crear usuario y agregar a grupo docker. [root@centos8 ~]# useradd -ms /bin/bash dockerusr [root@centos8 ~]# passwd dockerusr Cambiando la contraseña del usuario dockerusr. Nueva contraseña: CONTRASEÑA INCORRECTA: La contraseña tiene menos de 8 caracteres Vuelva a escribir la nueva contraseña: passwd: todos los tokens de autenticación se actualizaron exitosamente. [root@centos8 ~]# usermod -aG docker dockerusr [root@centos8 ~]# su – dockerusr
  • 8. Uso básico Docker | Moisés E. Araya [7] Primeros pasos con Docker. Validar instalación. [dockerusr@centos8 ~]$ docker version Client: Docker Engine - Community Version: 19.03.12 API version: 1.39 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:46:54 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.1 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:06:30 2019 OS/Arch: linux/amd64 Experimental: false [dockerusr@centos8 ~]$ Docker versión muestra las versiones de cliente y de servidor. Otro modo de realizar lo mismo es con el comando docker -v [dockerusr@centos8 ~]$ docker -v Docker version 19.03.12, build 48a66213fe Docker info muestra información como cantidad de contenedores y su estado, driver de almacenamiento, directorio donde se aloja la información del sistema, versión del kernel del S.O. entre otros datos relacionados con el servidor. [dockerusr@centos8 ~]# docker info Client: Debug Mode: false Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.09.1 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39 runc version: 4fc53a81fb7c994640722ac585fa9ca548971871 init version: fec3683 Security Options: seccomp Profile: default Kernel Version: 4.18.0-193.14.2.el8_2.x86_64 Operating System: CentOS Linux 8 (Core)
  • 9. Uso básico Docker | Moisés E. Araya [8] OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 4.92GiB Name: centos8.lab ID: LSCU:MDBQ:PEYB:OE52:CFKF:ZTUD:7IIR:QXBK:NUXB:W2G7:KS2L:CXAS Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false Product License: Community Engine El comando docker a secas muestra todas las opciones disponibles de comandos, en ella se muestran los comandos administradores y los comandos normales, también es posible ejecutar el comando docker –help para obtener esta información. [dockerusr@centos8 ~]# docker Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: builder Manage builds config Manage Docker configs container Manage containers context Manage contexts engine Manage the docker engine image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm Buscar imágenes que contengan una palabra. [dockerusr@centos8 ~]$ docker search httpd NAME DESCRIPTION STARS OFFICIAL AUTOMATED httpd The Apache HTTP Server Project 3181 [OK] centos/httpd-24-centos7 Platform for running Apache httpd 2.4 or bui… 36 centos/httpd 32 [OK] arm32v7/httpd The Apache HTTP Server Project 9 polinux/httpd-php Apache with PHP in Docker (Supervisor, CentO… 4 [OK] salim1983hoop/httpd24 Dockerfile running apache config 2 [OK] clearlinux/httpd httpd HyperText Transfer Protocol (HTTP) ser… 1
  • 10. Uso básico Docker | Moisés E. Araya [9] publici/httpd httpd:latest 1 [OK] solsson/httpd-openidc mod_auth_openidc on official httpd image, ve… 1 [OK] jonathanheilmann/httpd-alpine-rewrite httpd:alpine with enabled mod_rewrite 1 [OK] lead4good/httpd-fpm httpd server which connects via fcgi proxy h… 1 [OK] dariko/httpd-rproxy-ldap Apache httpd reverse proxy with LDAP authent… 1 [OK] dockerpinata/httpd 0 Descargar imagen. [dockerusr@centos8 ~]$ docker pull httpd Using default tag: latest latest: Pulling from library/httpd d121f8d1c412: Pull complete 9cd35c2006cf: Pull complete b6b9dec6e0f8: Pull complete fc3f9b55fcc2: Pull complete 802357647f64: Pull complete Digest: sha256:5ce7c20e45b407607f30b8f8ba435671c2ff80440d12645527be670eb8ce1961 Status: Downloaded newer image for httpd:latest docker.io/library/httpd:latest # Cuando no se incluye algún tag a la imagen, se usa el tag por defecto que es el tag: latest. Mostrar imágenes descargadas. [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest 417af7dc28bc 8 days ago 138MB Explicación de la salida del comando: • TAG: Es la versión, en este caso latest que indica una versión estable • IMAGE ID: Identificador. • CREATED: Fecha creación en repositorio docker hub. • SIZE: Tamaño de la imagen. Buscar una imagen con un tag en particular. [dockerusr@centos8 ~]$ docker search httpd:2.4 NAME DESCRIPTION STARS OFFICIAL AUTOMATED eeacms/scp-server Restricted SSH server. This image is meant t… 2 [OK] 162c01go1/httpd The Apache HTTP Server Project Clone From ht… 1 rhkl/httpd-fpm httpd:2.4-alpine with fpm for gitlab ci 0 szabogyula/shibboleth-sp httpd:2.4 based shibboleth-sp 0 [OK] caraka/httpd-py-cgi Implements python3 cgi in the official httpd… 0
  • 11. Uso básico Docker | Moisés E. Araya [10] Ejecutar primer contenedor. Existe una imagen llamada hello-world que sirve para saber si Docker opera correctamente. [dockerusr@centos8 ~]$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e0941a1fd0bf4a8e6c9408b2600777c5 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ # La imagen no existe en el servidor por lo que el sistema la descarga y ejecuta. Listar los contenedores en ejecución. [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES No hay contenedores en ejecución debido a que estos tienen un fin especifico, en el caso de la imagen hello- world, al ejecutarse muestra el mensaje “Hola desde Docker” y se detiene. Flujo seguido por imagen Hello-World. Listar los contenedores y su estado. [dockerusr@centos8 ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4e9429ff69b9 hello-world "/hello" 5 seconds ago Exited (0) 45 seconds ago loving_minsky El contenedor se ejecutó hace 45 segundos atrás y su estado es exited o finalizado.
  • 12. Uso básico Docker | Moisés E. Araya [11] Ejecutar comando en imágenes. [dockerusr@centos8 ~]$ docker run httpd:latest ls bin build cgi-bin conf error htdocs icons include logs modules Se muestra la estructura de los directorios existentes en el contenedor httpd. Crear contenedor interactivo. [dockerusr@centos8 ~]$ docker run -it httpd:latest bash root@f41f31de112e:/usr/local/apache2# ls bin build cgi-bin conf error htdocs icons include logs modules root@f41f31de112e:/usr/local/apache2# exit exit [dockerusr@centos8 ~]$ Los flags -i y -t significan interactivo y terminal respectivamente. De esta manera se pueden ejecutar comandos dentro del contedor, para salir digitar exit. Mostrar imágenes descargadas. [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest 417af7dc28bc 8 days ago 138MB hello-world latest bf756fb1ae65 8 months ago 13.3kB Para más información del comando, agregar –help. [dockerusr@centos8 ~]$ docker images --help Usage: docker images [OPTIONS] [REPOSITORY[:TAG]] List images Options: -a, --all Show all images (default hides intermediate images) --digests Show digests -f, --filter filter Filter output based on conditions provided --format string Pretty-print images using a Go template --no-trunc Don't truncate output -q, --quiet Only show numeric IDs Crear contenedor con nombre, detener e iniciar nuevamente (el nombre puede ser a elección). [dockerusr@centos8 ~]$ ~]# docker run --name webserver1 httpd:latest AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Thu Sep 24 22:02:20.286647 2020] [mpm_event:notice] [pid 1:tid 139784482096256] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations [Thu Sep 24 22:02:20.287292 2020] [core:notice] [pid 1:tid 139784482096256] AH00094: Command line: 'httpd -D FOREGROUND'
  • 13. Uso básico Docker | Moisés E. Araya [12] [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79d0a366e6c2 httpd:latest "httpd-foreground" 28 seconds ago Up 27 seconds 80/tcp webserver1 [dockerusr@centos8 ~]$ docker stop 79 79 [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [dockerusr@centos8 ~]$ docker start 79 79 [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79d0a366e6c2 httpd:latest "httpd-foreground" 23 minutes ago Up 3 seconds 80/tcp webserver1 Personalizar contenedores para crear imágenes a partir de otra. [dockerusr@centos8 ~]$ docker run -it centos:latest /sbin/bash docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: "/sbin/bash": stat /sbin/bash: no such file or directory": unknown. ERRO[0000] error waiting for container: context canceled [root@centos8 ~]# docker run -it centos:latest bash [root@d73ded603b87 /]# yum install wget Failed to set locale, defaulting to C.UTF-8 CentOS-8 - AppStream 9.4 MB/s | 5.8 MB 00:00 CentOS-8 - Base 2.1 MB/s | 2.2 MB 00:01 CentOS-8 - Extras 16 kB/s | 8.1 kB 00:00 Dependencies resolved. ================================================================================================================= ============================================= Package Architecture Version Repository Size ================================================================================================================= ============================================= Installing: wget x86_64 1.19.5-8.el8_1.1 AppStream 735 k Installing dependencies: libpsl x86_64 0.20.2-5.el8 BaseOS 61 k publicsuffix-list-dafsa noarch 20180723-1.el8 BaseOS 56 k Transaction Summary ================================================================================================================= ============================================= Install 3 Packages Total download size: 852 k Installed size: 3.0 M Is this ok [y/N]: y Downloading Packages: CentOS-8 - Base 204% [=============================================================================================(1/3): wget-1.19.5- 8.el8_1.1.x86_64.rpm 5.1 MB/s | 735 kB 00:00 (2/3): libpsl-0.20.2-5.el8.x86_64.rpm 237 kB/s | 61 kB 00:00 (3/3): publicsuffix-list-dafsa-20180723-1.el8.noarch.rpm 216 kB/s | 56 kB 00:00 ----------------------------------------------------------------------------------------------------------------- --------------------------------------------- Total 1.4 MB/s | 852 kB 00:00
  • 14. Uso básico Docker | Moisés E. Araya [13] warning: /var/cache/dnf/AppStream-02e86d1c976ab532/packages/wget-1.19.5-8.el8_1.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY CentOS-8 - AppStream 1.6 MB/s | 1.6 kB 00:00 Importing GPG key 0x8483C65D: Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>" Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Is this ok [y/N]: y Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : publicsuffix-list-dafsa-20180723-1.el8.noarch 1/3 Installing : libpsl-0.20.2-5.el8.x86_64 2/3 Installing : wget-1.19.5-8.el8_1.1.x86_64 3/3 Running scriptlet: wget-1.19.5-8.el8_1.1.x86_64 3/3 Verifying : wget-1.19.5-8.el8_1.1.x86_64 1/3 Verifying : libpsl-0.20.2-5.el8.x86_64 2/3 Verifying : publicsuffix-list-dafsa-20180723-1.el8.noarch 3/3 Installed: libpsl-0.20.2-5.el8.x86_64 publicsuffix-list-dafsa-20180723-1.el8.noarch wget-1.19.5-8.el8_1.1.x86_64 Complete! [root@d73ded603b87 /]# wget wget: missing URL Usage: wget [OPTION]... [URL]... Try `wget --help' for more options. [root@d73ded603b87 /]# exit Crear imagen con cambios, crear contenedor y validar utilitario. [dockerusr@centos8 ~]$ docker commit d73ded603b87 centoswget sha256:e61f5b9a659bf90bc4acb80ce1a545fc00bbaca24f806dada53218cf1284f508 [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centoswget latest e61f5b9a659b 20 seconds ago 247MB httpd latest 417af7dc28bc 12 days ago 138MB centos latest 0d120b6ccaa8 6 weeks ago 215MB alpine latest a24bb4013296 4 months ago 5.57MB hello-world latest bf756fb1ae65 8 months ago 13.3kB student_02_25150273ed02@cloudshell:~ (qwiklabs-gcp-02-2eea81483979)$ docker run -it centoswget [root@d48a3e33a0b4 /]# wget www.google.com --2020-09-28 16:25:34-- http://www.google.com/ Resolving www.google.com (www.google.com)... 172.217.203.103, 172.217.203.104, 172.217.203.106, ... Connecting to www.google.com (www.google.com)|172.217.203.103|:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] Saving to: 'index.html' index.html [ <=> ] 11.79K --.-KB/s in 0s 2020-09-28 16:25:34 (88.6 MB/s) - 'index.html' saved [12076]
  • 15. Uso básico Docker | Moisés E. Araya [14] [root@d48a3e33a0b4 /]# Ver cambios. [dockerusr@centos8 ~]$ docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE centoswget latest e61f5b9a659b 6 minutes ago 247MB centos latest 0d120b6ccaa8 6 weeks ago 215MB Crear imágenes con Docker File. Docker file es un documento de texto que contiene todos los comandos que el usuario puede invocar a las líneas de comando para crear una imagen. Sintaxis. • FROM: Define una imagen base. • MAINTAINER: Referencia al creador. • RUN: Ejecuta comandos en la imagen antes de ser creada. • ADD/COPY: Permite agregar o copiar archivos desde el equipo local a la imagen. • EXPOSE: Permite exponer por defecto un puerto para el contenedor. • CMD: Ejecuta una acción por defecto al crear el contenedor. o CMD [“/usr/sbin/apache2”,”-D”, “FOREGROUND”] Crear archivo dockerfile con el siguiente contenido: FROM centos:7 RUN yum update && yum install httpd httpd-tools -y EXPOSE 80 CMD ["/usr/sbin/httpd","-D","FOREGROUND"] Ejecutar el comando docker build. [dockerusr@centos8 ~]$ docker build -t centosweb . Sending build context to Docker daemon 58.72MB Step 1/4 : FROM centos:7 ---> 7e6257c9f8d8 Step 2/4 : RUN yum update && yum install httpd httpd-tools -y ---> Running in fc42bafe2ba1 Loaded plugins: fastestmirror, ovl Determining fastest mirrors * base: mirror.orbyta.com * extras: mirror.orbyta.com * updates: mirror.orbyta.com No packages marked for update Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile * base: mirror.orbyta.com * extras: mirror.orbyta.com * updates: mirror.orbyta.com Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed --> Processing Dependency: system-logos >= 7.92.1-1 for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64 --> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-93.el7.centos.x86_64 ---> Package httpd-tools.x86_64 0:2.4.6-93.el7.centos will be installed --> Running transaction check ---> Package apr.x86_64 0:1.4.8-5.el7 will be installed ---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed ---> Package centos-logos.noarch 0:70.0.6-3.el7.centos will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution
  • 16. Uso básico Docker | Moisés E. Araya [15] Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: httpd x86_64 2.4.6-93.el7.centos base 2.7 M httpd-tools x86_64 2.4.6-93.el7.centos base 92 k Installing for dependencies: apr x86_64 1.4.8-5.el7 base 103 k apr-util x86_64 1.5.2-6.el7 base 92 k centos-logos noarch 70.0.6-3.el7.centos base 21 M mailcap noarch 2.1.41-2.el7 base 31 k Transaction Summary ================================================================================ Install 2 Packages (+4 Dependent packages) Total download size: 24 M Installed size: 32 M Downloading packages: warning: /var/cache/yum/x86_64/7/base/packages/apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for apr-util-1.5.2-6.el7.x86_64.rpm is not installed -------------------------------------------------------------------------------- Total 2.1 MB/s | 24 MB 00:11 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@CentOS) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : apr-1.4.8-5.el7.x86_64 1/6 Installing : apr-util-1.5.2-6.el7.x86_64 2/6 Installing : httpd-tools-2.4.6-93.el7.centos.x86_64 3/6 Installing : centos-logos-70.0.6-3.el7.centos.noarch 4/6 Installing : mailcap-2.1.41-2.el7.noarch 5/6 Installing : httpd-2.4.6-93.el7.centos.x86_64 6/6 Verifying : mailcap-2.1.41-2.el7.noarch 1/6 Verifying : apr-util-1.5.2-6.el7.x86_64 2/6 Verifying : httpd-2.4.6-93.el7.centos.x86_64 3/6 Verifying : apr-1.4.8-5.el7.x86_64 4/6 Verifying : httpd-tools-2.4.6-93.el7.centos.x86_64 5/6 Verifying : centos-logos-70.0.6-3.el7.centos.noarch 6/6 Installed: httpd.x86_64 0:2.4.6-93.el7.centos httpd-tools.x86_64 0:2.4.6-93.el7.centos Dependency Installed: apr.x86_64 0:1.4.8-5.el7 apr-util.x86_64 0:1.5.2-6.el7 centos-logos.noarch 0:70.0.6-3.el7.centos mailcap.noarch 0:2.1.41-2.el7 Complete! Removing intermediate container fc42bafe2ba1 ---> 6d9c2959cc68 Step 3/4 : EXPOSE 80 ---> Running in 5a1ec0780e47 Removing intermediate container 5a1ec0780e47 ---> 13f7e50cd758 Step 4/4 : CMD ["/usr/sbin/httpd","-D","FOREGROUND"] ---> Running in 68d4b9a15812 Removing intermediate container 68d4b9a15812 ---> 67abf266424a Successfully built 67abf266424a Successfully tagged centosweb:latest
  • 17. Uso básico Docker | Moisés E. Araya [16] [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centosweb latest 67abf266424a 3 minutes ago 328MB Ejecutar contenedor y acceder a URL. [dockerusr@centos8 ~]$ docker run -d -p 85:80 centosweb 1b2ff0d8077732eb7de4476e0d17026e875d9e23af5e369e7786634daffcc06e [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1b2ff0d80777 centosweb "/usr/sbin/httpd -D …" 29 seconds ago Up 28 seconds 0.0.0.0:85->80/tcp confident_wilson Mostrar contenido de contenedor (Inspeccionar). Docker inspect es una herramienta que permite obtener información detallada sobre los recursos de Docker como contenedores, imágenes, volúmenes y redes. La sintaxis básica es docker inspect + opciones + contenedor|imagen Descargar imagen redis e iniciar contenedor para luego buscar información útil. [dockerusr@centos8 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2f515ad351a redis "docker-entrypoint.s…" 3 seconds ago Up 3 seconds 6379/tcp admiring_lamarr [dockerusr@centos8 ~]$ docker inspect c2f515ad351a [ { "Id": "c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9", "Created": "2020-12-21T02:21:03.089221887Z", "Path": "docker-entrypoint.sh", "Args": [ "redis-server" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 1894, "ExitCode": 0, Salida omitida. . . Consultar contenido especifico. Obtener ID. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Id "Id": "c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9",
  • 18. Uso básico Docker | Moisés E. Araya [17] Obtener Estado. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep State --after-context=10 "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 1894, "ExitCode": 0, "Error": "", "StartedAt": "2020-12-21T02:21:03.576564961Z", Obtener Imagen. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Image "Image": "sha256:ef47f3b6dc11e8f17fb39a6e46ecaf4efd47b3d374e92aeb9f2606896b751251", "Image": "redis", Obtener Configuración de red. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep NetworkSettings --after-context=10 "NetworkSettings": { "Bridge": "", "SandboxID": "ae7edcddaaf5163a49b1f74b1503907df1c5df48c947e25d036ff413f536237b", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "6379/tcp": null }, "SandboxKey": "/var/run/docker/netns/ae7edcddaaf5", "SecondaryIPAddresses": null, Obtener ruta de logs. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep LogPath --after-context=10 "LogPath": "/var/lib/docker/containers/c2f515ad351ae0da881063456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9/c2f515ad351ae0da8810 63456b7aa4213ba39fa33d75e6f1df7906edd2ddc0c9-json.log", "Name": "/admiring_lamarr", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, Obtener nombre de contenedor. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10 "Name": "/admiring_lamarr", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "",
  • 19. Uso básico Docker | Moisés E. Araya [18] Obtener volúmenes asociados. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10 "Name": "/admiring_lamarr", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", Obtener configuración. [dockerusr@centos8 ~]$ docker inspect c2f515ad351a |grep Name --after-context=10 "Name": "/admiring_lamarr", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "docker-default", "ExecIDs": null, "HostConfig": { "Binds": null, "ContainerIDFile": "", La información mostrada anteriormente, es válida y de interés para contenedores, algunos valores para las imágenes son: • ID. • Parent. • Container. • ContainerConfig. • DockerVersion. • VirtualSize. Para obtener los valores descritos arriba, se debe seguir la misma sintaxis que la mostrada para los valores de los contenedores: [dockerusr@centos8 ~]$ docker inspect redis |grep VirtualSize --after-context=10 "VirtualSize": 104252176, El resultado es en bytes por lo que el tamaño de la imagen es de 104 MB, este resultado también se puede obtener con el comando docker ps -s. Mostrar logs de contenedor. [dockerusr@centos8 ~]$ docker logs c2f515ad351a 1:C 21 Dec 2020 02:21:03.589 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 1:C 21 Dec 2020 02:21:03.589 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started 1:C 21 Dec 2020 02:21:03.589 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf 1:M 21 Dec 2020 02:21:03.591 * Running mode=standalone, port=6379. 1:M 21 Dec 2020 02:21:03.591 # Server initialized 1:M 21 Dec 2020 02:21:03.591 * Ready to accept connections
  • 20. Uso básico Docker | Moisés E. Araya [19] Borrar contenedores e imágenes. Primero se deben borrar todos los contenedores y luego las imágenes. Listar todos los contenedores y luego borrarlos. [dockerusr@centos8 ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d175a1be29ea centosweb "/usr/sbin/httpd -D …" 3 hours ago Exited (0) 20 seconds ago practical_dhawan f140b8115a6d ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago keen_perlman 99eb7bfd2047 ubuntu:latest "apt install -y apac…" 3 hours ago Exited (100) 3 hours ago inspiring_wescoff da869fe50305 ubuntu:latest "/bin/bash" 3 hours ago Exited (0) 3 hours ago upbeat_germain faa513b0ff25 ubuntu:latest "bash" 3 hours ago Exited (127) 3 hours ago admiring_noether e50f93a8b45a ubuntu:latest "/sbin/bash" 3 hours ago Created nervous_montalcini d4fe3f6ba79a ubuntu:latest "apt-get install ope…" 3 hours ago Exited (100) 3 hours ago jolly_taussig 9c8b602aba1b ubuntu:latest "apt-get update" 3 hours ago Exited (0) 3 hours ago upbeat_merkle c2af19c9bf54 ubuntu:latest "apt install -y apac…" 3 hours ago Exited (100) 3 hours ago blissful_wright Listar todas las imágenes y luego eliminarlas con el comando docker rmi. [dockerusr@centos8 ~]$ docker rm $(docker ps -aq) [dockerusr@centos8 ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE centosweb latest da16018bd2f3 3 hours ago 328MB ubuntuupdated latest e4a618c53833 3 hours ago 95.8MB httpd latest 417af7dc28bc 9 days ago 138MB centos 7 7e6257c9f8d8 6 weeks ago 203MB centos latest 0d120b6ccaa8 6 weeks ago 215MB [dockerusr@centos8 ~]$ docker rmi centosweb ubuntuupdated centos Untagged: centosweb:latest Deleted: sha256:da16018bd2f3076eecadf23b3368a1372e406c828df7ba14849d7866b3ee47d8 Deleted: sha256:505bebb6f20f7171e315724fba1bf004f0604a543b1748899e0c71dea1817520 Deleted: sha256:3b7736138232531fc1a2c1af88961abfd0cdd64b8bc396303fdd5d21faae8b21 Deleted: sha256:0e3e0bd6a7c69bcc42276c3f9807d95a9fe51550393b3f391a4ee94aedc35618 Untagged: ubuntuupdated:latest Deleted: sha256:e4a618c53833b8a438546bdc6e2b941048d85a64ba198a2024eecc6cf658fec2 Deleted: sha256:2e4bc22150688f357d95c6c9172d89fbddeef515050630675a2f49e1a150c2a5 Untagged: centos:latest Untagged: centos@sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd Deleted: sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566 Deleted: sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726 [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest bb0eaf4eee00 8 days ago 72.9MB httpd latest 417af7dc28bc 9 days ago 138MB centos 7 7e6257c9f8d8 6 weeks ago 203MB alpine latest a24bb4013296 3 months ago 5.57MB hello-world latest bf756fb1ae65 8 months ago 13.3kB
  • 21. Uso básico Docker | Moisés E. Araya [20] Otra opción de borrado es utilizando el comando docker system prune -a. [dockerusr@centos8 ~]$ docker system prune -a WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all images without at least one container associated to them - all build cache Are you sure you want to continue? [y/N] y Deleted Images: untagged: centosweb:latest deleted: sha256:e66a088747d2b206d7b8ab2021c8a2dc27bb5bffae0e533c4434e93a674251d4 deleted: sha256:6cf8134ea31cb34b824f693e99f220cff1b37259546e239e3c346963afec94f1 deleted: sha256:962b87f65563fb52bbfa09edeb70ccf6bf500cc64a59c3678be3e97fee715a28 deleted: sha256:c641f415cbaf69ce46131393a65f1cf84ef457cc4126bff10d0bd025032892c2 deleted: sha256:7e6257c9f8d8d4cdff5e155f196d67150b871bbe8c02761026f803a704acb3e9 deleted: sha256:613be09ab3c0860a5216936f412f09927947012f86bfa89b263dfa087a725f81 untagged: alpine:latest untagged: alpine@sha256:a15790640a6690aa1730c38cf0a440e2aa44aaca9b0e8931a9f2b0d7cc90fd65 deleted: sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e deleted: sha256:50644c29ef5a27c9a40c393a73ece2479de78325cae7d762ef3cdc19bf42dd0a untagged: webserver:latest deleted: sha256:43d2b008104a7814a72092351d1eaddfb7c05a639031504064b8c807bf6c246d deleted: sha256:571ac175065625e5f8ac4f99bf14f770fbb75d4ca0254cb1e8d0b870b7bd75a2 untagged: centos:latest untagged: centos@sha256:fc4a234b91cc4b542bac8a6ad23b2ddcee60ae68fc4dbd4a52efb5f1b0baad71 deleted: sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566 deleted: sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726 Total reclaimed space: 593.9MB [dockerusr@centos8 ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE [dockerusr@centos8 ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • 22. Uso básico Docker | Moisés E. Araya [21] Docker Compose. Herramienta para crear y ejecutar varios contenedores que necesiten comunicarse entre sí, esto es útil para entornos de desarrollo y prueba donde tenemos aplicaciones que necesitan de varios contenedores, esto se logra mediante el uso de archivos YAML donde se deben definir las configuraciones de las aplicaciones. Instalación Descargar, aplicar permisos de ejecución y validar instalación. [root@centos8 ~]# curl -L https://github.com/docker/compose/releases/download/1.26.0/docker- compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 651 100 651 0 0 1103 0 --:--:-- --:--:-- --:--:-- 1101 100 11.6M 100 11.6M 0 0 1096k 0 0:00:10 0:00:10 --:--:-- 1278k [root@centos8 ~]# chmod +x /usr/local/bin/docker-compose [root@centos8 ~]# su – dockerusr [dockerusr@centos8 ~]$ docker compose --version Docker version 19.03.12, build 48a66213fe Ver los comandos disponibles. [dockerusr@centos8 ~]$ docker compose --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/home/dockerusr/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/home/dockerusr/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/home/dockerusr/.docker/cert.pem") --tlskey string Path to TLS key file (default "/home/dockerusr/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit
  • 23. Uso básico Docker | Moisés E. Araya [22] Ejemplo Docker Compose con Contenedores Flask y Redis. Introducción. • Flask es un framework escrito en Python utilizado para crear aplicaciones web con pocas líneas de código. • Redis es un motor de base de datos NoSQL del tipo clave-valor utilizada para almacenamiento en cache. En ejemplo se crearán dos contenedores; uno para el servicio web basado en Python y Redis que actuará como backend. Procedimiento. Considerar la siguiente estructura de directorios: ├── compose │ ├── aplicacion │ │ ├── docker-compose.yml │ │ └── dockerfile │ ├── flask_app.py │ └── requerimientos.txt Crear archivo flask_app.py con el siguiente contenido: import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) @app.route('/') def home(): return "What is your price?" @app.route('/set_price/<int:price>') def set_price(price): cache.set("price", price) return f"Price set to {price}" @app.route('/get_price') def get_price(): price = int(cache.get("price")) return f"The price is {price}." En ejemplo, redis es el hostname del contenedor redis y el puerto a utilizar será el 6379. Crear archivo requerimientos.txt con el siguiente contenido: redis Flask gunicorn
  • 24. Uso básico Docker | Moisés E. Araya [23] Crear una carpeta con nombre aplicación y al interior de él, crear archivo dockerfile con el siguiente contenido: FROM python:3.6-alpine WORKDIR /aplicacion RUN apk add --no-cache --update make COPY requerimientos.txt requerimientos.txt RUN pip install -r requerimientos.txt COPY . /aplicacion CMD ["gunicorn", "flask_app:app", "--bind", "0.0.0.0:5000"] Este archivo le dice a Docker que: • Construya una imagen Python 3.6. • Que establezca el directorio de trabajo /aplicación. • Que actualice e instale make. • Copiar archivo requerimientos e instale las dependencias de Python. Crear archivo docker-compose.yml con el contenido: version: '3' services: app: build: context: . dockerfile: . ports: - "5000:5000" redis: image: "redis:alpine" • En este archivo se definen los dos servicios que se van a crear para el despliegue, app y redis. • El servicio web utiliza una imagen construida desde el archivo dockerfile y expone el puerto 5000 que es el puerto por defecto de un servidor web flask. • El servicio redis utiliza una imagen pública descargada de Docker Hub. Construir y ejecutar archivo con docker-compose up --build [root@centos8 compose3]# docker-compose up --build Creating network "compose3_default" with the default driver Building app Step 1/7 : FROM python:3.6-alpine 3.6-alpine: Pulling from library/python df20fa9351a1: Already exists 36b3adc4ff6f: Already exists 8ad3a11d3b57: Pull complete 46f8f816bc3b: Pull complete 8ca87e5ecfab: Pull complete Digest: sha256:9a33efeb0c11a68adb4f62fd7b22a55424c608341709a1701fd37310bdde4b1e Status: Downloaded newer image for python:3.6-alpine ---> ff89bdde5ee0 Step 2/7 : WORKDIR /aplicacion ---> Running in b124793cc701 Removing intermediate container b124793cc701 ---> 752d3ed02111 Step 3/7 : RUN apk add --no-cache --update make ---> Running in 4a1a45d5cb25 fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz
  • 25. Uso básico Docker | Moisés E. Araya [24] (1/1) Installing make (4.3-r0) Executing busybox-1.31.1-r16.trigger OK: 11 MiB in 35 packages Removing intermediate container 4a1a45d5cb25 ---> da22b583f786 Step 4/7 : COPY requerimientos.txt requerimientos.txt ---> df0020d1961c Step 5/7 : RUN pip install -r requerimientos.txt ---> Running in d18390e4e4b5 WARNING: The directory '/root/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. Collecting redis Downloading redis-3.5.3-py2.py3-none-any.whl (72 kB) Collecting Flask Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB) Collecting Jinja2>=2.10.1 Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB) Collecting click>=5.1 Downloading click-7.1.2-py2.py3-none-any.whl (82 kB) Collecting Werkzeug>=0.15 Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) Collecting itsdangerous>=0.24 Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) Collecting MarkupSafe>=0.23 Downloading MarkupSafe-1.1.1.tar.gz (19 kB) Building wheels for collected packages: MarkupSafe Building wheel for MarkupSafe (setup.py): started Building wheel for MarkupSafe (setup.py): finished with status 'done' Created wheel for MarkupSafe: filename=MarkupSafe-1.1.1-py3-none-any.whl size=12627 sha256=efedd99e4c3fd8791d0660bdb01bc629093cf2906ee7602570fbedb7e306878c Stored in directory: /tmp/pip-ephem-wheel-cache- xy46mirx/wheels/ca/85/2f/4c3a8ca6fb5eec7b43ec1e5666c7274dcdb86d6c32231aaa9d Successfully built MarkupSafe Installing collected packages: redis, MarkupSafe, Jinja2, click, Werkzeug, itsdangerous, Flask Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0 redis-3.5.3 Removing intermediate container d18390e4e4b5 ---> a4bbb336a740 Step 6/7 : COPY . /aplicacion ---> 3b813076114b Step 7/7 : CMD ["gunicorn", "flask_app:app", "--bind", "0.0.0.0:5000"] ---> Running in 87480c32bdc3 Removing intermediate container 87480c32bdc3 ---> a8c862c2b3ce Successfully built a8c862c2b3ce Successfully tagged compose3_app:latest Recreating compose3_app_1 ... Recreating compose3_app_1 ... done Attaching to compose3_redis_1, compose3_app_1 redis_1 | 1:C 21 Oct 2020 16:17:00.001 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo redis_1 | 1:C 21 Oct 2020 16:17:00.001 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started redis_1 | 1:C 21 Oct 2020 16:17:00.001 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf redis_1 | 1:M 21 Oct 2020 16:17:00.006 * Running mode=standalone, port=6379. redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. redis_1 | 1:M 21 Oct 2020 16:17:00.007 # Server initialized redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
  • 26. Uso básico Docker | Moisés E. Araya [25] redis_1 | 1:M 21 Oct 2020 16:17:00.007 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo madvise > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled (set to 'madvise' or 'never'). redis_1 | 1:M 21 Oct 2020 16:17:00.008 * Ready to accept connections app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Starting gunicorn 20.0.4 app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1) app_1 | [2020-10-21 16:25:39 +0000] [1] [INFO] Using worker: sync app_1 | [2020-10-21 16:25:39 +0000] [7] [INFO] Booting worker with pid: 7 Validar funcionamiento. [root@centos8 compose3]# curl http://localhost:5000/set_price/1000 Price set to 1000[root@centos8 compose3]# [root@centos8 compose3]# curl http://localhost:5000/get_price The price is 1000.[root@centos8 compose3]# Para ver los procesos en ejecución, digitar docker-compose ps. [root@centos8 compose3]# docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------- compose3_app_1 gunicorn flask_app:app --b ... Up 0.0.0.0:5000->5000/tcp compose3_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e145a8d64c7 compose3_app "gunicorn flask_app:…" 4 hours ago Up 4 hours 0.0.0.0:5000->5000/tcp compose3_app_1 cafb33cd23e0 redis:alpine "docker-entrypoint.s…" 4 hours ago Up 4 hours 6379/tcp compose3_redis_1 Detener compose. [root@centos8 compose3]# docker-compose down Stopping compose3_app_1 ... done Stopping compose3_redis_1 ... done Removing compose3_app_1 ... done Removing compose3_redis_1 ... done Removing network compose3_default Instalar Python. [root@centos8 compose2]# dnf install python3 [root@centos8 compose2]# python3 --version Python 3.6.8 Validar funcionamiento de Redis. • Conectarse a contenedor de manera interactiva • Ejeuctar redis-cli • Ejecutar comando ping para saber su la conexión a la DB esta activa, PONG indica que la conexión es satisfactoria. • Digitar quit y exit para salir del contenedor.
  • 27. Uso básico Docker | Moisés E. Araya [26] [root@centos8 ~]# docker exec -it compose3_redis_1 sh /data # redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> MONITOR OK 1603313957.859414 [0 172.21.0.3:42234] "SET" "price" "1000" 1603313977.846563 [0 172.21.0.3:42234] "GET" "price" 127.0.0.1:6379> quit /data # exit Docker Swarm. Docker Swarm es una herramienta para la orquestación de clústeres Docker, esta embebido en el motor de Docker y usa la API de Docker. Hizo su aparición en la versión 1.12.0 y está escrito en lenguaje Go. Para ver el listado de comandos disponibles de swarm escribir docker swarm –help [dockerusr@centos8 ~]$ docker swarm --help Usage: docker swarm COMMAND Manage Swarm Commands: ca Display and rotate the root CA init Initialize a swarm join Join a swarm as a node and/or manager join-token Manage join tokens leave Leave the swarm unlock Unlock swarm unlock-key Manage the unlock key update Update the swarm Run 'docker swarm COMMAND --help' for more information on a command. Algunos comandos típicos utilizados en Docker Swarm: • docker service create -name webserver httpd:2.2 o Crea un servicio llamado webserver en base a la imagen httpd versión 2.2 • docker service update -image httpd:2.3 webserver o Actualiza la imagen httpd a la versión 2.3 • docker service scale webserver=4 o Aumenta o disminuye la cantidad de contenedores según sea el caso. • docker service rm webserver o Elimina el servicio creado.
  • 28. Uso básico Docker | Moisés E. Araya [27] Listado de comandos usados. docker version o docker -v Ver versión docker info Información del sistema docker Muestra opciones de comando disponibles docker search o docker search imagen:tag Buscar imagen en repositorio docker pull + nombre imagen Descargar imagen de repositorio docker images o docker images --help Mostrar imágenes descargadas docker run + imagen Ejecutar contenedor, primero busca local, si no está, la descarga del registro y la ejecuta docker ps o docker ps -a Mostrar contenedores en ejecución y su estado docker run imagen + comando Ejecutar comandos en imágenes docker run -it imagen + comando Ejecutar comando modo interactivo docker run --name nombre_contenedor + imagen Crear contenedor con nombre docker start + Container ID o docker stop + Container ID Iniciar y detener contenedor docker commit + Container ID + nombre imagen Crear imagen a partir de un contenedor con cambios docker build -t nombre imagen Crear imagen a partir de un Docker file docker run -d -p puerto:puerto + nombre imagen docker inspect + contenedor|imagen Muestra información detallada del contenedor|imagen docker ps -s Muestra el tamaño del contenedor docker logs container|id Muestra los registros del contenedor docker rm $(docker ps -aq) Elimina todos los contenedores docker rmi imagen Elimina las imágenes existentes docker system prune -a Borra todo el sistema docker history contenedor Muestra las capas que contiene el contenedor docker-compose --version Muestra la versión de compose docker-compose --help Muestra las opciones de ayuda de compose docker-compose up --build Construye y ejecuta archivo docker-compose ps Muestra los procesos en ejecución docker-compose down Detiene compose docker exec -it contenedor comando Conexión a contenedor de forma interactiva
  • 29. Uso básico Docker | Moisés E. Araya [28] Alternativas. Algunas de las alternativas que existen a Docker son: • CRI-O o Es un entorno de ejecución de contenedores ligeros para Kubernetes. o https://cri-o.io/ • Podman o Motor de contenedores desarrollado por RedHat. o https://podman.io/ • RKT o Administrador de contenedores que pertenece a la distribución Linux Core OS. o https://coreos.com/rkt/ Conclusión. En este documento se han presentado los siguientes temas: • Introducción a los contenedores. • Que es Docker. • Arquitectura y componentes principales. • Docker Hub. • Instalación de Docker. • Casos de uso prácticos. • Uso de Docker compose. • Introducción a Docker Swarm. • Repaso de comandos utilizados. • Otras tecnologías de contenedores. Referencias • Documentación oficial. o https://docs.docker.com/ • Instalación Docker Compose. o https://docs.docker.com/compose/install/ o https://docs.docker.com/compose/gettingstarted/ • Documentación Swarm. o https://docs.docker.com/engine/swarm/ • Guía de instalación Docker CentOs. o https://docs.docker.com/engine/install/centos/ • Ejercicio Flask-Redis. o https://github.com/sbartek/sample_flask_with_redis • Repositorio de imágenes o http://pixabay.com