是否可以在docker-compose.yml文件中使用命令安装curl和composer



是否可以在docker-compose.yml的命令部分执行的命令中安装Curl和Composer?我不想为此建立一个新的形象。

...
image: "customimage"
command: bash -c "apt update && apt -y upgrade
&& apt install curl
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer"
network_mode: bridge
ports:
- "80:80"
- "443:443"
links:
...

我尝试过这种方法,但没有奏效。

通常,如果可以的话,您应该始终尝试在Dockerfile中执行安装步骤。在docker-compose.yml文件中放入复杂的设置是非常复杂的,每次容器启动时,Composecommand:覆盖中的任何内容都会重复。

另一方面,您可以启动DockerfileFROM任何您想要的映像,即使它托管在其他注册表上;您并不局限于核心Docker Hub镜像。

因此,对于您所展示的内容,您可以编写一个类似的基本Dockerfile

FROM customimage # could be registry.example.com/remote-image:tag
RUN apt-get update 
&& DEBIAN_FRONTEND=noninteractive apt-get upgrade -y 
&& DEBIAN_FRONTEND=noninteractive apt-get install -y 
curl
RUN curl -sS https://getcomposer.org/installer 
| php -- --install-dir=/usr/local/bin --filename=composer
# ... more COPY and RUN commands ...

那么你的docker-compose.yml文件只需要参考这个图像构建

version: '3.8'
services:
myapp:
# building the local image downloads the base image,
# does the OS-level package upgrades, and installs Composer
build: .
# use the default command: from the image CMD
ports:
- "80:80"
- "443:443"

在这里建立一个新的形象并没有什么特别的缺点。您可能会考虑在CI系统中构建映像,就像在其他任何可运行的工件中一样,但肯定可以将这个Dockerfile和Compose文件一起分发,作为构建和运行映像的指令。

最新更新