Coder Social home page Coder Social logo

docker's Introduction

EPIS UNIVERSIDAD LA SALLE
FACULTAD DE INGENIERÍAS
DEPARTAMENTO DE INGENIERÍA Y MATEMÁTICAS
CARRERA PROFESIONAL DE INGENIERÍA DE SOFTWARE
GUÍA DE LABORATORIO
INFORMACIÓN BÁSICA
TÍTULO DE LA PRÁCTICA:Docker
RECURSOS:
DOCENTES:

Docker

License Downloads Last Commit

Debian Git GitHub Vim Java

OBJETIVOS Y TEMAS

OBJETIVOS

  • Aprender a desplegar contenedores con Docker.

TEMAS

  • Docker.
  • Docker vs VMs
  • Arquitectura de Docker
  • Comandos en Docker

CONTENIDO DE LA GUÍA

MARCO CONCEPTUAL

Docker

  • Docker es Software Libre.
  • Creado por Solomon Hykes en dotCloud <- Cloudlets. Liberado en marzo del 2013.
  • Crea contenedores livianos de software virtualizados en diferentes Sistemas Operativos.
  • Permite la ejecución de contenedores independientes.
  • Reduce la sobrecarga y el mantenimiento en comparación con las máquinas virtuales tradicionales.
  • Permite empaquetar una aplicación y sus dependencias en un contenedor virtual.
  • Permite la flexibilidad, portabilidad y la ejecución en cualquier medio compatible.

Diferencias entre Docker y una Máquina Virtual (VM)

Docker Engine

  • Docker engine es el motor de Docker.

  • Es el corazon de cualquier proyecto Docker.

  • Es una aplicación C/S.

  • Permite ejecutar contenedores.

  • Los contenedores de Docker se basan en imágenes.

    • Arquitectura del motor de Docker:
      • Docker-Daemon : Es un servidor que se ejecuta en el host y controla el motor de Docker. Se encarga de crear y gestionar todas las imágenes, contenedores, redes, etc.
      • API REST: Interfaz que permite a otros programas interactuar con el Daemon Docker por medio de instrucciones. (Ejemplo: Terminal).
      • La Terminal: Es la terminal del sistema opeativo como cliente del servidor a través de la API REST. Se usan scripts o comandos. Se puede ejecutar, parar o gestionar los contenedores con el comando docker.

    Arquitectura Docker

Imágenes/Contenedores en Docker

  • Son administradas por Docker-Daemon.
  • Las imágenes de Docker pueden ser creadas por el usuario a traves de la terminal.
  • La imágenes son plantillas de sólo lectura que tiene instrucciones que utiliza el motor de Docker paa crear un contenedor.
  • Una imágen se describen en un archivo de texto llamado Dockerfile.
  • Antes de iniciar un contenedor se carga un paquete con la imagen correspondiente.
  • Un contenedor es un proceso en ejecución de una imagen.

Docker Hub

  • Es el Resgistro.
  • Es un repositorio de imágenes de Docker basado en la nube.
  • Es una biblioteca para imágenes Docker.
  • Es un servicio online que tiene repositorios (Publicos y privadod). Similar a GitHub.
  • URL de Docker Hub: https://hub.docker.com/

Comandos Docker

  • Crear una imagen. Puede existir Dockerfile para esa imagen. (Local)

    docker build
  • Descargar una imagen de Docker Hub. (Remoto)

    docker pull
  • Iniciar un contenedor. (Local/Remoto)

    docker run

Instalar el Motor Docker

  • Plataformas soportadas: https://docs.docker.com/engine/install/

  • GNU/Linux, MSWindows, macOS, etc.

  • Docker Desktop para MS Windows: https://docs.docker.com/desktop/windows/install/

  • Usar arquitectura 64 bits.

  • En producción utilizar en productos con LTS((Long Term Support).

  • En Distribuciones basadas en Debian GNU/Linux

    • Actualizar las descripciones de paquete disponibles de manera local.

      sudo apt-get update
    • Instalar paquetes adicionales. Opcional: Probado en Ubuntu Trusty 14.04. La instalación de estos paquetes puede no concretarse, lo cual no es impedimento para continuar.

      sudo apt-get install -y --no-install-recommends \
      linux-image-extra-$(uname -r) \
      linux-image-extra-virtual
    • La computadora donde se realizó este manual tuvo las siguientes características:

      sudo uname -rm
      5.10.0-13-amd64 x86_64
      sudo lsb_release -a
      No LSB modules are available.
      Distributor ID  :	Debian
      Description     :	Debian GNU/Linux 11 (bullseye)
      Release         :	11
      Codename        :	bullseye

      Nota: Al ser un Debian GNU/Linux las instalaciones anteriores no se pudieron ejecutar. Lo cual no debería preocuparte. ¡Continua!.

    • Se puede instalar Docker manualmente con un paquete DEB, desde el repositorio de Docker o desde el repositorio de tu distribución.

    • La forma recomendada para instalar Docker es a través del repositorio de Docker, así que esta será la forma que se realizará:

    • Instalación de los paquetes necesarios para acceder al repositorio de Docker:

      sudo apt-get install -y --no-install-recommends \
      apt-transport-https \
      ca-certificates \
      curl \
      software-properties-common
    • Añada la llave GPG del repositorio oficial de Docker a su sistema desde https://download.docker.com/linux/

    • (a) Ejemplo para un sistema operativo Debian GNU/Linux:

      curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    • (b) Ejemplo para un sistema operativo Ubuntu:

      curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    • Agregue el repositorio de Docker a las fuentes de APT:

    • (c) Ejemplo para un sistema operativo Ubuntu:

      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

      dists: artful, bionic, cosmic, disco, eoan, focal, groovy, hirsute, impish, jammy, trusty, xenial, yakkety, zesty.

    • (d) Ejemplo para un sistema operativo Debian GNU/Linux:

      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian bullseye stable"

      dists: bullseye, buster, jessie, stretch, wheezy.

    • Actualice el paquete de base de datos con los paquetes de Docker del repositorio recién agregado

      sudo apt update
    • Verifique candidato para docker-ce:

      apt-cache policy docker-ce
      docker-ce:
          Instalados: 5:20.10.14~3-0~debian-bullseye or (none)
          Candidato:  5:20.10.16~3-0~debian-bullseye
          5:20.10.16~3-0~debian-bullseye 500
              500 https://download.docker.com/linux/debian bullseye/stable amd64 Packages
          ...
    • Instale Docker:

      sudo apt install docker-ce
    • Compruebe que funcione:

      sudo systemctl status docker
      ● docker.service - Docker Application Container Engine
          Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
          Active: active (running) since Mon 2022-05-16 17:26:47 -05; 18min ago
      TriggeredBy: ● docker.socket
          Docs: https://docs.docker.com
      Main PID: 1264 (dockerd)
          Tasks: 31
          Memory: 134.7M
              CPU: 1.103s
          CGroup: /system.slice/docker.service
                  └─1264 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Ejecutar el comando Docker sin sudo

  • Por defecto, el comando docker solo puede ser ejecutado por el usuario root o un usuario del grupo docker.

    sudo usermod -aG docker ${USER}
  • Ahora su usuario se agregó al grupo docker

    id -nG

Usar comandos docker

  • Opciones, comandos y argumentos

    docker [option] [command] [arguments]
    docker
    docker info
    docker images --help
    docker ps --help
    docker rm --help
  • Los contenedores de Docker se construyen con imágenes de Docker Hub(Por defecto).

    docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete 
    Digest: sha256:80f31da1ac7b312ba29d65080fddf797dd76acfb870e677f390d5acba9741b17
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
  • buscar imágenes disponibles en Docker Hub

    docker search ubuntu
  • Descargar la imagen oficial de ubuntu a su ordenador:

    docker pull ubuntu
  • Ejecutemos un contenedor usando la imagen más reciente de Ubuntu

    docker run -it ubuntu
    
    root@c25d89d863b2:/#
  • Trabaja dentro del contenedor

    root@c25d89d863b2:/# apt-get update
    root@c25d89d863b2:/# apt-get install apache2
    root@c25d89d863b2:/# /etc/init.d/apache2 status
    root@c25d89d863b2:/# /etc/init.d/apache2 start
    root@c25d89d863b2:/# /etc/init.d/apache2 status
    root@c25d89d863b2:/# exit
  • Administrar contenedores de Docker

    docker ps
    docker ps -a
    docker ps -l
    docker start -i c25d89d863b2

EJERCICIO RESUELTO POR EL DOCENTE

  • Crear un contenedor con las siglas del curso y el año actual

    docker run -it --name rcd22 ubuntu
    docker -ps -a
    CONTAINER ID   IMAGE         COMMAND    CREATED              STATUS                          PORTS     NAMES
    5f934a64ee98   ubuntu        "bash"     About a minute ago   Exited (0) About a minute ago             rcd22
    
  • Trabaje dentro del contenedor que acaba de crear:

    • Instale el servidor Web Apache HTTP server 2.x

    • Tener un firewall UFW configurado para que restrinja el acceso a su servidor.

    • Inicie por defecto Apache2.

    • Cree una pagina de Bienvenida.

      root@5f934a64ee98:/# apt-get update
      root@5f934a64ee98:/# apt-get install apache2
      root@5f934a64ee98:/# /etc/init.d/apache2 status
      root@5f934a64ee98:/# /etc/init.d/apache2 start
      root@5f934a64ee98:/# /etc/init.d/apache2 status
      root@5f934a64ee98:/# apt-get install ufw
      root@5f934a64ee98:/# ufw app list
      root@5f934a64ee98:/# ufw allow 'Apache'
      root@5f934a64ee98:/# ufw app list
      root@5f934a64ee98:/# apt-get install systemctl
      root@5f934a64ee98:/# apache2ctl enable apache2
      root@5f934a64ee98:/# echo "Bienvenido a mi contenedor Docker para RCD22" > /var/www/html/index.html
      root@5f934a64ee98:/# echo "Atentamente, Richart Escobedo" >> /var/www/html/index.html
      root@5f934a64ee98:/# cat /var/www/html/index.html
  • crear una imagen a partir de un contenedor:

    docker commit 5f934a64ee98 rcd22image
  • Instale una imagen que ya tenga el servidor Web Apache HTTP Server 2.x y ejecutela en el afitrion en un puerto determinado.

    docker search httpd
    docker run -p 8088:80 httpd

EJERCICIOS PROPUESTOS

    1. Realice los cambios necesarios para que la imagen que ud creo a partir de un contenedor personalizado se pueda acceder al servidor web desde el equipo anfitríon.
    docker run -p 8088:80 rcd22image
    1. Crear dos contenedores que puedan comunicarse: ping.
    1. Investigar acerca de la ejecución de programas con interfaz gráfica dentro de contenedores Docker.

CUESTIONARIO

  • ¿Qué son los "cgroups" del kernel de Linux? y ¿Qué diferencia más interesante encontró entre las versiones 1 y 2?
  • ¿Qué son los "namespaces" del kernel de Linux? y ¿Cuáles son los tipos de "namespaces"?
  • ¿Qué diferencia puede resaltar entre LXC y libcontainer?
  • Investigue acerca del malware Doki y explique brevemente.
  • ¿Hasta que punto la empresa RedHat se ha comprometido con el proyecto Docker?

REFERENCIAS

Debian Git GitHub Vim Java

License Downloads Last Commit

docker's People

Contributors

rescobedoulasalle avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.