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 :
- 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.
- 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!.
- Tenemos que tener instalado Docker en nuestras máquina host.
- 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 tecleamosdocker 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
# 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