docker - 构建一个可以执行npm任务的Web应用

标签 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主机/内部版本中的自己的文件夹中,除了自身之外,其他都不应该有任何知识。

我的解决方案:

我尝试了许多不同的版本,例如“volumes_from”等,但我决定向您展示,因为它虽然缩小了但仍然完整。

Docker-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

Docker文件
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

问题:

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

环境:
  • Windows 10专业版[up2date]
  • 使用了docker的共享驱动器
  • Docker版本1.12.3,内部版本6b644ec
  • docker-machine版本0.8.2,内部版本e18a919
  • docker-compose版本1.8.1,内部版本004ddae
  • 最佳答案

    调用docker-compose up之后,您可以使用以下代码获取app容器的交互式 shell :

    docker-compose run app
    

    您还可以使用以下命令运行一次性命令:
    docker-compose run app [command]
    
    app完成后,您的docker-compose up容器未运行的原因是,您的Dockerfile没有定义服务。为了使app作为服务运行,您需要通过添加以下内容来使线程在容器的前台运行:
    CMD ./run-my-service
    

    到Dockerfile的末尾。

    关于docker - 构建一个可以执行npm任务的Web应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700759/

    相关文章:

    docker - Kafka Docker - 无法从 docker 容器外部生产或消费

    linux - 如何在不删除的情况下以群模式停止/启动 docker 容器?

    reactjs - React craco tailwind postcss 集成

    docker - 如何衡量 Docker 构建步骤的持续时间?

    amazon-web-services - 使用 Dockerfile 以及在容器运行后共享 Docker 容器中的目录

    git - .dockerignore 通常应该是 .gitignore 的超集吗?

    docker - VSTS:在自托管Windows 10代理上使用Docker

    docker - 使用 Docker 环境变量作为凭据

    docker - 将文件添加到 docker 容器以在启动期间使用

    Docker 将文件添加到 VOLUME