Docker Compose:如何使用现有映像但安装其他模块

Tor*_*ben 2 docker docker-compose

我使用了一个非常简单的docker设置,包括docker-compose和docker-sync.我有以下文件:

搬运工-撰写-dev.yml

version: "2"
services:
  apache:
    volumes:
      - ./docker-config/vhost:/etc/apache2/sites-enabled/000-default.conf
      - rr-sync:/var/www/html:nocopy # nocopy is important

volumes:
  rr-sync:
    external: true
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version: '2'
services:
  apache:
    image: bylexus/apache-php7
    ports:
      - 80:80

  db:
    image: orchardup/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: rr
Run Code Online (Sandbox Code Playgroud)

泊坞窗,sync.yml

version: "2"

options:
  verbose: true
syncs:
  rr-sync: # tip: add -sync and you keep consistent names as a convention
    src: './src'
    sync_excludes: ['.git']
Run Code Online (Sandbox Code Playgroud)

我使用的图像是bylexus/apache-php7,它不支持curl,也没有像容器中安装的vim这样的工具.

问题是,如何安装curl和vim但是继续使用此图像进行apache?我需要在上面的文件中更改什么?

谢谢.

hel*_*ert 7

将您自己的内容添加Dockerfile到基于所需基本映像构建的项目中.在此文件中,添加您自己的包(例如,curl和vim):

FROM bylexus/apache-php7

RUN apt-get install -y curl vim
Run Code Online (Sandbox Code Playgroud)

然后,在您的docker-compose.yml文件中,不要使用image属性,而是使用build属性:

version: '2'
services:
  apache:
    build: .
    ports:
      - 80:80
Run Code Online (Sandbox Code Playgroud)


免责声明:当然,添加新包的精确方法取决于基本映像.例如,bylexus/apache-php7在这种情况下,图像构建在ubuntu:16.10图像上(可以在相应的Dockerfile视图中看到),因此您可以使用Ubuntu的包管理工具.除了那个之外的图像bylexus/apache-php7可能会使用其他基础分发与其他包管理器).