IntelliJ Docker环境构建

发布时间 2023-07-20 09:42:40作者: zenghansen

介绍,以 Python为例

 

 

自从我购买了一台新的Macbook之后,我不得不重新创建Python开发环境,但是如果我直接在本地安装Python,则会不小心在全球安装该软件包,或者即使我使用venv,也要重新创建该环境。就像我想要的时候麻烦一样,所以我决定使用Docker来构建它。

在IntelliJ上安装插件

如果IntelliJ中未包含Docker插件,请从Preferences > Plugins安装。

image.png

创建一个Python项目

接下来,启动IntelliJ并创建一个Python项目。
稍后将创建必要的Docker映像,因此暂时选择适当的Project SDK。 (这里是Python 2.7(venv))
除此之外,您可以保留默认设置并创建一个项目。

image.png

在IntelliJ上创建一个Dockerfile并构建映像

这次,我选择了项目名称PythonQiita。首先,我们需要使Python环境成为Docker映像,因此直接在项目文件夹下创建Dockerfile。 (该位置可以在任何地方)

image.png

在Dockerfile中,写入基本映像文件,初始设置命令等。
这次我们将使用python:3图像。将pandas numpy放入包装中。

image.png

 

 

右键单击创建的Dockerfile,然后从菜单中选择Create Dockerfile。

image.png

将显示

配置窗口,输入Image tag。我们稍后将使用此标签名称。在这里是python_qiita。
取消选中Run built image。如果启用此功能,它将在构建映像后作为容器启动。如果输入Container name,它将以该容器名称开头。

image.png

将通过启动从下面的image.png创建的Dockerfile设置来构建映像。通过在"部署日志"中显示'python_qiita Dockerfile: Dockerfile' has been deployed successfully.,您可以看到它已完成。

image.png

创建

图像后,该图像名称将显示在"服务"视图中,指示构建成功。

image.png

将生成的图像设置为Project SDK

构建Docker映像后,可以将其用作项目的SDK。请注意,该容器不是SDK。

打开

FIle > Project Structure,在Project项目中按New按钮,然后在弹出窗口中选择Python SDK。
image.png

将显示一个选择

Python解释器的窗口,在左侧菜单中选择Docker。然后,确认可以为映像名称选择您先前构建的Docker映像的标记名称,然后按OK(确定)按钮。

image.png

Remote Python 3.7.4 Docker...显示在项目结构的SDK项中,您可以看到Dockerfile中编写的软件包已安装在软件包中。在venv等环境中,您可以在此处添加/删除软件包,但不能在Python中为Docker映像添加/删除软件包。每次软件包配置更改时,您将需要重建映像。

image.png

Python执行和调试

此时,您要做的就是创建一个Python文件并照常执行它,但是...
完成设置后,似乎IntelliJ无法正确读取Python配置,因此您需要关闭并重新打开项目一次。另外,您将必须等待屏幕底部的更新指示符完成,如下所示。只有这里是困难。我不知道它是如何工作的,但我希望它会得到改善。

 

 

image.png

如果可能,可以在IntelliJ上完成Python代码的完成,执行和调试。以下是导入和执行熊猫的状态。
image.png

不方便

由于

环境可以使用Docker构建,因此它变得可移植,并且对于执行环境而言,能够轻松地重新创建它非常方便。另一方面,还有一些不便之处,因此我将其记录下来。

重建Docker映像需要很长时间才能加载配置

就像在设置上面的SDK之后立即一样,如果您重建映像并更改Python软件包的配置,则不会立即反映出来。您必须等待IntelliJ重新识别它(几分钟),例如通过重新启动项目。
当不再需要重新配置时,它不会打扰我,但是在项目的早期阶段这很烦人。

无法像Matplotlib

那样执行show()

显然,由于它是在Docker上执行的,因此无法启动类似show()的窗口。别无选择,只能放弃并将其保存在文件中进行检查。

概要

尽管引入了一些不便之处,但我发现环境干净且便于携带很方便。到现在为止,重建软件包的环境很麻烦,或者必须将其写入诸如requirements.txt之类的环境是在Dockerfile中组织的,并且如有必要,可以将映像保存在存储库中。 。
当被问及使用venv哪个更容易时,我认为它是venv,但是我认为最好在新环境中尝试各种操作,因此我将尝试Docker。