使用容器进行软件开发已成为一种普遍的做法。开发中的常见用例是运行应用程序所需的服务环境,诸如安装Redis,MongoDB甚至Elasticsearch之类的东西。大多数情况下,开发人员依赖于docker-compose定义应用程序所需的整套服务。
下面展示通过使用指定某个语言开发所需的所有内容创建容器图像,包括(但不限于):
- 代码编辑器
- 调试器
- 探查
- 跟踪工具
- 包管理员
- 构建工具
使用容器进行开发的好处
OS独立
即使使用的是Docker for Mac,您还可以使用基于Linux的环境进行开发。如果你非常熟悉Linux,可以应用于创建真正的生产容器镜像(以及许多其他事情)。
安装速度
与使用安装程序脚本相比,容器镜像(特别是docker映像)在新计算机上的运行速度非常快。这是因为您只需要使用预编译的二进制文件下载镜像。
可移植性
如果使用安装程序脚本,则可能无法在其他计算机上运行,因为某些软件包以不同方式安装。比之下,一旦构建了容器镜像,它几乎可以在任何机器上工作。
健壮性
一旦构建了镜像,它就不会突然中断。这与安装程序脚本不同; 当我刚刚使用git存储库来存储配置和脚本时,我会有很多事情发生,它会根据安装程序的运行时间而中断。
注意事项
不是Docker的常见用例
Docker对这种工作流程的支持并不是很好。docker的一些问题需要数年才能 解决。
还需要一些胶水代码
您想要从主机映射到容器中有几件事情。我写了一个工具,让这个更容易,称为slipway,在我编写此工具之前,我将使用shell脚本初始化容器。
如果您不使用Linux作为主机操作系统,事情会变得更加复杂。
0.选择基本镜像
对于初学者来说,构建docker镜像需要一个配置文件(Dockerfile)来定义要在容器中执行的步骤。运行所有这些步骤后,容器将“提交”为新镜像。
大多数镜像基于另一个镜像。我建议从Ubuntu基础开始,因为它非常受欢迎。
在一个空目录的文件下添加下面到Dockerfile:
FROM ubuntu:bionic |
1.设置您的用户
由于镜像中仅包含root用户。我们需要创建一个具有适当权限的用户才能在容器内运行。
# Feel free to change this to whatever your want |
2.基本工具
Ubuntu核心(这是我们的图像所基于的)并不包含太多,因为它是为“准备发布”应用程序而构建的。让我们为开发添加一些基本包:
RUN yes | sudo unminimize && \ |
3.多路复用(可选)
如果您没有使用像VSCode或Webstorm这样的GUI编辑器,那么您可能需要一个程序可以进行单个shell会话并将其拆分为多个。这称为终端多路复用器。我更喜欢tmux。
RUN sudo apt-get update && \ |
我可以在这里讨论很多自定义选项,但为了保持教程简短,我将跳过这一步。请随意查看我的项目,了解更好的开发环境理念。
4.安装您的选择编辑器
现在我们需要一些东西来编辑源代码。我可以推荐Neovim,也可以其他任何编辑。
RUN sudo apt-get update && \ |
5.安装运行时
在这个例子中,我们将安装NodeJ,因为站点上的大多数开发人员都使用它。如果您在此步骤中使用Python或其他语言,则可以安装它。
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash |
在此步骤中,为您自己的语言安装任何其他工具。
构建然后运行
您只需要在运行之前构建镜像。
在您的终端中,运行:
docker build -t development-environment .
运行环境的最终命令可能因您要传输的内容而异。这是一个示例命令:
docker run --rm -ti \ |