我会推荐一个整体的工作流程
- 在没有 Docker 的情况下构建应用程序;那么
- 将其打包到 Docker 映像中(如果有意义的话)。
您应该能够完全正常地构建应用程序。无论您使用哪种语言来构建应用程序,请确保使用其正常的打包工具。例如,您的package.json/Gemfile/requirements.txt/go.mod 应该列出您的应用程序需要运行的所有库依赖项。在本地运行它,为它编写适当的单元测试,然后构建一些可以正常工作的东西。
一旦成功,然后将其推送到 Docker 中。您需要编写一个构建映像的 Dockerfile。一个通用的配方是
FROM language-base-image # python:3.9, node:14, ...
WORKDIR /app
COPY dependencies-file . # requirements.txt, package.json, ...
RUN install the dependencies # pip install, npm install, ...
COPY . .
RUN build the application # npm run build, ...
CMD ./the_application # npm run start, ...
然后您应该能够docker build 一个图像,并docker run 一个容器从生成的图像。 Docker 文档包括贯穿此序列的sample application。
请特别注意,“读取文本文件”的问题任务在 Docker 中比没有时要困难得多。您需要使用bind mount 将主机文件系统的访问权限授予容器,然后引用容器端路径。例如,
docker run --rm -v $PWD/data:/data my-image \
./the_application --input /data/file.txt
我不会费心尝试使用 Docker 作为我的主要开发环境,尤其是对于一个介绍性项目。 Docker 被设计为一个隔离系统,并且故意处理来自容器的主机文件很棘手,反之亦然。尤其是如果您可以使用可以通过apt-get 或brew 轻松安装的相当常规的编程语言,并且您没有棘手的主机库依赖关系,那么在普通主机构建中完成大部分开发工作要容易得多环境只在后期使用 Docker。