Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:cursos:docker_avanzado

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:sistemas_operativos:cursos:docker_avanzado [2023/10/09 20:18] – [Eliminar un contenedor] tempwininformatica:sistemas_operativos:cursos:docker_avanzado [2023/10/19 18:42] (actual) – [Recursos] tempwin
Línea 12: Línea 12:
 soluciones basadas en contenedores desde el punto de vista de la seguridad y la escalabilidad soluciones basadas en contenedores desde el punto de vista de la seguridad y la escalabilidad
  
-===== Temario =====+===== Temario oficial =====
  
   * 1. [[informatica:sistemas_operativos:cursos:docker_avanzado:seguridad_contenedores|Seguridad de los contenedores]]   * 1. [[informatica:sistemas_operativos:cursos:docker_avanzado:seguridad_contenedores|Seguridad de los contenedores]]
Línea 34: Línea 34:
     * Auditoría de la plataforma Docker     * Auditoría de la plataforma Docker
  
 +===== Temario real =====
 +
 +  * Módulo 1: [[informatica:sistemas_operativos:cursos:docker_avanzado:el_porque_de_los_contenedores|El porqué de los contenedores]]
 +  * Módulo 2: [[informatica:sistemas_operativos:cursos:docker_avanzado:instalacion|Instalación]]
 +  * Módulo 3: [[informatica:sistemas_operativos:cursos:docker_avanzado:primeros_pasos|Primeros pasos]]
 +  * Módulo 4: [[informatica:sistemas_operativos:cursos:docker_avanzado:fundamentos_docker|Fundamentos de Docker]]
 +  * Módulo 5: [[informatica:sistemas_operativos:cursos:docker_avanzado:uso_de_docker_en_desarrollo|Uso de Docker en Desarrollo]]
 +  * Módulo 6: [[informatica:sistemas_operativos:cursos:docker_avanzado:creacion_de_una_aplicacion_web_de_ejemplo|Creación de una aplicación web de ejemplo]]
 +  * Módulo 7: [[informatica:sistemas_operativos:cursos:docker_avanzado:distribucion_de_imagenes|Distribución de imágenes]]
 +  * Módulo 8: [[informatica:sistemas_operativos:cursos:docker_avanzado:integracion_continua_y_testing_con_docker|Integración continua y testing con Docker]]
 +  * Módulo 9: [[informatica:sistemas_operativos:cursos:docker_avanzado:despliegue_de_containers|Despliegue de containers]]
 +  * Módulo 10: [[informatica:sistemas_operativos:cursos:docker_avanzado:networking_y_service_discovery|Networking y Service Discovery]]
 +  * Módulo 11: [[informatica:sistemas_operativos:cursos:docker_avanzado:orquestacion_clustering_gestion|Orquestación, clustering y gestión]]
 +
 +  * [[informatica:sistemas_operativos:cursos:docker_avanzado:ejercicios_practicos|Ejercicios prácticos / guiados]].
 +  * [[informatica:sistemas_operativos:cursos:docker_avanzado:tests|Tests]]
 ===== Notas ===== ===== Notas =====
  
 Profesores: Profesores:
  
-  * Antonio Varela (está certificado en Docker)+  * Antonio Varela Nieto (antonio.varela@teslatechnologies.com) (está certificado en Docker)
   * ESTEBAN VAZQUEZ FERREIRO   * ESTEBAN VAZQUEZ FERREIRO
  
Línea 198: Línea 214:
     * En la actualidad los principales actores cloud ofrecen completísimas opciones de despliegue de contenedores en sus infraestructuras (Amazon Web Services, Microsoft Azure, Google Compute Engine)     * En la actualidad los principales actores cloud ofrecen completísimas opciones de despliegue de contenedores en sus infraestructuras (Amazon Web Services, Microsoft Azure, Google Compute Engine)
     * Todos ellos soportan Kubernetes para permitir despliegues más complejos de múltiples contenedores orquestados para trabajar y escalar de forma independiente.     * Todos ellos soportan Kubernetes para permitir despliegues más complejos de múltiples contenedores orquestados para trabajar y escalar de forma independiente.
 +
 +
 +<WRAP center round info 60%>
 +Podman, Buildah y skopeo es la alternativa que ofrece Red Hat a Docker containers. Docker y Podman respetan el estándar [[https://es.wikipedia.org/wiki/Open_Container_Initiative|OCI]]. La gran diferencia es que en Podman no existe un demonio como Docker Engine.
 +</WRAP>
  
 ===== Instalación ===== ===== Instalación =====
Línea 377: Línea 398:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-Como las imágenes, los contenedores también nombres / identificadores únicos.+Como las imágenes, los contenedores también tienen nombres / identificadores únicos.
 </WRAP> </WRAP>
  
 +Podemos darle un nombre al contenedor que queremos crear con la opción ''%%--%%name'':
  
 +<code>
 +docker run --name mi-contenedor -it ubuntu /bin/bash
 +</code>
 +
 +De esta manera, si volvemos a ejecutar el comando, no nos dejará porque no podemos tener dos contenedores con el mismo nombre. Recordemos que tanto el nombre como el ID identifica un contenedor.
 +
 +Crear un contenedor en modo "background" (de fondo) y ejecutando un bucle infinito para que no se pare:
 +<code>
 +docker run --name mydaemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
 +</code>
 +
 +Miramos que esté en ejecución el contenedor anterior:
 +
 +<code>
 +docker ps
 +</code>
 +
 +Podemos ver la salida del contenedor:
 +
 +<code>
 +docker logs mydaemon
 +</code>
 +
 +Para ver en tiempo real la salida:
 +
 +<code>
 +docker logs -ft 10 mydaemon
 +</code>
 +
 +Para ver la lista de procesos dentro del contendor (sin tener que entrar en él):
 +
 +<code>
 +docker top mydaemon
 +</code>
 +
 +==== docker inspect ====
 +
 +Comando que da información extendida sobre un contenedor.
 +
 +<code>
 +docker inspect mi-contenedor
 +</code>
 +
 +Ejemplo de salida:
 +
 +<code>
 +[
 +    {
 +        "Id": "08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6",
 +        "Created": "2023-10-09T18:26:20.92818159Z",
 +        "Path": "/bin/sh",
 +        "Args": [
 +            "-c",
 +            "while true; do echo hello world; sleep 1; done"
 +        ],
 +        "State": {
 +            "Status": "running",
 +            "Running": true,
 +            "Paused": false,
 +            "Restarting": false,
 +            "OOMKilled": false,
 +            "Dead": false,
 +            "Pid": 192214,
 +            "ExitCode": 0,
 +            "Error": "",
 +            "StartedAt": "2023-10-09T18:26:21.354420029Z",
 +            "FinishedAt": "0001-01-01T00:00:00Z"
 +        },
 +        "Image": "sha256:3565a89d9e81a4cb4cb2b0d947c7c11227a3f358dc216d19fc54bfd77cd5b542",
 +        "ResolvConfPath": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-8cce-d868e42e9fdb/docker/containers/08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6/resolv.conf",
 +        "HostnamePath": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-8cce-d868e42e9fdb/docker/containers/08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6/hostname",
 +        "HostsPath": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-8cce-d868e42e9fdb/docker/containers/08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6/hosts",
 +        "LogPath": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-8cce-d868e42e9fdb/docker/containers/08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6/08d1311242a61620b8dd03b951ef66f5dc63d82d35ba17fda9cdf80d3d9844d6-json.log",
 +        "Name": "/mydaemon",
 +        "RestartCount": 0,
 +        "Driver": "overlay2",
 +        "Platform": "linux",
 +        "MountLabel": "",
 +        "ProcessLabel": "",
 +        "AppArmorProfile": "",
 +        "ExecIDs": null,
 +        "HostConfig": {
 +            "Binds": null,
 +            "ContainerIDFile": "",
 +            "LogConfig": {
 +                "Type": "json-file",
 +                "Config": {}
 +            },
 +            "NetworkMode": "default",
 +            "PortBindings": {},
 +            "RestartPolicy": {
 +                "Name": "no",
 +                "MaximumRetryCount": 0
 +            },
 +            "AutoRemove": false,
 +            "VolumeDriver": "",
 +            "VolumesFrom": null,
 +            "ConsoleSize": [
 +                36,
 +                188
 +            ],
 +            "CapAdd": null,
 +            "CapDrop": null,
 +            "CgroupnsMode": "private",
 +            "Dns": [],
 +            "DnsOptions": [],
 +            "DnsSearch": [],
 +            "ExtraHosts": null,
 +            "GroupAdd": null,
 +            "IpcMode": "private",
 +            "Cgroup": "",
 +            "Links": null,
 +            "OomScoreAdj": 0,
 +            "PidMode": "",
 +            "Privileged": false,
 +            "PublishAllPorts": false,
 +            "ReadonlyRootfs": false,
 +            "SecurityOpt": null,
 +            "UTSMode": "",
 +            "UsernsMode": "",
 +            "ShmSize": 67108864,
 +            "Runtime": "runc",
 +            "Isolation": "",
 +            "CpuShares": 0,
 +            "Memory": 0,
 +            "NanoCpus": 0,
 +            "CgroupParent": "",
 +            "BlkioWeight": 0,
 +            "BlkioWeightDevice": [],
 +            "BlkioDeviceReadBps": [],
 +            "BlkioDeviceWriteBps": [],
 +            "BlkioDeviceReadIOps": [],
 +            "BlkioDeviceWriteIOps": [],
 +            "CpuPeriod": 0,
 +            "CpuQuota": 0,
 +            "CpuRealtimePeriod": 0,
 +            "CpuRealtimeRuntime": 0,
 +            "CpusetCpus": "",
 +            "CpusetMems": "",
 +            "Devices": [],
 +            "DeviceCgroupRules": null,
 +            "DeviceRequests": null,
 +            "MemoryReservation": 0,
 +            "MemorySwap": 0,
 +            "MemorySwappiness": null,
 +            "OomKillDisable": null,
 +            "PidsLimit": null,
 +            "Ulimits": null,
 +            "CpuCount": 0,
 +            "CpuPercent": 0,
 +            "IOMaximumIOps": 0,
 +            "IOMaximumBandwidth": 0,
 +            "MaskedPaths": [
 +                "/proc/asound",
 +                "/proc/acpi",
 +                "/proc/kcore",
 +                "/proc/keys",
 +                "/proc/latency_stats",
 +                "/proc/timer_list",
 +                "/proc/timer_stats",
 +                "/proc/sched_debug",
 +                "/proc/scsi",
 +                "/sys/firmware"
 +            ],
 +            "ReadonlyPaths": [
 +                "/proc/bus",
 +                "/proc/fs",
 +                "/proc/irq",
 +                "/proc/sys",
 +                "/proc/sysrq-trigger"
 +            ]
 +        },
 +        "GraphDriver": {
 +            "Data": {
 +                "LowerDir": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-cc8e-d868e42e9fdb/docker/overlay2/befdb5ff531519676951b62dcbaa449dc9a2fce322b05ba049f13475bc8132cf-init/diff:/srv/dev-disk-by-uuid-d8848615-8168-4fba-8cce-d868e42e9fdb/docker/overlay2/37e0fab9210ae886a0eff914fa60be829e336c6f4b201dd5141d6839f5898d79/diff",
 +                "MergedDir": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-cc8e-d868e42e9fdb/docker/overlay2/befdb5ff531519676951b62dcbaa449dc9a2fce322b05ba049f13475bc8132cf/merged",
 +                "UpperDir": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-cc8e-d868e42e9fdb/docker/overlay2/befdb5ff531519676951b62dcbaa449dc9a2fce322b05ba049f13475bc8132cf/diff",
 +                "WorkDir": "/srv/dev-disk-by-uuid-d8848615-8168-4fba-cc8e-d868e42e9fdb/docker/overlay2/befdb5ff531519676951b62dcbaa449dc9a2fce322b05ba049f13475bc8132cf/work"
 +            },
 +            "Name": "overlay2"
 +        },
 +        "Mounts": [],
 +        "Config": {
 +            "Hostname": "08d1311242a6",
 +            "Domainname": "",
 +            "User": "",
 +            "AttachStdin": false,
 +            "AttachStdout": false,
 +            "AttachStderr": false,
 +            "Tty": false,
 +            "OpenStdin": false,
 +            "StdinOnce": false,
 +            "Env": [
 +                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 +            ],
 +            "Cmd": [
 +                "/bin/sh",
 +                "-c",
 +                "while true; do echo hello world; sleep 1; done"
 +            ],
 +            "Image": "ubuntu",
 +            "Volumes": null,
 +            "WorkingDir": "",
 +            "Entrypoint": null,
 +            "OnBuild": null,
 +            "Labels": {
 +                "org.opencontainers.image.ref.name": "ubuntu",
 +                "org.opencontainers.image.version": "22.04"
 +            }
 +        },
 +        "NetworkSettings": {
 +            "Bridge": "",
 +            "SandboxID": "4a5cbec72d8ed785cab1167730d4872c9c5bf627b435566dee54548ea74cc8e9",
 +            "HairpinMode": false,
 +            "LinkLocalIPv6Address": "",
 +            "LinkLocalIPv6PrefixLen": 0,
 +            "Ports": {},
 +            "SandboxKey": "/var/run/docker/netns/4a5cbec72d8e",
 +            "SecondaryIPAddresses": null,
 +            "SecondaryIPv6Addresses": null,
 +            "EndpointID": "5cc996b631769af9085216ccc8ec1009c676e5033b7126612d72317482aa313c",
 +            "Gateway": "172.17.0.1",
 +            "GlobalIPv6Address": "",
 +            "GlobalIPv6PrefixLen": 0,
 +            "IPAddress": "172.17.0.2",
 +            "IPPrefixLen": 16,
 +            "IPv6Gateway": "",
 +            "MacAddress": "02:42:ac:11:00:02",
 +            "Networks": {
 +                "bridge": {
 +                    "IPAMConfig": null,
 +                    "Links": null,
 +                    "Aliases": null,
 +                    "NetworkID": "3030bfecb10961fecc8ea4930975a55e4c4a7f5bd6e36bbf6682c5b1c8896696",
 +                    "EndpointID": "5cc996b631769af90cc8e6c161ac1009c676e5033b7126612d72317482aa313c",
 +                    "Gateway": "172.17.0.1",
 +                    "IPAddress": "172.17.0.2",
 +                    "IPPrefixLen": 16,
 +                    "IPv6Gateway": "",
 +                    "GlobalIPv6Address": "",
 +                    "GlobalIPv6PrefixLen": 0,
 +                    "MacAddress": "02:42:ac:11:00:02",
 +                    "DriverOpts": null
 +                }
 +            }
 +        }
 +    }
 +]
 +</code>
 +
 +Para coger una parte de esa salida, por ejemplo, la dirección IP del contenedor:
 +
 +<code>
 +docker inspect -f='{{.NetworkSettings.IPAddress}}'  mydaemon 
 +</code>
 +
 +La sintaxis es [[https://support.smartbear.com/alertsite/docs/monitors/api/endpoint/jsonpath.html|JSONPath]].
 ==== Busybox ==== ==== Busybox ====
  
Línea 533: Línea 812:
  
  
 +===== Recursos =====
 +
 +  * https://www.redhat.com/en/interactive-labs: laboratorios gratuitos de Red Hat
 +  * https://killercoda.com: laboratorios con contenedores.
 +  * [[https://labs.play-with-docker.com/|Play with Docker]]: probar Docker desde el navegador.
 +  * [[https://dockerlabs.collabnix.com/|Getting Started with Docker]]: laboratorios guiados de Docker.
informatica/sistemas_operativos/cursos/docker_avanzado.1696875533.txt.gz · Última modificación: por tempwin