繁体   English   中英

从存储库创建 DockerFile

[英]Create DockerFile from repository

我不知道是否可以从现有的私有存储库创建 DockerFile。 我创建了一个容器并安装了一个配置好的服务器(我不记得所有的命令),所以现在我希望它与我的 GitHub 帐户同步,所以每当我推入分支时,它也会更新图像中的更改。
对于自动构建,它说我需要一个 DockerFile,但我从未创建过。 是否可以选择从现有图像/容器自动创建 dockerfile。 使用 docker history 命令并没有多大帮助,因为我使用 docker exec 进行了服务器配置。
是否可以?

提前致谢。

我不确定我是否得到了确切的问题,但这里有一个基于现有 node.js 图像的打字稿示例的多阶段 docker 构建示例(构建本身是 dockerized)+ 临​​时依赖阶段(更好的层清理)。

FROM node:12 AS build        # this could be ANY base image you want.
WORKDIR /app
COPY package*.json .npmrc ./
RUN npm i
COPY . .
RUN npm run build

FROM node:12 AS deps
WORKDIR /app
COPY .npmrc .
COPY package*.json ./
RUN npm install --only=production

FROM  node:12-alpine
ENV NODE_ENV production
WORKDIR /usr/src/app
COPY --from=deps /app/node_modules/ ./node_modules/
COPY --from=build /app/package.json .
COPY --from=build /app/build/src/ ./
COPY --from=build /app/build/config/ ./config/
CMD [ "node", "app.js" ]

你需要重新开始。 Docker 也不记得你在容器内运行的命令,所以它无法重建 Dockerfile。 在任何情况下,运行docker build总是会从一个干净的环境开始,因此在没有大量手动安装的情况下构建 Dockerfile 会很有帮助。

对于大多数语言,您可能只需查找一个示例 Dockerfile 即可轻松找到。 其中大部分都是非常通用的形式: FROM适当的基础映像开始,安装操作系统依赖项,安装库依赖项, COPY应用程序,构建它,并设置运行时元数据,如CMD 您可能可以在流行平台上使用未经修改的文件,因为除了列出依赖项的文件(Node 的package.json 、Python 的requirements.txt等)之外,提及特定文件有点不寻常。

您还可以相当轻松地手动构建 Dockerfile。 这里的秘密武器是 Docker 层缓存:如果您重新运行docker build并且没有任何更改,包括当前行,Docker 将跳过它并使用上次构建的结果。 您可以相当轻松地对docker system prune删除在构建过程中创建的额外图像。 因此,更多增量过程可能如下所示:

  • FROM合适的基础镜像开始
  • 如果你想运行一些命令,添加一个RUN行并重新运行docker build 不要docker exec或尝试就地修改内容
  • 如果以明显的方式出错,请修改RUN行并重新运行docker build
  • 如果以不明显的方式出错,请添加“调试 printf”行RUN ls -lrt 或者docker build打印出 12 位十六进制图像 ID,因此docker run --rm -it 0123456789ab /bin/sh以获取 shell 来查看给定步骤的结果
  • 完成后,将生成的Dockerfile提交到源代码控制

这可能与您已经docker exec的过程非常相似,除了不是docker exec一系列命令,而是将它们写在Dockerfile并构建映像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM