Docker (software)

**Docker** é un conxunto de produtos de plataforma como servizo (PaaS) que empregan a virtualización a nivel de sistema operativo para entregar software en paquetes denominados contedores. O servizo ten tanto versión gratuíta como de pago. O software que aloxa os contedores chámase **Docker Engine**. Foi lanzado en 2013 e é desenvolvido por **Docker**, Inc.

Docker é unha ferramenta usada para automatizar o despregamento de aplicacións en contedores lixeiros, de modo que as aplicacións poidan traballar de xeito eficaz en distintos ambientes illados.

## Antecedentes 
Os contedores están illados entre eles e inclúen o seu propio software, bibliotecas e ficheiros de configuración. Poden comunicarse entre eles mediante canles ben definidas. Como todos os contedores comparten os servizos dun único kernel, utilizan menos recursos que as máquinas virtuais.

### Operación 
miniatura|Docker pode utilizar diferentes interfaces  para acceder a características de virtualization do kernel de Linux.
Docker pode empaquetar unha aplicación e as súas dependencias nun contedor virtual que pode correr en calquera computador Linux, Windows, ou macOS. Isto permite que a aplicación poida executarse en distintas localizacións: coma software local (en inglés: on*-premises software*), en público (*ver* *computación descentralizada*, *computación distribuída*, e *computación na nube*) ou nunha nube privada. Cando corre en Linux, Docker emprega as características do illamento de recursos do kernel de Linux (como os cgroups e os kernel namespaces) e un sistema de ficheiros con capacidade de unión sistema de ficheiros con capacidade de unión (como OverlayFS) para permitir que os contedores corran cunha soa instancia de Linux, evitando a sobrecarga de iniciar e manter as máquinas virtuais. En macOS Docker utiliza unnha máquina virtual de Linux para executar os contedores.

Como os contedores de Docker son lixeiros, un só servidor ou máquina virtual pode correr varios contedores simultaneamente. Unha análise de 2018 descubriu que un caso de uso típico de Docker implica executar oito contedores por host, e que unha cuarta parte das organizacións analizadas executan 18 ou máis por host. Tamén pode ser instalado nunha computadora monoplaca como a Raspberry Pi.

A compatibilidade do kernel de Linux con espazos de nomes illa principalmente a vista dunha aplicación do ambiente operativo, incluíndo árbores de procesos, redes, IDs de usuario e sistemas de ficheiros montados, mentres que os grupos de control do kernel limitan os recursos para a memoria e a CPU. Dende a versión 0.9, Docker inclúe o seu propio compoñente (chamado ) para utilizar facilidades de virtualización proporcionadas directamente polo kernel de Linux, ademais de usar interfaces abstractas de virtualización vía libvirt, LXC e systemd-nspawn.

Docker implementa unha API de alto nivel para proporcionar contedores lixeiros que corren procesos en illamento.

## Modelo de licenzas 
* O motor de Docker está baixo a licenza Apache 2.0. Docker Desktop distribúe algúns compoñentes  baixo a Licenza Pública Xeral GNU. Docker Desktop non é de balde para empresas grandes.
* Os ficheiros Dockerfile poden estar baixo unha licenza libre (open-source). O alcance da licenza só afecta ao Dockerfile e non á imaxe do colector.

## Compoñentes 
O que ofrece o software como servizo de Docker consiste en tres compoñentes:

* **Software**: o demo ou daemon de Docker, chamado `dockerd`, é un proceso persistente que administra os contedores de Docker e xestiona os obxectos dos contedores. O daemon escoita peticións enviadas a través da API do Docker Engine. O programa de cliente de Docker, chamado `docker`, proporciona unha interface de liña de comandos (CLI) que permite aos usuarios interactuar cos daemons de Docker.
* **Obxectos**: os obxectos de Docker son varias entidades empregadas para ensamblar unha aplicación en Docker. As clases principais de obxectos de Docker son imaxes, contedores, e servizos.
** Un **contedor** Docker é un ambiente encapsulado estandarizado que corre aplicacións. Un contedor é xestionado utilizando a API de Docker ou o CLI.
** Unha **imaxe** de Docker é un modelo de solo lectura empregado para construír contedores. As imaxes úsanse para almacenar e enviar aplicaciones.
** Un **servizo** de Docker permite escalar contedores entre múltiples daemons de Docker. O resultado é coñecido como *swarm* (enxame), un conxunto de daemons cooperativos que comunícanse a través da API de Docker.
* **Rexistros**: un rexistro de Docker é un repositorio para imaces de Docker. Os clientes de Docker conéctanse aos rexistros para descargar ("pull") imaces que construíron. Os rexistros poden ser públicos ou privados. O principal rexistro público é o Docker Hub. Docker Hub é o rexistro principal onde Docker busca imaxes. Os rexistros de Docker tamén permiten a creación de notificacións baseadas en eventos.

### Dockerfile (Exemplo) 
Un Dockerfile é un ficheiro de texto que xeralmente especifica varios aspectos dun contedor de Docker: a distribución de Linux, comandos de instalación para a contorna de execución da linguaxe de programación e o código fonte da aplicación.

Un exemplo dun Dockerfile:
```dockerfile
ARG CODE_VERSION=latest
FROM ubuntu:${CODE_VERSION}
COPY ./examplefile.txt /examplefile.txt
ENV MY_ENV_VARIABLE="example_value"
RUN apt-get update

# Mount a directory from the Docker volume
# Note: This is usually specified in the 'docker run' command.
VOLUME ["/myvolume"]

# Expose a port (22 for SSH)
EXPOSE 22
```

### Ferramentas 
* **Docker Compose** é unha ferramenta para definir e correr aplicacións con múltiples contedores Docker. Emprega ficheiros YAML para configurar os servizos da aplicación e executa o proceso de creación e inicio de todos os contedores cun só comando. O CLI de Docker Compose permite aos usuarios executar comandos en distintos contedores dunha vez; por exemplo, construíndo imaxes, escalando contedores, correndo contedores que foron parados, e máis. As ordes relacionadas coa manipulación dunha imaxe, ou opcións interactivas co usuario, non son relevantes en Docker Compose xa que só se dirixen a un contedor. O ficheiro **docker-compose.yml** emprégase para definir os servizos dunha aplicación e inclúe varias opcións de configuración. Por exemplo, a opción de `build` define opcións de configuración como o path do Dockerfile, a opción de `command` permite sobreescribir un comando de Docker por defecto, e máis. A primeira versión beta pública Docker Compose (versión 0.0.1) lanzouse o 21 de decembro de 2013. A primeira versión lista para produción (1.0) fíxose dispoñible o 16 de outubro de 2014.
* **Docker Swarm** proporciona unha funcionalidade de agrupamento en clústeres nativa para conteñedores Docker, o que converte un grupo de motores Docker nun só motor virtual Docker. En Docker 1.12 e superior, o modo Swarm está integrado co Docker Engine. A utilidade do CLI do `docker swarm` permite aos usuarios correr contedores Swarm, crear tokens de descubrimento, listar nodos no clúster, e máis. A utilidade do CLI do d`ocker node` permite aos usuarios executar varios comandos para administrar nodos dun enxame, por exemplo, listar os nodos dun enxame, actualizar nodos ou eliminar nodos do enxame. Docker xestiona os enxames utilizando o algoritmo de consenso Raft. Segundo Raft, para realizar unha actualización, a maioría dos nodos do enxame deben de estar de acordo. Ademais do CLI do `docker swarm,` o `docker stack` é unha ferramenta deseñada para administrar os servizos Swarm con maior flexibilidade. Pode utilizar un arquivo de configuración moi similar a un docker-compose.yml, con algúns matices. Usar `docker stack` en vez de `docker compose` ofrece varias vantaxes, como a habilidade de manexar clúster Swarm a través de múltiples máquinas, ou a capacidade de traballar con `docker secret` combinado con `docker context`, unha característica que permite executar comandos de Docker nun host remoto, habilitando a administración dun contedor remoto.

* **Docker Volume** facilita a persistencia independente dos datos, permitindo manter os datos incluso tras a eliminación ou recreación do contedor.

## Historia 
dotCloud O inc. foi fundada por Kamel Founadi, Solomon Hykes, e Sebastien Pahl durante o grupo de incubación de startups do verán de 2010 Y Combinator e lanzada en 2011, e rebautizado a Docker Inc en 2013. Hykes comezou co proxecto Docker en Francia como un proxecto interno dentro de dotCloud, unha compañía de plataforma-como-servizo.

Docker saíu ao público en Santa Clara na PyCon no 2013. Foi lanzado como código aberto en marzo de 2013. Nese momento, usaba LXC como o seu ambiente de execución predeterminado. Un ano máis tarde, coa liberación de versión 0.9, Docker substituíu LXC co seu compoñente propio, *libcontainer*, o cal foi escrito na linguaxe de programación Go.

En 2017, Docker creou o proxecto Moby pola investigación e o desenvolvemento aberto.

### Adopción 
* 19 de setembro de 2013: Red Hat e Docker anunciaron unha colaboración ao redor de Fedora, Red Har Enterprise Linux (RHEL), e OpenShift.
* 15 de outubro de 2014: Microsoft anunciou a integración do motor de Docker no Windows Server, así como soporte nativo para a función de cliente de Docker en Windows.
* Novembro de 2014: os servizos dos contedores Docker foron anunciados para o Amazon Elastic Compute Cloud (EC2).
* 10 de novembro de 2014: Docker anunciou unha asociación con Stratoscale.
* 4 de decembro de 2014: IBM anunciou unha asociación estratéxica con Docker que habilitaba a Docker a integrarse máis estreitamente coa nube de IBM.
* 22 de xuño de 2015: Docker e moitos outras empresas anunciaron que estaban a traballar nun novo estándar para contedores de software independente do provedor e do sistema operativo.
* Decembro de 2015: Oracle Cloud engadiu soporte para os contedores Docker tras adquirir StackEngine, unha startup de contedores Docker.
* Abril de 2016: Windocks, un provedor de software independente, lanzou unnha versión do proxecto de código libre de Docker a Windows, compatible con Windows Server 2012 R2 e Server 2016, con todas as edicións de SQL Server 2008 en diante.
* Maio de 2016: análises mostraron as seguintes organizacións como as principais contribuíntes a Docker: o equipo Docker, Cisco, Google, Huawei, IBM, Microsoft, e Red Hat.
* 8 de xuño de 2016: Microsoft anunciou que Docker agora podería ser utilizado de forma nativa en Windows 10.
* Xaneiro de 2017: unha análise de mencións de perfís en LinkedIn mostrou que a presenza de Docker creceu un 160% en 2016.
* 6 de maio de 2019: Microsoft anunciou a segunda versión de Windows Subsystem for Linux (WSL). Docker, Inc. anunciou que tiñan empezado a traballar nunha versión de Docker para Windows para correr en WSL 2. En particular, isto significaba que Docker podería correr en Windows 10 Home (anteriormente foi limitado a Windows Pro e Enterprise xa que usaba Hyper-V).
* Agosto de 2020: Microsoft anunciou unha retrocompatibilidade de WSL2 ás versións 1903 e 1909 de Windows 10 (anteriormente, WSL2 só estaba dispoñible na versión 2004) e os desenvolvedores de Docker anunciaron a dispoñibilidade de Docker para estas plataformas.
* Agosto de 2021: Docker Desktop para Windows e MacOS deixaron de estar dispoñibles de balde para usuarios empresariais. Docker puxo fin ao uso gratuíto de Docker Desktop para os clientes empresariais máis grandes e substituíu o seu Plan Gratuíto por un Plan Persoal. Docker Engine en distribucións de Linux non se viu afectado.
* Decembro de 2023: Docker adquiriu AtomicJar para expandir as súas capacidades de testing.

## Notas 
## Véxase tamén 
### Ligazóns externas 
* Web oficial