添加一个等同于docker-compose文件的Dockerfile RUN命令。

huangapple go评论92阅读模式
英文:

Adding a Dockerfile RUN command equivalent to docker-compose file

问题

有没有一种方法可以在Compose文件中添加一个与Dockerfile的RUN命令等效的命令?

背景:

docker-compose.yaml 文件中有一个名为 webapp 的服务,配有一个相应的 Dockerfile (webapp.Dockerfile)。

在开发时,我有一个名为 docker-compose.local.yaml 的文件,它为 webapp 服务添加了一些额外的开发配置,例如:

  1. services:
  2. webapp:
  3. stdin_open: true
  4. tty: true
  5. ... # 其他用于我的本地开发需求的内容

我还想运行一些命令到正在构建的镜像中,但我不想将它们放在 webapp.Dockerfile 中的 RUN 命令中。我想以某种方式将它们包含在 docker-compose.local.yaml 中,以便它是我可以追加而不更改基本配置的额外内容。(顺便说一下,我使用 COMPOSE_FILE 环境变量来调用额外的 YAML 文件)。

英文:

Is there a way to add a Dockerfile RUN command equivalent to a compose file?

Context:

docker-compose.yaml has service webapp with an accompanying Dockerfile (webapp.Dockerfile)

When I do development, I have a docker-compose.local.yaml that adds some additional development configurations to webbapp service, e.g.:

  1. services:
  2. webapp:
  3. stdin_open: true
  4. tty: true
  5. ... # other stuff for my local development needs

I'd also like to run a couple of commands to the image being built, but I do not want to put it in a RUN command in webapp.Dockerfile. I'd like to somehow include it in docker-compose.local.yaml so that it's something additional I can tack on without changing the base configs. (BTW I invoke the additional YAML file with COMPOSE_FILE environment variable).

答案1

得分: 1

一个 RUN 命令是镜像构建过程的一部分;它只能在 Dockerfile 中使用。如果我想要在我的组合配置中使用的镜像中安装额外的命令,我可以基于旧的镜像构建一个新的镜像。

例如,如果我有一个看起来像这样的 docker-compose.yaml 文件:

  1. services:
  2. web:
  3. image: docker.io/alpinelinux/darkhttpd:latest

并且我真的希望在这个容器内部可用 curl 命令,我可以创建一个像这样的 docker-compose.override.yaml 文件:

  1. services:
  2. web:
  3. build: .

然后,在与 docker-compose.yaml 文件相同的目录中放置一个像这样的 Dockerfile

  1. services:
  2. web:
  3. image: development
  4. build:
  5. context: .

当运行 docker-compose up 命令时,它将构建自定义镜像并使用它,而不是使用 docker-compose.yaml 中指定的镜像:

  1. $ docker-compose up
  2. Building web
  3. [+] Building 0.1s (6/6) FINISHED
  4. => [internal] load build definition from Dockerfile 0.1s
  5. => => transferring dockerfile: 124B 0.0s
  6. => [internal] load .dockerignore 0.1s
  7. => => transferring context: 2B 0.0s
  8. => [internal] load metadata for docker.io/alpinelinux/darkhttpd:latest 0.0s
  9. => [1/2] FROM docker.io/alpinelinux/darkhttpd:latest 0.0s
  10. => CACHED [2/2] RUN apk add curl 0.0s
  11. => exporting to image 0.0s
  12. => => exporting layers 0.0s
  13. => => writing image sha256:23e53345322fa1787aa6fd291347732501499f60656805675c6fd4217d040006 0.0s
  14. => => naming to docker.io/library/development 0.0s
  15. WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
  16. Creating containers_web_1 ... done
  17. Attaching to containers_web_1
  18. web_1 | darkhttpd/1.14, copyright (c) 2003-2022 Emil Mikulic.
英文:

A RUN command is part of the image build process; it can only be used in a Dockerfile. If I want to install additional commands into the image used by my compose configuration, I can build a new image based on the old one.

For example, if I have a docker-compose.yaml that looks like this:

  1. services:
  2. web:
  3. image: docker.io/alpinelinux/darkhttpd:latest

And I really want the curl command to be available inside this container, I can create a docker-compose.override.yaml like this:

  1. services:
  2. web:
  3. build: .

And then put a Dockerfile in the same directory as the docker-compose.yaml that looks like this:

  1. services:
  2. web:
  3. image: development
  4. build:
  5. context: .

And when docker-compose up the environment, it will build the custom image and use that rather than using the image specified in docker-compose.yaml:

  1. $ docker-compose up
  2. Building web
  3. [+] Building 0.1s (6/6) FINISHED
  4. => [internal] load build definition from Dockerfile 0.1s
  5. => => transferring dockerfile: 124B 0.0s
  6. => [internal] load .dockerignore 0.1s
  7. => => transferring context: 2B 0.0s
  8. => [internal] load metadata for docker.io/alpinelinux/darkhttpd:latest 0.0s
  9. => [1/2] FROM docker.io/alpinelinux/darkhttpd:latest 0.0s
  10. => CACHED [2/2] RUN apk add curl 0.0s
  11. => exporting to image 0.0s
  12. => => exporting layers 0.0s
  13. => => writing image sha256:23e53345322fa1787aa6fd291347732501499f60656805675c6fd4217d040006 0.0s
  14. => => naming to docker.io/library/development 0.0s
  15. WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
  16. Creating containers_web_1 ... done
  17. Attaching to containers_web_1
  18. web_1 | darkhttpd/1.14, copyright (c) 2003-2022 Emil Mikulic.

huangapple
  • 本文由 发表于 2023年6月1日 22:16:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76382871.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定