lunes, 7 de octubre de 2019

Docker en Windows parte 4: Administrando Docker con Eclipse

Vamos con la 4ta parte del tutorial con un tema práctico.

Ir a parte 3: https://naldog.blogspot.com/2019/09/docker-en-windows-parte-3-comandos.html
Ir a parte 5: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-5-hola-mundo.html
_________________________________________________

Administrando Docker en Eclipse

Para muchos, manejar docker con Eclipse es más cómodo. Primero baja el IDE Eclipse: https://www.eclipse.org/downloads/

Luego instálalo.

Antes de ejecutarlo, ve a las opciones de la ballenita, botón derecho Settings y activa Expose daemon on tcp://localhost:2375 without TLS.

Luego abre Eclipse.
Ir a Help -> Eclipse Marketplace, bajar Eclipse Docker Tooling.
Ahora en Window -> Preferences tendrás una nueva sección Docker.

Allí en sub-sección Docker Machine.
En campo Docker Machine coloca la ruta de docker-machine.exe, es decir:
C:\Program Files\Docker\Docker\resources\bin
En campo VM Driver déjalo en blanco ya que estamos sin Virtual Box.

Luego ir a Open Perspective y selecciona Docker Tooling

Dirá que no hay conexión creada, créala, dale un nombre, ejemplo local para diferenciar si tienes docker locales o en la nube, y selecciona opción TCP.
Escribe la URI
tcp://localhost:2375
luego presiona Test Connection y debe decir que está ok.

Luego si ves la sección Images verás las imágenes que tienes bajadas con su ID, nombre, fecha de creación, tamaño. Bastante cómodo.
Con F5 se actualiza.

En la parte de Containers se ven los contenedores que tienes corriendo, que imagen tiene asociada, puerto tienen mapeados (publico y del docker), el estado si está corriendo (UP to x tiempo) o si está detenido (Exited).

Puedes hacer tareas de administración como Restart del contenedor o ver logs (generados dentro del mismo contenedor).

Antes de eliminar un contenedor debes detenerlo.

Puedes buscar imágenes. Te paras en Images, botón derecho Pull, luego Search.

Saldrán todas las imágenes con "hello". Si dice Oficial es mantenida por la propia Docker. Si dice utomate, indica que es creada por script. En el fondo, prefiere Official ya que nadie le mete mano con cosas malas. O al menos utomate ya que puedes ver el script y ver que no tiene nada raro.
Si no dice nada, no recomiendo usarla.

Si pones Next se verán las etiquetas de las versiones de esa imagen. Selecciona Latest y Finish.

Saldrá un resumen. Con Finish se bajará:

Una vez se baja, sobre la imagen, botón derecho Run

Se ve el detalle, colócale un nombre "test" y activa los 3 primeros checks.

Presiona Finish. Y correrá el docker una vez mostrando el Hola Mundo. 
Como seleccionamos en el paso anterior (ultimo check) que se elimine el contenedor, solo correrá una vez, se verá el output y se eliminará.

________________________
Esto es todo por hoy. Nos vemos.

Ir a parte 3: https://naldog.blogspot.com/2019/09/docker-en-windows-parte-3-comandos.html
Ir a parte 5: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-5-hola-mundo.html

lunes, 30 de septiembre de 2019

Docker en Windows parte 3: comandos básicos y bajando imágenes Tomcat y WildFly

Seguimos con el tutorial básico. Esta vez comandos simples y bajamos una imagen más complicada como es de Tomcat para aplicaciones JAVA.

Ir a parte 2: https://naldog.blogspot.com/2019/09/docker-en-windows-parte-2-instalacion.html
Ir a parte 4: https://naldog.blogspot.com/2019/10/docker-en-windows-parte-4-administrando.html
_______________________

Comandos básicos

Lo último que hicimos fue un hola-mundo.

Ahora escribe:
docker images

y verás todas las imágenes que tienes bajadas.


-Una imagen es la representación de un sistema ya sea PHP solo, Apache con PHP, Java, Fuse, Net Core, MySql solo, PHP con Apache con MySql, etc...
-Una imagen tiene N Pods o contenedores. Cada contenedor es una mini máquina virtual con su CPU, RAM y Disco asignado.
-Puedes crear tus propias Imágenes en base a una ya existente.

Como dato con clear limpias la pantalla de PowerShell.

Bajemos una imagen.
Ve a https://hub.docker.com/_/ubuntu
y verá a la derecha la instrucción para bajar.

Escribe
docker pull ubuntu

Se bajará la imagen. La puedes chequear con docker images.

Ahora creamos un contenedor
docker run -it -d ubuntu

Te dará un hash de contenedor indicando que se creó ok.

ahora escribe
docker ps -a

verás los contenedores como el de recién, corriendo y también el hello-word.

Es graciosa la columna NAMES ya que el mismo Docker le coloca nombres a tus contenedores, por ejemplo:
vigilant_goldberg
jovial_aryabhata
Esto ayuda a que puedas manipularlos ya sea por su ID o por su nombre:

Se puede ejecutar cosas adentro de un contenedor en si al entrar como Root, para esto escribe
docker exec -it <id dado en primera columna de comando anterior> bash

ejemplo:
docker exec -it 92c9b5f15f44 bash

Escribe algo adentro del docker (eres root) como por ejemplo, en Ubuntu un echo:
# echo hola
hola
# exit   para salir

Podemos detener el contenedor con el ID:
docker stop 92c9b5f15f44

Si ejecutas docker ps -a dirá por ejemplo:
   "Exited (0) 5 segundos" -> Terminado hace 5 segundos.

Subiendo una imagen por comando a cuenta personal de Docker Hub

Puedes crear una imagen local para luego subir a tus repositorios privados de Docker Hub:
docker commit 92c9b5f15f44 hernaldo/ubuntu

ahora con docker images se verá un tercer docker

Por linea de comandos puedes hacer:
docker login

dirá logeando con las credenciales actuales (las que pusiste cuando hiciste clic en "Sign in" en el tutorial en paso 2)

docker push hernaldo/ubuntu

Si vas a https://cloud.docker.com/repository/list verás que en tu cuenta hay un repositorio nuevo con el sistema Ubuntu.

En mi caso se ve hernaldo/ubuntu

Quedará en sitio público: https://hub.docker.com/r/hernaldo/ubuntu
Ahora, si tienes money, por 7 usd al mes tienes derecho a 5 repositorios privados...

Más Comandos

Para eliminar un contenedor usa 
docker rm <id de contenedor>

Ejemplo:
docker rm 00b8b9ac7c53

Para eliminar las imágenes locales (no las cloud que subiste a tu cuenta):
docker rmi <id de imagen>

Ejemplo:
docker rmi 2ca708c1c9cc

Nota: No te dejará si contenedores corriendo asociadas a esa imagen.


Comprueba que en verdad se eliminaron con:
docker images

Listar todos los contenedores que están en STOP:
docker container ls -a --filter status=exited --filter status=created

Eliminar todos los contenedores en STOP:
docker container prune


Te preguntará confirmación, coloca Y. Si no quieres conformación usa -f (force)
docker container prune -f

Bajando imagen de Tomcat

Vamos a bajar un servidor Tomcat que es un Application Server para Java EE. Corre en el puerto 8080 y es muy liviano.
Página oficial en Docker Hub: https://hub.docker.com/_/tomcat

La base del comando es
docker run -it -p <puerto publico>:<puerto dentro del docker> imagen

Por lo tanto, es tan simple como escribir:
docker run -it -p 8080:8080 tomcat

Con esto lo bajará de Docker Hub, puede demorar un poco.

Al terminar de bajar, de forma automática quedará corriendo el servicio de Tomcat (dice Server startup in...)

Si vas al navegador viene la magia ya que escribes:

http://localhost:8080/

y verás el servidor Tomcat corriendo. Oh yes.
Puedes tener el servicio en la línea de comandos con Control + C.

Si ves cuando pesó la imagen Tomcat fue de 508 MB.

Si te fijas es mucho más pesado que solo el Tomcat, ya que el Tomcat 9 bajado del sitio oficial
https://tomcat.apache.org/download-90.cgi
pesa 14 MB. Lo que pasa es que la imagen trae todo un Linux adentro y otras cosas que es mejor no saber XD.

Si ejecutas docker ps -a verás que la creó con nombre random:

Para colocar un nombre personalizado usa --name ejemplo:
docker run -it --name ejemplo -p 8080:8080 tomcat

Diferencia entre Run y Start

Si haces control + C cuando esté Tomcat Corriendo lo cerrarás. Luego si haces
docker ps -a

verás que dice Exited es decir cerrado. Si quieres nuevamente iniciarlo NO puedes hacer de nuevo 

docker run -it --name ejemplo -p 8080:8080 tomcat

Te dará el error:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Conflict. The container name "/ejemplo" is already in use by container "17a2751d13f44e2175bf35483ed8135c055ece0568fb2883b6fcb0d08454ba89". You have to remove (or rename) that container to be able to reuse that name.

No puedes Docker Run ya que ese comando es solo la primera vez, para meterle parámetros.
Ahora que ya existe, solo hay que iniciarlo con docker start.

docker start -i <id de contenedor o nombre>

Ejemplo:

docker start -i ejemplo

Con se iniciará el contenedor y Tomcat estará de nuevo disponible.

Fíjate que en la imagen dice en la columna Port:

0.0.0.0:8080->8080/tcp

Esto es que nosotros lo iniciamos con -p de puerto.
Si no lo inicias así, y lo inicias sin -p, así:

docker run -it --name ejemplo2 tomcat

Verás que se inicia correctamente, si abres una segunda ventana de PowerShell verás usando docker ps -a:

PORTS
8080/tcp

Pero si vas en el navegador a http://localhost:8080 no verás nada, ya que falta el mapeo de ports.


Bajando imagen de Wild Fly
Ahora el turno de otro servidor Java, Wild Fly.
Página oficial en Docker Hub: https://hub.docker.com/r/jboss/wildfly

Escribe:
docker run -it -p 8080:8080 jboss/wildfly

Se ve magnífico en le navegador:
http://localhost:8080/


Fíjate que tenemos dos imágenes, una de Tomcat y otra de Wild Fly.


Y revisas los contenedores son dos, ambos detenidos.

Para volver a correr un Tomcat, debe primero eliminar el contenedor anterior:
docker ps -a

ver nombre (columna NAMES)
docker rm -f <nombre de contenedor>

Ejemplo:
docker rm -f vigilant_goldberg

Luego volver a correr
docker run -it -p 8080:8080 tomcat

Si ejecutas directo el contenedor, dirá un mensaje de error de puerto ya usado:

C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint exciting_minsky (0b9e8e3935b8c65c7f9749b7d01c3a332de1872ed2c026436198a2d163f8102b): Bind for 0.0.0.0:8080 failed: port is already allocated.

Pero si abres http://localhost:8080/ se verá ok nuevamente.

Comando docker-machine

Al usar Docker on Windows (y no Docker Toolbox) no existe el comando:
docker-machine stop default   para parar la máquina Virtual.
Ni
docker-machine start default   para iniciar la máquina Virtual.

Por si acaso ya que NO usamos máquina Virtual. A esta altura me imagino está claro.
_______________________

Docker en Windows parte 2: Instalación en Windows 10 Pro/Ent

Hola amigos, en esta segunda parte de Docker en Windows, instalaremos Docker sobre un Windows Profesional o Enterprise. La  idea es ir muy paso a paso aprendiendo juntos ya que tampoco soy un "pro" XD.

Ir a Parte 1: https://naldog.blogspot.com/2019/09/docker-sobre-windows-tips-antes-de.html
Ir a Parte 3: https://naldog.blogspot.com/2019/09/docker-en-windows-parte-3-comandos.html
____________________

Descarga

Ve a este link
https://docs.docker.com/docker-for-windows/install/
Te lleva a
https://hub.docker.com/?overlay=onboarding

Se bajará Docker for Windows Installer.exe
Pesa 830 MB aprox.

Pre-Requisitos

1. De Hardware. Recomiendo usar un disco duro de estado sólido si vas a trabajar con docker. He instalado en una semana el mismo software en dos equipo, uno con un disco normal y otro de estado sólido, y jugado con los comandos, viendo cuanto demora en arrancar, etc. Con un disco de estado solido es al menos 4 veces más rápido todas las operaciones.

2. De Hardware. Revisa que en la BIOS de tu Notebook esté activa la característica de Virtualización.
En mi caso (Notebook HP) estaba activa de fábrica:

3. Usa Windows 10 Profesional o Enterprise o Education (Build o Compilación del SO 15063 o superior).
Puedes ver tu Edición en Propiedades de mi PC.
En mi caso muestra:

Puedes ver tu Build version en inicio -> ejecutar -> escribe "winver"
En mi caso muestra:


4. Activa Hyper-V en tu Windows. Ve a Panel de Control -> Programas y características, -> Activar o Desactivar Características de Windows:
 -Hyper-V


Reiniciar el PC.

Instalación

Dura como 10 minutos en un disco normal. En un disco de estado sólido como 3 minutos.
Al comienzo preguntará si quieres usar contenedores de Linux o de Windows. Déjalo tal cual, así usar contenedores Linux.


Sigue el asistente.

Luego se verá:

Luego termina. Piola. Te dirá Close and log out. Si lo presionar cerrará tu sesión de Windows.

Al volver a logearte a Windows, pueden pasar dos cosas:

Si no hiciste el paso de Pre-requisitos 4. Te saldrá este mensaje que indica que no tienes activo Hyper-V en Panel de Control. Presiona OK y el equipo se reiniciará.

También he visto que si no activaste esa opción puede decir esto:

Si revisas Panel de Control -> Programas y características, -> Activar o Desactivar Características de Windows: verás activo el check Hyper-V.

Bueno, luego de entrar de nuevo a Windows, en escritorio verás este nuevo icono "Docker Desktop"

También verás que aparecerá el icono de la ballena en la barra donde está la hora. Indicará que está iniciando, Docker Desktop is starting... 
Si el disco es de estado sólido, puede que no alcances a verlo y veas simplemente Docker Desktop is running... lo que es mejor.

También aparecerá un mensaje que se instaló ok. Presiona Skip This Build ya que no usaremos Kitematic (Alpha aún).

Si el mensaje Docker Desktop is starting... se mantiene unos minutos, saldrá este mensaje. Presiona Start.
Pasado uno o dos minutos debe decir que está iniciado.



En caso Docker Desktop is starting... se mantenga aún y no diga el anterior puedes Reiniciarlo.

Si ya quedó iniciado (Running)

Logeate con tu cuenta de Docker que usas en https://hub.docker.com/
Con esto evitas que una vez estés jugando con Docker tengas que logearte para bajar imágenes.



Probando que haya levantado Docker

Ve a Windows PowerShell y ejecútalo como administrador.
Adentro escribe

docker ps

Y debe mostrarte el status de los Pods (no re preocupes, más adelante veremos que es esto).

Con esto estamos tiki-taka.

En muchos sitios te dicen que hagas.

docker --version

Pero me ha pasado que me muestra la versión de docker instalada (Docker version 19.03.1, build 74b1e89)

pero la hacer docker ps me da error, esto indica aun no está corriendo y si no está corriendo no te sirve para jugar.

Si te sale este error al hacer docker ps es que no está corriendo aún el servicio de docker.

Ejecutando hola-mundo docker

Escribe:

docker run hello-world

Lo descargará de Docker Hub y verás un mensaje de saludo de docker:

Probando Kitematic

Botón derecho sobre el icono de la ballenita (cerca de la hora) y selecciona Kitematic. Se abrirá esta ventana:
Presiona Download y se bajará un archivo zip Kitematic-Windows.zip.

Tal como dice el mensaje déjalo en tu carpeta local: C:\Program Files\Docker\

Si tienes Windows en español: C:\Archivos de Programa\Docker\

Descomprímelo manteniendo el nombre de la carpeta y luego renómbralo a "Kitematic".



Luego entra a la carpeta "Kitematic" y ejecuta Kitematic.exe.

Pedirá tus credenciales de Docker Hub.

Luego la magia. Se abrirá y verás imágenes que puedes bajar.


Más adelante veremos con más detalle como usarlo, pero puedo adelantar que puedes por ejemplo Detener o Reiniciar un Contenedor que está corriendo y ver su Log:
Temas de IP

Como estamos con Docker for Windows (Docker Desktop) la IP local con que trabajaremos es la IP del sistema local, es decir localhost (127.0.0.1).
En muchos videos o tutoriales del 2016/2017, usan Docker Toolbox, por lo tanto, usan el Docker Quickstart Terminal, y este al usar Virtual Box, te daba una IP distinta a localhost, por ejemplo 192.168.99.100.

_____________________________
Eso por hoy gente, en la siguiente parte un hola mundo básico.

Ir a Parte 1: https://naldog.blogspot.com/2019/09/docker-sobre-windows-tips-antes-de.html
Ir a Parte 3: https://naldog.blogspot.com/2019/09/docker-en-windows-parte-3-comandos.html