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

时间:2018-01-05 16:43:00

标签: docker docker-compose

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

搬运工-撰写-dev.yml

>>> data.max().compute()
x      5.38114
y      5.33796
z      5.25661
txt          j
dtype: object

搬运工-compose.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

搬运工-sync.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

我使用的图像是version: "2" options: verbose: true syncs: rr-sync: # tip: add -sync and you keep consistent names as a convention src: './src' sync_excludes: ['.git'] ,它不支持curl,也没有像容器中安装vim这样的工具。

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

感谢。

2 个答案:

答案 0 :(得分:7)

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

FROM bylexus/apache-php7

RUN apt-get install -y curl vim

然后,在docker-compose.yml文件中,请勿使用image属性,而应使用build property,而不是:

version: '2'
services:
  apache:
    build: .
    ports:
      - 80:80

<小时/> 免责声明:当然,添加新软件包的确切方法取决于基本映像。例如,在这种情况下,bylexus/apache-php7图像构建在ubuntu:16.10图像上(如respective Dockerfile中所示),因此您可以使用Ubuntu的包管理工具。 bylexus/apache-php7以外的图像可能会与其他包管理器一起使用其他基本发行版。)

答案 1 :(得分:0)

你可以做以下两件事之一:

  1. 构建安装这些工具的打开图像:
  2. FROM bylexus/apache-php7
    
    RUN apt-get update && \
        apt-get dist-upgrade -y && \
        apt-get install -y \
          curl \
          vim
    

    您构建此图像并在composefile

    中使用它
    1. 启动后,在容器内手动安装这些工具。
    2. docker-compose exec apache bash
      

      然后安装所需的工具。请注意,在这种情况下,如果删除容器然后创建,则需要再次执行此操作 (您可以使用卷来缓解此问题,但可执行文件是从/usr/bin/vim到其他目录的软链接,因此您必须为包含可执行链接的每个目录使用卷  或直接重定向链接...)