我知道intellij有一个docker容器插件,但是它似乎不允许我在容器本身内部进行开发。想法很简单,我不想配置我的主机拥有正确的环境工具。我宁愿只是一个 docker 容器设置,然后使用 intellij 在容器本身中查找库、功能等。
这对于 c++、java 和 scala 开发非常有帮助。此外,它对于调试也很有用。
那么是否可以使用intellij在docker容器中进行开发?
所以您只想在容器中工作,就像在成熟的虚拟机中一样,对吧?然后,您应该运行一个容器,附加一个显示器(以运行 IDEA)并开始配置您的开发环境。
对于显示部分,我将测试你可以在 docker 容器中运行 GUI 应用程序吗?中给出的一些答案。本主题中有一些非常酷的答案,展示了在容器中运行 GUI 应用程序的各种方法。
方法不应该是: 拥有本地存储库和本地 IDE。存储库中有 docker 文件,最终有 docker-compose.yml,它启动运行项目所需的环境。 将带有源的本地驱动器安装到 docker(卷)中,因此在本地文件夹中所做的更改会反映在 docker 中,其他方向类似。
请看这个基于 Alpine Linux 的 Intellij IDEA CI 和 JDK8 的示例(取自此处 https://raw.githubusercontent.com/shaharv/docker/master/alpine/dev/Dockerfile)
# Alpine 3.8 C++/Java Developer Image
#
# For IntelliJ and GUI (X11), run the image with:
# $ XSOCK=/tmp/.X11-unix && sudo docker run -i -v $XSOCK:$XSOCK -e DISPLAY -u developer -t [image-name]
#
# Then run IntelliJ with:
# /idea-IC-191.6707.61/bin/idea.sh
FROM alpine:3.8
ENV LANG C.UTF-8
RUN set -ex && \
apk add --no-cache --update \
# basic packages
bash bash-completion coreutils file grep openssl openssh nano sudo tar xz \
# debug tools
gdb musl-dbg strace \
# docs and man
bash-doc man man-pages less less-doc \
# GUI fonts
font-noto \
# user utils
shadow
RUN set -ex && \
apk add --no-cache --update \
# C++ build tools
cmake g++ git linux-headers libpthread-stubs make
RUN set -ex && \
apk add --no-cache --update \
# Java tools
gradle openjdk8 openjdk8-dbg
# Install IntelliJ Community
RUN set -ex && \
wget https://download-cf.jetbrains.com/idea/ideaIC-2019.1.1-no-jbr.tar.gz && \
tar -xf ideaIC-2019.1.1-no-jbr.tar.gz && \
rm ideaIC-2019.1.1-no-jbr.tar.gz
# Create a new user with no password
ENV USERNAME developer
RUN set -ex && \
useradd --create-home --key MAIL_DIR=/dev/null --shell /bin/bash $USERNAME && \
passwd -d $USERNAME
# Set additional environment variables
ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdk
ENV JDK_HOME /usr/lib/jvm/java-1.8-openjdk
ENV JAVA_EXE /usr/lib/jvm/java-1.8-openjdk/bin/java
现在使用 Jetbrains Gateway 有更好的方法来做到这一点。只需确保您在最初使用公开端口运行的容器中安装了 OpenSSH 服务器(最新的 Ubuntu 容器已经安装了该服务器),即
-p 220:22
(我喜欢 220),并且修改后正在运行 SSH 服务,即 service ssh start
/etc/ssh/sshd_config
启用 root 登录和密码身份验证,然后 service ssh restart
。确保为 root 用户设置密码,即 passwd root
(或通过其他步骤设置新用户)。然后您需要做的就是打开 Jetbrains Gateway,并通过 SSH 连接到容器,并设置字段:user=root、host=localhost 和 port=220(或您选择的任何内容);请注意,您还需要指定一个项目位置,在我的用例中是 Java 应用程序存储库根目录——这意味着您需要在容器中安装 Java 和 Maven 或任何其他工具,但并不需要这样做。不影响连接能力。假设您的连接没有问题,您将看到 Gateway 在容器内安装 IDE 后端的活动(大约需要 10 分钟),然后启动一个 IDE 客户端,该客户端是 IntelliJ 的轻型版本(或您选择的任何其他 IDE 版本),即老实说,在撰写本文时有点错误。但它确实有效,并且让我的一些同事摆脱了对 Windows 机器的困扰,在当前芯片短缺的环境下没有太多升级到 Mac 的选择。请注意,每次重新启动容器时,您还需要重新启动 SSH 服务,除非您编写脚本使其在容器启动时自动启动。
您现在可以在 IntelliJ 产品中使用 Dev Containers。
您通过标准
.devcontainer
规范配置开发容器,它在 IntelliJ 客户端中打开,该客户端通过 dev-container
规范中指定的 docker 映像运行它。
您可以通过在客户端中显示终端来验证这一点,它将显示它以 docker 容器中的用户身份运行。