【问题标题】:How setup a Node.js development environment using Docker Compose如何使用 Docker Compose 设置 Node.js 开发环境
【发布时间】:2019-05-04 01:05:13
【问题描述】:

我想创建一个完整的 Node.js 环境来开发任何类型的应用程序(脚本、api 服务、网站 ecc。)也使用不同的服务(例如 Mysql、Redis、MongoDB)。我想使用 Docker 来实现它,以便拥有一个可移植的多操作系统环境。

我为安装了 Node.js 的容器创建了一个Dockerfile

FROM node:8-slim

WORKDIR /app

COPY . /app

RUN yarn install

EXPOSE 80

CMD [ "yarn", "start" ]

还有一个docker-compose.yml 文件,其中添加了我需要使用的服务:

version: "3"
services:
  app:
    build: ./
    volumes:
      - "./app:/app"
      - "/app/node_modules"
    ports:
      - "8080:80"
    networks:
      - webnet
  mysql:
    ...
  redis:
    ...
networks:
  webnet:

我想问你实现这些目标的最佳模式是什么:

  • 在主机和 docker 容器之间共享所有工作目录,以便编辑文件并查看双方的更改。

  • node_modules 目录在主机和 docker 容器上都可见,以便也可以从主机中的 IDE 进行调试。

  • 因为我想要一个适合每个项目的开发环境,所以我有一个容器,一旦启动,我就可以使用docker-compose exec app bash 之类的命令登录。所以我正在尝试寻找另一种方法来保持容器存活,而不是运行 Node.js 服务器或使用 CMD ['tail', '-f', '/d/null']

  • 的技巧

谢谢你的建议!

【问题讨论】:

    标签: node.js docker docker-compose


    【解决方案1】:

    在主机和 docker 容器之间共享所有工作目录,以便编辑文件并查看双方的更改。

    • 使用 -v 卷选项来共享 docker 容器内的主机卷

    使 node_modules 目录在主机和 docker 容器上都可见,以便也可以从主机中的 IDE 进行调试。

    • 同上

    由于我想要一个适合每个项目的开发环境,我将拥有一个容器,一旦启动,我就可以使用 docker-compose exec app bash 之类的命令登录。所以我正在尝试寻找另一种方法来保持容器存活,而不是运行 Node.js 服务器或使用 CMD ['tail', '-f', '/d/null']

    • docker-compose.yml 为交互模式定义这些

      stdin_open: 真 tty: 真

    然后使用命令 docker exec -it 运行容器

    【讨论】:

    • 我使用docker-compose up 启动所有服务。我何时何地使用了-v 选项?此外,在docker-compose.yml 中使用stdin_open: true tty: true 我无法使用docker exec -it <container-name> 登录容器,并且控制台返回此错误Error response from daemon: Container 447b0f43ghy42e8fc7bb87ed846cfd532978b2e9c6d56851e7b536f07a278a16 is not running
    • 卷:- ./ghost/config.js:/var/lib/ghost/config.js
    • 卷示例:卷:-./ghost/config.js:/var/lib/ghost/config.js 参考:linux.com/learn/docker-volumes-and-networks-compose。做 docker logs / docker inspect 来检查问题。
    • 还有一个建议,你需要复制 package.json 并执行 npm install 。因为它创建了一个层并忽略了它们是否有任何未来的变化,所以它将被忽略并从缓存层开始提供服务。参考 1:forums.docker.com/t/making-volumes-with-docker-compose/45657/7 参考 2:这里是一个完整的例子 blog.codeship.com/using-docker-compose-for-nodejs-development
    • 很高兴听到,如果您想在 docker 容器和主机之间共享文件夹,您可以使用 volumes 来实现。请点击此链接blog.codeship.com/using-docker-compose-for-nodejs-development。注意:volumes:——这部分将挂载主机和容器之间的路径。 .:/usr/app/ - 这会将根目录挂载到我们在容器中的工作目录。 /usr/app/node_modules - 这将使用 buildtime 目录将 node_modules 目录挂载到主机。
    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 2018-10-12
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多