如何在Docker容器内从零开始构建新应用程序?

5
据说Docker有助于隔离应用程序环境,并帮助开发人员运行相同的环境。但是所有指南、教程、课程等都是从已构建的应用程序开始。那么我该如何从头开始创建新的应用程序,比如使用NodeJS?
最近我开始学习Docker,如果我已经在本地主机上安装了所有东西,它对打包已构建的应用程序非常有用。
但是,我该如何开始开发新的应用程序呢?例如,在没有NodeJS主机安装的情况下使用NodeJS,因此我无法为我的文件夹npm init。我该如何安装新的软件包,如何使node_modules持久化,以及所有的这些问题?
以下是一些非常基本的设置,我用于打包和应用程序...但我不能从头开始工作。
FROM node:10-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .

CMD [ "npm", "start" ]

version: '3'

services:
  example-service:
    build: .
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 3000:3000
      - 9229:9229
    command: npm start

dev:
  docker-compose up

如代码所示,我有一个自定义的镜像、一个docker-compose文件和一个makefile。我可以更改其中任何一部分或全部内容。我的目标是在主机上除了安装docker外,不需要安装任何东西来开发我的应用程序,容器应该将应用程序所需的所有内容隔离开来,最佳实践是在开发过程中持久化任何新安装的软件包。


好问题。我只开发过一个应用程序,然后将其复制到容器中。我很好奇是否可以通过命令行完成所有这些操作,使用一些组合的 VIM(可能需要单独安装),echo 等等。或者也许您可以安装某种文本编辑器,如 sublime 或 textwrangler? - Captain Chaos
1个回答

2
你可以按照 如何使用 Docker 进行 Node.js 开发 一文,作者是 Cody Craven
这篇文章不仅介绍了如何使用 Docker 部署和运行 NodeJS 应用程序,还详细讲解了如何使用 Docker 进行 Node.js 开发。
示例:
# This will use the node:8.11.4-alpine image to run `npm init`
# with the current directory mounted into the container.
#
# Follow the prompts to create your package.json
docker run --init --rm -it -v "${PWD}:/src" -w /src node:8.11.4-alpine npm init

然后你可以使用以下命令设置执行环境:

FROM node:8.11.4-alpine AS dev
WORKDIR /usr/src/app
ENV NODE_ENV development
COPY . .
# You could use `yarn install` if you prefer.
RUN npm install

并构建您的应用程序:

# Replace YOUR-NAMESPACE/YOUR-IMAGE with the name you would like to use.
docker build -t YOUR-NAMESPACE/YOUR-IMAGE:dev --target dev .

然后运行它:

# The `YOUR COMMAND` portion can be replaced with whatever command you
# would like to use in your container.
docker run --rm -it --init -v "${PWD}:/usr/src/app" YOUR-NAMESPACE/YOUR-IMAGE:dev YOUR COMMAND

您可以在工作站上没有安装Node的情况下完成所有操作!


另一种方法,来自2016年:https://jdlm.info/articles/2016/03/06/lessons-building-node-app-docker.html,或者(2017):https://github.com/shaunpersad/docker-tutorial - VonC
谢谢你的建议,但是采用这种开发模式会花费更多的时间来构建镜像而不是开发应用程序。我已经阅读并尝试了类似的方法,但当你正在开发一个大型应用程序时,每次添加模块都需要重新构建镜像,这真的浪费了很多时间。请问还有其他建议吗? - alexzaizar09
@alex 这个答案的想法是展示你可以在不安装 Node 的情况下使用 npm 命令。如果你不想使用容器来编译你的项目,那就不用。但是这个想法仍然存在:通过运行一个 Node 镜像的 docker run 命令,你可以访问 Node 命令。 - VonC
是的,我明白这个想法非常有帮助,但它不是我的解决方案。我需要能够在容器内从头开始开发我的应用程序,因为我除了Docker之外不能安装任何东西。那么,还有其他选择吗? - alexzaizar09
@alex 也许可以看一下这个视频:https://www.youtube.com/watch?v=Ns0fHKuv7_Y。你可以拥有一个本地集群,由本地 Kubernetes 管理容器,并且如视频所示,具备完整的开发、调试和实时部署能力。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接