guia_rapida_de_la_linea_de_comandos_de_docker
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
guia_rapida_de_la_linea_de_comandos_de_docker [2021/05/03 22:43] – [Tipos de redes en Docker] busindre | guia_rapida_de_la_linea_de_comandos_de_docker [2022/04/20 10:53] (current) – [SBOM de las imagenes de Docker] busindre | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Docker: guía rápida de iniciación a la linea de comandos de Docker ====== | ====== Docker: guía rápida de iniciación a la linea de comandos de Docker ====== | ||
- | Manual rápido y completo de Dockerfile: [[guia_rapida_de_dockerfile]] | + | Manual rápido y completo de Dockerfile: |
+ | Manual rápido y completo de Docker Swarm: [[guia_rapida_de_docker_swarm]] | ||
Esta guía muestra los comandos más útiles para iniciarte con Docker por linea de comandos. | Esta guía muestra los comandos más útiles para iniciarte con Docker por linea de comandos. | ||
Line 239: | Line 240: | ||
- | **TMPFS** (mount tmpfs filesystems) | + | **TMPFS** (mount tmpfs filesystems). |
- | <code bash># Los parámetros | + | |
- | docker run -d --tmpfs / | + | Se utiliza para almacenar información en memoria. Sólo mantiene la información mientras el contenedor esté en ejeución, práctico para almacenar información sensible no cifrada. A diferencia de volúmenes y bind mounts, donde es posible compartir la información entre contenedores, |
+ | <code bash># Los parámetros | ||
+ | docker run -d --tmpfs / | ||
+ | # Usando la sintaxis de mount. | ||
+ | docker run -d --mount type=tmpfs, | ||
+ | </ | ||
**USER**: Seleccionar el UID/GID del proceso ejecutado dentro del contenedor. | **USER**: Seleccionar el UID/GID del proceso ejecutado dentro del contenedor. | ||
Line 249: | Line 255: | ||
<code bash> | <code bash> | ||
- | **VOLUME** : El tema de los volúmenes es muy amplio, se mostrará simplemente lo más básico. El volumen montado no es eliminado junto con al contenedor. Desde el contenedor y el anfitrión se pueden editar los permisos (los IDs deben existir en ambos naturalmente). | + | **VOLUME** : El tema de los volúmenes es muy amplio, se mostrará simplemente lo más básico. Los volúmenes se recomiendan frente a los bind mounts a la hora de almacenar datos. El volumen montado no es eliminado junto con al contenedor. Desde el contenedor y el anfitrión se pueden editar los permisos (los IDs deben existir en ambos naturalmente). |
<code bash> | <code bash> | ||
Line 261: | Line 267: | ||
**Montar una carpeta del host mediante "bind mount" | **Montar una carpeta del host mediante "bind mount" | ||
+ | |||
+ | Los bind mounts es la forma antigua de guardar datos generados por contenedores, | ||
+ | |||
+ | Una diferencia con los volúmenes es que los montajes sobre directorios no vacíos, queda oculto el contenido previamente existente, cosa que no sucede al utilizar los volúmenes. | ||
+ | |||
+ | Cuando se utiliza un bind mount, un archivo o directorio en la máquina anfitriona se monta en un contenedor. El archivo o directorio es referenciado por su ruta absoluta en el host (máquina anfitriona). Por el contrario, cuando se utiliza un volumen, se crea una nueva carpeta dentro del directorio de almacenamiento de Docker en la máquina anfitriona, y Docker gestiona el contenido de ese directorio. | ||
+ | |||
+ | No es necesario que el archivo o directorio ya exista en el host de Docker. Se crea bajo demanda si aún no existe. Los bind mounts son muy eficaces, pero dependen de que el sistema de archivos de la máquina anfitriona tenga una estructura de directorios específica disponible. | ||
<code bash> | <code bash> | ||
Line 284: | Line 298: | ||
</ | </ | ||
- | **ARG**: Al contruir imágenes las variables pueden ser sobrescirtas | + | **ARG**: Al contruir imágenes las variables pueden ser sobrescritas |
<code bash> | <code bash> | ||
Line 458: | Line 472: | ||
===== Tipos de redes en Docker ===== | ===== Tipos de redes en Docker ===== | ||
- | **bridge**: Si no especifica un controlador, | + | Por defecto, todas las instalaciones de Docker vienen con tres redes creadas por defecto, bridge, host y none. |
+ | |||
+ | **bridge**: Si no especifica un controlador, | ||
**host**: En el caso de los contenedores autónomos, elimina el aislamiento de red entre el contenedor y el host Docker, y utiliza la red del host directamente. Se recomienda su uso cuando la pila de red no debe estar aislada del host Docker, pero se quiere que otros aspectos del contenedor estén aislados. | **host**: En el caso de los contenedores autónomos, elimina el aislamiento de red entre el contenedor y el host Docker, y utiliza la red del host directamente. Se recomienda su uso cuando la pila de red no debe estar aislada del host Docker, pero se quiere que otros aspectos del contenedor estén aislados. | ||
Line 464: | Line 480: | ||
**overlay**: | **overlay**: | ||
- | **macvlan**: | + | **macvlan**: |
- | **ninguno**: | + | **ninguno**: |
**Plugins de red**: Los complementos de red de terceros permiten integrar Docker con pilas de red especializadas. Puedes instalar y utilizar plugins de red de terceros con Docker. Estos plugins están disponibles en Docker Hub o en proveedores de terceros. | **Plugins de red**: Los complementos de red de terceros permiten integrar Docker con pilas de red especializadas. Puedes instalar y utilizar plugins de red de terceros con Docker. Estos plugins están disponibles en Docker Hub o en proveedores de terceros. | ||
Line 483: | Line 499: | ||
# Sí se muestran la IP de los nodos (Peers) que implementan dicha red. | # Sí se muestran la IP de los nodos (Peers) que implementan dicha red. | ||
</ | </ | ||
+ | |||
+ | |||
+ | **Entendiendo el funcionamiento de la red bridge y su relación con las interfaces del host** | ||
+ | |||
+ | La interfaz docker0 hace referencia a esa red puente predeterminada de la que se hablo anteriormente. Cada contenedor tiene una interfaz que se conectada a esa red y es por tanto accesible desde el host en el que se ejecuta el contenedor. El contenedor o contenedores usan dicha interfaz docker0 como ruta predeterminada para salir a internet. Veamos un ejemplo práctico para entender mejor como funciona. | ||
+ | |||
+ | <code bash> | ||
+ | # Se crea un contenedor y se consultan sus interfaces: eth0@if68308 coincidirá con alguna interfaz de red creada en el host. | ||
+ | docker run -it alpine sh | ||
+ | / # ip addr | ||
+ | 1: lo: < | ||
+ | link/ | ||
+ | inet 127.0.0.1/8 scope host lo | ||
+ | | ||
+ | 68307: eth0@if68308: | ||
+ | link/ether 02: | ||
+ | inet 172.31.0.2/ | ||
+ | | ||
+ | |||
+ | # La puerta de enlace predeterminada del contenedor coincidirá con la IP que tiene la interfaz puente docker0. | ||
+ | / # ip route | ||
+ | default via 172.31.0.1 dev eth0 | ||
+ | 172.31.0.0/ | ||
+ | |||
+ | |||
+ | # Sobre el mismo host donde corre el contenedor creado anteriormente se visualizan los espacios de nombres de red. | ||
+ | # El espacio cd13b758f285 se creó al momento de crear el contenedor. | ||
+ | cd /var/run | ||
+ | ln -s / | ||
+ | ip netns | ||
+ | |||
+ | cd13b758f285 (id: 0) | ||
+ | default | ||
+ | |||
+ | |||
+ | # Se consulta la configuración de interfaces del espacio de red que está usando el contenedor: cd13b758f285. | ||
+ | # Como se puede apreciar es la misma salida que al ejecutar ip addr sobre el contenedor. | ||
+ | ip netns exec cd13b758f285 ip addr | ||
+ | |||
+ | 1: lo: < | ||
+ | link/ | ||
+ | inet 127.0.0.1/8 scope host lo | ||
+ | | ||
+ | 68307: eth0@if68308: | ||
+ | link/ether 02: | ||
+ | inet 172.31.0.2/ | ||
+ | | ||
+ | |||
+ | |||
+ | # Se consultan las instancias de puentes en el host. En este caso la interfaz puente docker0 está conectada con la interfaz virtual veth47cd93c. | ||
+ | brctl show | ||
+ | |||
+ | bridge name bridge id STP enabled interfaces | ||
+ | docker0 8000.0242cb1bbacf no veth47cd93c | ||
+ | |||
+ | |||
+ | # Se consulta las interfaces e IPs del host para poder ver la relación entre la nueva interfaz virtual veth47cd93c y la interfaz eth0 del contenedor. | ||
+ | ip addr | ||
+ | |||
+ | 1: lo: < | ||
+ | link/ | ||
+ | inet 127.0.0.1/8 scope host lo | ||
+ | | ||
+ | inet6 ::1/128 scope host | ||
+ | | ||
+ | 2: ens160: < | ||
+ | link/ether 00: | ||
+ | inet 10.0.201.26/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 15: docker0: < | ||
+ | link/ether 02: | ||
+ | inet 172.31.0.1/ | ||
+ | | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | 68308: veth47cd93c@if68307: | ||
+ | link/ether 76: | ||
+ | inet6 fe80:: | ||
+ | | ||
+ | </ | ||
+ | |||
+ | La interfaz eth0@if68308, | ||
+ | |||
+ | De no usarse la red puente predeterminada de Docker y haber creado redes puente explícitamente, | ||
+ | |||
+ | Por lo tanto una red puente unicamente tendrá una interfaz " | ||
+ | |||
+ | ===== SBOM de las imagenes de Docker ===== | ||
+ | |||
+ | Una lista de materiales de software (SBOM) enumera todos los componentes que conforman un software (o que se utilizaron para construirlo). En el caso de imágenes de contenedores, | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | docker sbom XXXX</ | ||
+ | |||
+ | |||
+ | Ejemplo. | ||
+ | <code bash> | ||
+ | docker sbom zricethezav/ | ||
+ | Syft v0.43.0 | ||
+ | ✔ Loaded image | ||
+ | ✔ Parsed image | ||
+ | ✔ Cataloged packages | ||
+ | NAME VERSION | ||
+ | alpine-baselayout | ||
+ | alpine-keys | ||
+ | apk-tools | ||
+ | bash 5.1.4-r0 | ||
+ | brotli-libs | ||
+ | busybox | ||
+ | ca-certificates | ||
+ | ca-certificates-bundle | ||
+ | expat | ||
+ | git | ||
+ | github.com/ | ||
+ | github.com/ | ||
+ | github.com/ | ||
+ | github.com/ | ||
+ | </ | ||
+ | |||
+ | Usando diferentes opciones de formato de salida se puede obtener más información, | ||
+ | <code bash> | ||
+ | docker sbom --format spdx zricethezav/ | ||
+ | Syft v0.43.0 | ||
+ | ✔ Loaded image | ||
+ | ✔ Parsed image | ||
+ | ✔ Cataloged packages | ||
+ | SPDXVersion: | ||
+ | DataLicense: | ||
+ | SPDXID: SPDXRef-DOCUMENT | ||
+ | DocumentName: | ||
+ | DocumentNamespace: | ||
+ | LicenseListVersion: | ||
+ | Creator: Organization: | ||
+ | Creator: Tool: syft-[not provided] | ||
+ | Created: 2022-04-20T08: | ||
+ | |||
+ | ##### Package: alpine-baselayout | ||
+ | |||
+ | PackageName: | ||
+ | SPDXID: SPDXRef-Package-apk-alpine-baselayout-ed18f2a986e77aab | ||
+ | PackageVersion: | ||
+ | PackageDownloadLocation: | ||
+ | FilesAnalyzed: | ||
+ | PackageLicenseConcluded: | ||
+ | PackageLicenseDeclared: | ||
+ | PackageCopyrightText: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ExternalRef: | ||
+ | ...</ |
guia_rapida_de_la_linea_de_comandos_de_docker.1620074636.txt.gz · Last modified: 2021/05/03 22:43 by busindre