![]() |
UNIVERSIDAD LA SALLE FACULTAD DE INGENIERÍAS DEPARTAMENTO DE INGENIERÍA Y MATEMÁTICAS CARRERA PROFESIONAL DE INGENIERÍA DE SOFTWARE |
---|
INFORMACIÓN BÁSICA | |
---|---|
TÍTULO DE LA PRÁCTICA: | Docker |
RECURSOS:
|
|
DOCENTES:
|
- Aprender a desplegar contenedores con Docker.
- Docker.
- Docker vs VMs
- Arquitectura de Docker
- Comandos en 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.
-
Docker no necesita crear sistemas operativos independientes.
-
Con Docker se construye sólo una vez y se ejecuta en cualquier lugar. Leer: Docker: A 'Shipping Container' for Linux Code
-
Docker utiliza funcionalidades del kernel aislando recursos (CPU, Memoria, E/S, Net, etc.)
-
Docker simplifica la creación de Sistemas Distribuidos.
-
Docker es PaaS (Plataforma como servicio).
-
Docker se puede integrar facilmente con AWS, GCP, DO, MA, RHOS, etc.
-
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 del motor de 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.
- 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/
-
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
-
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
-
-
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
-
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
-
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
-
- 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
-
- Crear dos contenedores que puedan comunicarse: ping.
-
- Investigar acerca de la ejecución de programas con interfaz gráfica dentro de contenedores Docker.
- ¿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?