tag hub example dockers container compose and docker containers docker-compose docker-machine docker-swarm

hub - Usando un IDE mientras se desarrolla en un contenedor docker



dockers container download (3)

Hay algo que no estoy obteniendo al desarrollar una aplicación mientras uso los contenedores docker .

Digamos que estoy desarrollando una aplicación java y configuré un contenedor java con la imagen base jdk 8, todavía necesito instalar java 8 jdk en mi máquina de desarrollo local, ya que el IDE que voy a usar va a buscar el tiempo de ejecución bibliotecas en la máquina local no el contenedor docker.

¿Es esto correcto o me estoy perdiendo algo? Algunas cosas podré hacer por completo en el contenedor de la ventana acoplable, como configurar una base de datos, pero también tendré que hacer algunas cosas en mi máquina de desarrollo local e intentar asociarla con mi imagen de la ventana acoplable, por ejemplo, un tiempo de ejecución de idioma como Java o Python por el bien de usar el IDE.


Actualizaciones:

Publicación original:

Hay algo que no estoy obteniendo al desarrollar una aplicación mientras uso los contenedores docker.

Está bien, esto no es algo trivial. Intente ver el panorama general, se trata de crear un Canal de desarrollo (o Canal de CI / CD si desea utilizar los términos Integración continua / Entrega continua ).

La imagen de arriba es de [2]

Limitaciones al configurar un entorno de desarrollo local

Digamos que estoy desarrollando una aplicación java y configuré un contenedor java con la imagen base jdk 8, todavía necesito instalar java 8 jdk en mi máquina de desarrollo local, ya que el IDE que voy a usar va a buscar el tiempo de ejecución bibliotecas en la máquina local no el contenedor docker.

Esta es una opción que puede causarle un problema ya mencionado: puede funcionar en su entorno de desarrollo local y fallar en otra parte porque olvidó agregar una biblioteca, una dependencia, un cambio menor que hizo sin prestar atención y tener en cuenta que agregarlo a su entorno docker.

Mejor atenerse a la ventana acoplable mientras se desarrolla.

Un enfoque que resuelve el problema anterior es confiar en la ventana acoplable [3] para configurar el entorno que desea utilizar. Esto significa que cada vez que cambie algo, tendrá que docker build una nueva imagen en la docker run y docker run un contenedor nuevo en función de esta imagen. Como han mencionado otros, para definir cómo se construirán sus imágenes, tendrá que usar Dockerfiles . Y si su aplicación tiene diferentes contenedores interconectados, tendrá que definir todos estos (redes, enlaces, dependencias) dentro de un archivo docker-compose.yml . El proceso repetitivo de construir y correr será el trabajo de su IDE ...

IDEs y complementos / complementos

de [1] :

IDE

Las versiones de Docker no proporcionan un IDE nativo para desarrollar con Docker . La interfaz principal es la línea de comandos API. Sin embargo, la mayoría de los IDE líderes (NetBeans, Eclipse, IntelliJ, Visual Studio) tienen algún soporte para Docker a través de complementos o complementos.

Por ejemplo, desde [2] :

Docker Labs - Tutoriales de herramientas de desarrollo

Puede encontrar algunas pautas según su caso (IDE, idioma ...) aquí:

Volúmenes compartidos | Recarga en caliente | "viendo" para cambios de archivo

Creo que este enfoque coincide con su título que dice "desarrollar en un contenedor docker" y quiero decir / entender el caso en el que alguien tiene un contenedor en ejecución con un volumen compartido y cada vez que se produce un cambio en el código (utilizando el IDE), esto afecta al contenedor directamente. Tal vez esto funcione para un caso y tenga limitaciones para otros casos. Depende de usted hacer sus evaluaciones y elegir su camino.

Mis fuentes son:


Puedo sentir tu dolor. El desarrollo de proyectos que tienen múltiples dependencias de biblioteca puede hacer que el proceso de construcción consuma mucho más tiempo, cada vez que se realiza un cambio. Esto puede ser frustrante.

Afortunadamente, puede solucionar este problema escribiendo su DockerFile mediante el uso de maven-docker-plugin https://github.com/spotify/docker-maven-plugin .

Esto ahorrará el uso ya dependencias de biblioteca disponibles en su host.

Como ejemplo, tengo una solicitud de extracción abierta en un repositorio de código abierto aquí: https://github.com/iotaledger/iri/pull/481/files


También tiene la opción de ejecutar el IDE como un contenedor docker, por lo que no necesita instalar nada en su máquina.

Para ello, necesitas:
- estibador
- X11
- Un IDE de su elección.

Eche un vistazo a este proyecto java que ejecuta java8 y gradle dentro de un IDE IntelliJ:

https://github.com/marioluan/java-data-structures

La configuración es bastante sencilla:

Dockerfile

FROM openjdk:8-jdk-alpine # ttf-dejavu is required to render GUI under X11: https://github.com/docker-library/openjdk/issues/73 RUN apk --update add --no-cache ttf-dejavu # install intellij RUN wget -O /tmp/idea.tar.gz https://download-cf.jetbrains.com/idea/ideaIC-2017.3.4.tar.gz / && mkdir -p /usr/share/intellij / && tar -xf /tmp/idea.tar.gz --strip-components=1 -C /usr/share/intellij / && rm /tmp/idea.tar.gz

docker-compose.yml

version: ''3'' services: intellij: build: . environment: - DISPLAY=$DISPLAY volumes: - /tmp/.X11-unix:/tmp/.X11-unix - /your/workspace:/tmp/your/workspace - idea_cache:/root/.IdeaIC2017.3 - java_cache:/root/.java working_dir: $APP_ROOT command: /usr/share/intellij/bin/idea.sh volumes: idea_cache: java_cache: