在docker容器上开发时使用IDE

时间:2017-10-13 07:27:24

标签: docker containers docker-compose docker-machine docker-swarm

在使用docker容器时开发应用程序时,我没有得到一些东西。

假设我正在开发一个java应用程序,并且我设置了一个带有jdk 8 base image的java容器,我仍然需要在我的本地开发机器上安装java 8 jdk,因为我要使用的IDE将会在本地机器上查找运行时库而不是docker容器。

这是对的还是我错过了什么?有些事情我可以完全在docker容器上做,比如设置一个数据库,但是我还需要在我的本地开发机器上做一些事情,并尝试将它与我的docker镜像匹配,例如像java或python这样的语言运行库为了使用IDE。

3 个答案:

答案 0 :(得分:15)

更新

原帖:

  

在使用docker容器开发应用程序时,我没有得到一些东西。

没关系,这不是一件小事。试着看看大局,它是关于创建开发管道(或 CI / CD管道,如果你想使用术语持续集成/持续交付)。

enter image description here

上图来自[2]

设置本地开发环境时的限制

  

让我说我正在开发一个java应用程序并且我用jdk 8基本映像设置了一个java容器,我仍然需要在我的本地开发机器上安装java 8 jdk,因为我要使用的IDE将在本地机器上寻找运行时库而不是docker容器。

这是一个可能导致您已经提到的问题的选项:它可能适用于您的本地开发环境而在其他地方失败,因为您忘记添加库,依赖项,您在没有注意的情况下进行的微小更改并牢记将它添加到您的docker环境中。

在开发

时更好地坚持使用docker

解决上述问题的方法是依靠docker [3] ,以便设置您想要使用的环境。这意味着每次更改内容时,您都必须docker build新图像,docker run基于此图像的新容器。正如其他人所提到的,要定义图像的构建方式,您必须使用Dockerfiles。如果您的应用程序具有不同的互连容器,则必须在docker-compose.yml文件中定义所有这些(网络,链接,依赖项)。构建和运行的重复过程将成为IDE的工作......

IDE&插件/附加

来自[1]

  

IDE

     

Docker版本不提供用于使用Docker进行开发的本机IDE 。主接口是命令行API。但是,大多数领先的IDE(NetBeans,Eclipse,IntelliJ,Visual Studio)都通过插件或附件为Docker提供了一些支持。

例如,来自[2]

enter image description here

Docker Labs - 开发人员工具教程

您可以在此处找到一些指导原则(IDE,语言......):

共享卷|热重装| “观察”文件更改

我认为这种方法符合您的标题“在Docker容器上开发”,我的意思是/了解某人有一个带有共享卷的运行容器的情况,并且每当发生更改时代码(使用IDE),这会直接影响容器。也许这适用于一个案例,并且对其他一些案例有限制。由您来评估并选择自己的路径。

我的消息来源是:

答案 1 :(得分:14)

您也可以选择将IDE作为docker容器运行,因此您无需在计算机上安装任何内容。

为此,您需要:
- 码头工作人员 - X11
- 您选择的IDE。

看看这个在IntelliJ IDE中运行java8和gradle的java项目:

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

设置非常简单:

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

搬运工-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:

答案 2 :(得分:1)

我能感受到你的痛苦。开发具有多个库依赖项的项目可能会使构建过程耗费更多时间,每次进行更改时。这可能会令人沮丧。

幸运的是,您可以使用DockerFile https://github.com/spotify/docker-maven-plugin撰写maven-docker-plugin来解决此问题。

这将节省使用主机上可用的库依赖项。

作为示例,我在开源存储库中打开了拉取请求:https://github.com/iotaledger/iri/pull/481/files