在使用docker
容器时开发应用程序时,我没有得到一些东西。
假设我正在开发一个java应用程序,并且我设置了一个带有jdk 8 base image的java容器,我仍然需要在我的本地开发机器上安装java 8 jdk,因为我要使用的IDE将会在本地机器上查找运行时库而不是docker容器。
这是对的还是我错过了什么?有些事情我可以完全在docker容器上做,比如设置一个数据库,但是我还需要在我的本地开发机器上做一些事情,并尝试将它与我的docker镜像匹配,例如像java或python这样的语言运行库为了使用IDE。
答案 0 :(得分:15)
在使用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的工作......
来自[1]
:
IDE
Docker版本不提供用于使用Docker进行开发的本机IDE 。主接口是命令行API。但是,大多数领先的IDE(NetBeans,Eclipse,IntelliJ,Visual Studio)都通过插件或附件为Docker提供了一些支持。
例如,来自[2]
:
您可以在此处找到一些指导原则(IDE,语言......):
我认为这种方法符合您的标题“在Docker容器上开发”,我的意思是/了解某人有一个带有共享卷的运行容器的情况,并且每当发生更改时代码(使用IDE),这会直接影响容器。也许这适用于一个案例,并且对其他一些案例有限制。由您来评估并选择自己的路径。
我的消息来源是:
[1]
Docker Reference Architecture: Development Pipeline Best Practices Using Docker EE [2]
Exploring Docker in CI/CD [3]
What is a Container?视频答案 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