启动基于容器的(开发)环境的最佳实践
Best practice for spinning up container-based (development) environments
OCI 容器是一种为项目打包合适的工具链的便捷方式,这样开发环境就可以保持一致,新的项目成员可以通过简单地签出项目并拉取相关容器来快速启动。
- 当然,我不是在谈论只需要 C++ 编译器或 Node.JS 的项目。我说的是需要特定编译器软件包的项目,这些编译器软件包不能与比 Fedora 22 更新的版本一起使用,具有特殊工具的项目需要手动安装到奇怪的地方,在多个项目上工作,这些项目具有不可共同安装的工具等等.对于这类事情,拥有一个容器比遵循二十个安装步骤然后祈祷以前项目留下的部分不要为你破坏东西更容易。
但是,启动带有编译器的容器来构建项目需要 docker (or podman) 命令行上的很多选项。除了图片名称,通常是:
- 项目工作目录挂载
- 用户id(因为容器应该以用户运行的身份访问挂载的文件)
- 如果该工具需要访问某些网络资源,它可能还需要
- 一些凭据,通过环境或其他方式
- ssh代理套接字(挂载和环境变量)
- 如果构建过程涉及构建 docker 个容器
- docker套接字(挂载); buildah 无需特殊设置也可以工作
- 如果是图形工具(例如IDE)
- X 套接字挂载和环境变量
--ipc host
使共享内存工作
然后它会因其他因素而变得更加复杂。例如。如果开发人员在不同的部门并且无法访问相同的 docker 存储库,则他们的图像可能会被不同地调用,因为 docker does not support symbolic names of repositories (podman 确实如此。
是否有一些标准(大概)的方式来处理这些选项,或者每个人都只是使用临时包装脚本?
我使用 Visual Studio Code Remote - Containers extension 将源代码连接到一个 Docker 容器,该容器包含构建代码所需的所有工具(例如 npm
模块,ruby gems
、eslint
、Node.JS、java
)。该容器包含所有 "tools" 用于 develop/build/test 的源代码。
此外,您还可以将 VSCode 扩展放入 Docker 映像中,以帮助保持 VSCode IDE 工具的可移植性。
https://code.visualstudio.com/docs/remote/containers#_managing-extensions
您可以在源代码中提供一个Docker文件给新手build the Docker image themselves or attach VSCode to an existing Docker container。
如果您需要 运行 Docker 容器内的服务器进行测试,您可以 expose a port on the container 通过 VSCode,然后开始访问容器内的服务器使用浏览器或来自主机的 cURL
。
注意 known limitations to Visual Studio Code Remote - Containers extension. The one that impacts me the most is the beta support for Alphine Linux。我经常注意到一些流行的 Docker Hub 图像是基于 Alphine 的。
OCI 容器是一种为项目打包合适的工具链的便捷方式,这样开发环境就可以保持一致,新的项目成员可以通过简单地签出项目并拉取相关容器来快速启动。
- 当然,我不是在谈论只需要 C++ 编译器或 Node.JS 的项目。我说的是需要特定编译器软件包的项目,这些编译器软件包不能与比 Fedora 22 更新的版本一起使用,具有特殊工具的项目需要手动安装到奇怪的地方,在多个项目上工作,这些项目具有不可共同安装的工具等等.对于这类事情,拥有一个容器比遵循二十个安装步骤然后祈祷以前项目留下的部分不要为你破坏东西更容易。
但是,启动带有编译器的容器来构建项目需要 docker (or podman) 命令行上的很多选项。除了图片名称,通常是:
- 项目工作目录挂载
- 用户id(因为容器应该以用户运行的身份访问挂载的文件)
- 如果该工具需要访问某些网络资源,它可能还需要
- 一些凭据,通过环境或其他方式
- ssh代理套接字(挂载和环境变量)
- 如果构建过程涉及构建 docker 个容器
- docker套接字(挂载); buildah 无需特殊设置也可以工作
- 如果是图形工具(例如IDE)
- X 套接字挂载和环境变量
--ipc host
使共享内存工作
然后它会因其他因素而变得更加复杂。例如。如果开发人员在不同的部门并且无法访问相同的 docker 存储库,则他们的图像可能会被不同地调用,因为 docker does not support symbolic names of repositories (podman 确实如此。
是否有一些标准(大概)的方式来处理这些选项,或者每个人都只是使用临时包装脚本?
我使用 Visual Studio Code Remote - Containers extension 将源代码连接到一个 Docker 容器,该容器包含构建代码所需的所有工具(例如 npm
模块,ruby gems
、eslint
、Node.JS、java
)。该容器包含所有 "tools" 用于 develop/build/test 的源代码。
此外,您还可以将 VSCode 扩展放入 Docker 映像中,以帮助保持 VSCode IDE 工具的可移植性。 https://code.visualstudio.com/docs/remote/containers#_managing-extensions
您可以在源代码中提供一个Docker文件给新手build the Docker image themselves or attach VSCode to an existing Docker container。
如果您需要 运行 Docker 容器内的服务器进行测试,您可以 expose a port on the container 通过 VSCode,然后开始访问容器内的服务器使用浏览器或来自主机的 cURL
。
注意 known limitations to Visual Studio Code Remote - Containers extension. The one that impacts me the most is the beta support for Alphine Linux。我经常注意到一些流行的 Docker Hub 图像是基于 Alphine 的。