在docker容器上开发时使用IDE

Hop*_*nda 39 containers docker docker-compose docker-swarm docker-machine

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

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

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

tgo*_*gos 16

更新:

  • 2018/04/17:http://docker-sync.io/
  • 2018/03/18:从GoogleCloudPlatform 检查脚手架.

原帖:

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

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

在此输入图像描述

以上图片来自 [2]

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

让我说我正在开发一个java应用程序,我设置了一个带有jdk 8基本映像的java容器,我仍然需要在我的本地开发机器上安装java 8 jdk,因为我要使用的IDE将寻找运行时本地计算机上的库而不是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]:

在此输入图像描述

Docker Labs - 开发人员工具教程

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

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

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

我的消息来源是:


Mar*_*uza 14

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

为此,您需要:
- 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
Run Code Online (Sandbox Code Playgroud)

泊坞窗,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:
Run Code Online (Sandbox Code Playgroud)

  • 仅因为可以,并不意味着它是一个好主意。通过在docker容器内部进行开发而引入的熵大大超过了它的优势。 (5认同)