代码之家  ›  专栏  ›  技术社区  ›  Torben

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

  •  3
  • Torben  · 技术社区  · 8 年前

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

    docker-compose-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
    

    docker编写。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
    

    docker同步。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']
    

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

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

    谢谢

    2 回复  |  直到 8 年前
        1
  •  8
  •   helmbert    8 年前

    添加您自己的 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 可以将其他基本发行版与其他包管理器一起使用)。
        2
  •  0
  •   yamenk    8 年前

    您可以执行以下两种操作之一:

    1. 构建安装以下工具的开放映像:

    FROM bylexus/apache-php7
    
    RUN apt-get update && \
        apt-get dist-upgrade -y && \
        apt-get install -y \
          curl \
          vim
    

    您构建此映像并在composefile中使用它

    1. 启动后,在容器内手动安装这些工具。

    docker-compose exec apache bash
    

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

    推荐文章