构建可以执行npm任务的Web应用程序

时间:2016-11-20 04:36:21

标签: docker docker-compose dockerfile docker-for-windows docker-desktop

在发布任何配置之前,我试着解释一下我想要存档的内容,并且想提一下,我是docker的新手。

为了让路径对话更容易,让我们假设我们谈论这个项目" Docker me up!"它位于X:\docker-projects\docker-me-up\

目标:

我想用不同的内容运行多个nginx项目,每个项目代表一个专用的构建。在开发[docker-compose up -d]期间,容器应立即更新;哪个工作正常。

棘手的部分是,我想将npm [http://gruntjs.com]从我的主机直接外包到容器/图像中,所以我可以通过安装docker来调试和开发无论我在哪里。因此,必须在“服务”中安装npm,并且需要初始化观察者。

每个项目都封装在docker中的host / build上的自己的文件夹中,除了它本身之外,不应该知道任何其他内容。

我的解决方案:

我尝试过很多不同的版本,有“volumes_from”等,但我决定告诉你这个,因为它已经缩小但仍然完整。

多克尔-compose.yml

version: '2'
services:
    web:
        image: nginx
        volumes:
            - ./assets:/website/assets:ro
            - ./config:/website/config:ro
            - ./www:/website/www:ro
        links:
            - php
    php:
        image: php:fpm
        ports:
            - "9000:9000"
        volumes:
            - ./assets:/website/assets:ro
            - ./config:/website/config:ro
            - ./www:/website/www:ro
    app:
        build: .
        volumes:
            - ./assets:/website/assets
            - ./config:/website/config:ro
            - ./www:/website/www

Dockerfile

FROM debian:jessie-slim
RUN apt-get update && apt-get install -y \
    npm

RUN gem update --system
RUN npm install -g grunt-cli grunt-contrib-watch grunt-babel babel-preset-es2015

RUN mkdir -p /website/{assets,assets/es6,config,www,www/js,www/css}

VOLUME /website

WORKDIR /website

问题:

如您所见,“data”服务包含 npm ,并且应该能够执行npm命令。但是,如果我运行docker-compose up -d一切正常。我可以编辑页面内容,使用它等。但是数据容器没有运行,因此无法执行任何npm命令。除非我有一个巨大的逻辑错误;这很可能; - )

环境:

  • Windows 10 Pro [up2date]
  • 使用docker的共享驱动器
  • Docker版本1.12.3,build 6b644ec
  • docker-machine version 0.8.2,build e18a919
  • docker-compose版本1.8.1,构建004ddae

1 个答案:

答案 0 :(得分:1)

致电docker-compose up后,您可以获取app容器的互动外壳:

docker-compose run app

您还可以使用以下命令运行一次性命令:

docker-compose run app [command]

app完成后docker-compose up容器未运行的原因是您的Dockerfile未定义服务。要使app作为服务运行,您需要通过添加以下内容来保持线程在容器的前台运行:

CMD ./run-my-service

到Dockerfile的末尾。