sábado, 3 de marzo de 2018

Docker (10): Ejemplo 1: Crear el entono de desarrollo Java en Docker

1. Introducción.


Vamos a seguir al pie de la letra el vídeo de MVP Java y tambien su blog.

Este señor justifica el desarrollo Java en Docker ya que puede derfinir el entorno de desarrollo y no ensucia el sistema operativo con paquetes adicionales de diferentes versiones de java, netbeans etc., con sus correspondientes variables de entorno.

Pero también nos llama la atención, que :

  1. Los datos y programas fuente, deben de estar en el host y no solo en docker, ya que cuando se destruye un contenedor, también se destruirán los datos.
  2. Para poder tener los datos en el host, primeramente se crearán los directorios en el host y a continuación (tengan datos o no ) se mapearán. Si se dice que se mapee un directorio del host inexistente, docker lo creará, pero el acceso desde el host va a ser muy dificultoso!.
  3. Tenemos que tener instalado Docker en nuestras máquina host.
  4. Para tener el entorno configurado en Docker, podemos copiar una imágen que sea de confianza y que nos valga, o por el contrario crear una, o también modificar una existente para ajustarla mas a nuestras necesidades.


2. Comandos usados en el vídeo

2.1 Manejo de contenedores:

docker container ls                # Lista los contenedores en ejecución
docker container ls -a             # Lista todos los contenedores

docker container stop mycontainer  # Para un contenedor en ejecución

docker container kill mycontainer  # Mata un contenedor en ejecución

docker container rm mycontainer    # Elimina un contenedor parado o muerto


2.2 Manejo de imágenes:


docker image ls                    # Lista las imágenes

docker image build                 # Construye una imagen desde un Dockerfile

docker image pull                  # Recoge una imagen o repositorio desde un registro

docker image push                  # Envía una imagen o repositorio a un registro

docker image rm                    # Borra una imagen

docker image save                  # Guarda una imagen a un tar


3. Opción 1: Descargar la imagen de MVPJava

En principio nos fiamos de MVPJava y tecleamos

docker image pull mvpjava/netbeans:8.2
Y se tira un montón de tiempo y contesta


8.2: Pulling from mvpjava/netbeans
89d79dde0755: Pull complete 
0e1a2bffc4b7: Pull complete 
ed5c4d6b33cc: Pull complete 
ab45a6626692: Pull complete 
4d68ae1dd3c3: Pull complete 
Digest: sha256:0c7688b1707ff025ff1a73c3a62585e889fcf5baca577e758489c8f73cd1af84
Status: Downloaded newer image for mvpjava/netbeans:8.2

4. Opción 2: Crear nuestro Dockerfile


En principio creamos un direcorio DockerFiles y dentro de el creamos carpetas descriptivas de lo que vamos a hacer y dentro de cada una creamos un Dockerfile.


# Hacemos referencia a una distribución de SO Alpine + JDK8
# Que hay en repositorio de Docker hecho por anapsix
FROM anapsix/alpine-java:jdk8

# Establecemos variables de entorno
ENV HOME /home/netbeans

# Descargamos las librerías gráficas que no tiene Alpine que hacen falta para Netbeans
RUN adduser -D netbeans && \
    apk update && \
    apk add libxext libxtst libxrender && \
    rm -rf /tmp/* && \
    rm -rf /var/cache/apk/*

# Creamos nuestros directorios de trabajo en el contenedor
RUN mkdir -m 700 /data && \
    mkdir -m 700 $HOME/.netbeans && \
    mkdir -m 700 $HOME/NetBeansProjects && \
    chown -R netbeans:netbeans /data $HOME/.netbeans $HOME/NetBeansProjects


# Exponemos los directorios creados anteriormente para que persistan 
VOLUME /data
VOLUME ~/.netbeans
VOLUME ~/NetbeansProjects

# Cambiamos a un usuario no root 
USER netbeans

# Ejecutamos los siguiente:
# 1. Decarga de netbeans en formato zio
# 2. Lo descomprimimos
# 3. Borramos el fichero zip para liberar espacio
RUN wget http://download.netbeans.org/netbeans/8.2/final/zip/netbeans-8.2-201609300101-javaee.zip -O ~/netbeans.zip -q && \
    unzip ~/netbeans.zip -q -d ~ && \
    rm ~/netbeans.zip

# Establecemos el directorio de trabao de la próximo orden CMD
WORKDIR /data

# Ejecutamos el program netbeans
CMD ~/netbeans/bin/netbeans


Lo guardamos y lo compilamos dándole el nombre netbeans:8.2 y el destino es el directorio actual "."

docker build -t netbeans:8.2 .

Y nos contesta esta ratahila

Sending build context to Docker daemon   2.56kB
Step 1/11 : FROM anapsix/alpine-java:jdk8
jdk8: Pulling from anapsix/alpine-java
e110a4a17941: Pull complete 
1451fd43a838: Pull complete 
Digest: sha256:ef9353f0faca0597f0e53c5b6a2b9f4d9d028000c89545f3202175ee4cdbfa59
Status: Downloaded newer image for anapsix/alpine-java:jdk8
 ---> ed55c27d366d
Step 2/11 : ENV HOME /home/netbeans
 ---> Running in db979de453e3
Removing intermediate container db979de453e3
 ---> 0cb85fe4d77c
Step 3/11 : RUN adduser -D netbeans &&     apk update &&     apk add libxext libxtst libxrender &&     rm -rf /tmp/* &&     rm -rf /var/cache/apk/*
 ---> Running in cfc9082fd6a7
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
v3.4.6-282-ge97cc6b [http://dl-cdn.alpinelinux.org/alpine/v3.4/main]
v3.4.6-160-g14ad2a3 [http://dl-cdn.alpinelinux.org/alpine/v3.4/community]
OK: 5987 distinct packages available
(1/8) Installing libxau (1.0.8-r1)
(2/8) Installing libxdmcp (1.1.2-r1)
(3/8) Installing libxcb (1.11.1-r0)
(4/8) Installing libx11 (1.6.4-r0)
(5/8) Installing libxext (1.3.3-r1)
(6/8) Installing libxrender (0.9.10-r0)
(7/8) Installing libxi (1.7.7-r0)
(8/8) Installing libxtst (1.2.3-r0)
Executing glibc-bin-2.23-r3.trigger
OK: 25 MiB in 28 packages
Removing intermediate container cfc9082fd6a7
 ---> f4aaff336070
Step 4/11 : RUN mkdir -m 700 /data &&     mkdir -m 700 $HOME/.netbeans &&     mkdir -m 700 $HOME/NetBeansProjects &&     chown -R netbeans:netbeans /data $HOME/.netbeans $HOME/NetBeansProjects
 ---> Running in 39b74a4e758b
Removing intermediate container 39b74a4e758b
 ---> 007a0855e796
Step 5/11 : VOLUME /data
 ---> Running in 9418fdae3821
Removing intermediate container 9418fdae3821
 ---> 77e1a0a4ba1b
Step 6/11 : VOLUME ~/.netbeans
 ---> Running in fabf7579abfe
Removing intermediate container fabf7579abfe
 ---> fb79065b146a
Step 7/11 : VOLUME ~/.NetbeansProjects
 ---> Running in 28e923071837
Removing intermediate container 28e923071837
 ---> 20a079806f62
Step 8/11 : USER netbeans
 ---> Running in 43415b73895a
Removing intermediate container 43415b73895a
 ---> 504193c5fc7e
Step 9/11 : RUN wget http://download.netbeans.org/netbeans/8.2/final/zip/netbeans-8.2-201609300101-javaee.zip -O ~/netbeans.zip -q &&     unzip ~/netbeans.zip -q -d ~ &&     rm ~/netbeans.zip
 ---> Running in c8ff3259fa19
Removing intermediate container c8ff3259fa19
 ---> f73c50e68a79
Step 10/11 : WORKDIR /data
Removing intermediate container 00255511f1b6
 ---> feb70552447c
Step 11/11 : CMD ~/netbeans/bin/netbeans
 ---> Running in b4b75eda3466
Removing intermediate container b4b75eda3466
 ---> 5954fa849686
Successfully built 5954fa849686
Successfully tagged netbeans:8.2


5. Ejecutar la imágen

Este señor ha preparado un script bsh (netbeansDockerRun.sh)  para ejecutar dicha imagen:


#!/bin/bash

#======================================================================
#Here is the netbeansDockerRun.sh script contents from the tutorial ...
#======================================================================

xhost + 
echo "Starting Netbeans Docker Container"

docker run -d \
-e DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/Workspace/.m2:/home/netbeans/.m2  \
-v ~/Workspace/NetBeansProjects/.git:/home/netbeans/NetBeansProjects/.git   \
-v ~/Workspace/NetBeansProjects/.netbeans:/home/netbeans/.netbeans  \
-v ~/Workspace/NetBeansProjects:/home/netbeans/NetBeansProjects   \
--name netbeans \
netbeans:8.2


Antes de ejecutar nada, asegurarse que:
en nuestro host, existan estas carpetas:

  • /home/mi_usario/Workspace/.m2
  • /home/mi_usario/Workspace/NetBeansProjects/.git
  • /home/mi_usario/Workspace/NetBeansProjects/.netbeans
Siendo mi_usuario vuestro usuario de login al Ubuntu

Si el propietario y grupo de de esos directorios no es mi_usurio:mi_usuario hay que cambiarlo así

cd ~
sudo chown -R mi_usuario:mi_usuario Workspace
sudo chown -R mi_usuario:mi_usuario Workspace/.git
sudo chown -R mi_usuario:mi_usuario Workspace/.netbeans

Cambiar los permisos 

cd ~
sudo chmod a+rwx Workspace
sudo chmod a+rwx Workspace/.git
sudo chmod a+rwx Workspace/.netbeans

Y ahora ejecutar el script facilitado por MVPJava. Nos situamos en la carpeta donde está este script, comprovamos que tenga permisos de ejecución y lo ejecutamos

./netbeansDockerRun.sh 

Y debería de salir:




No hay comentarios :

Publicar un comentario