[英]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
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.