docker - 如何在 docker 容器内从头开始构建新应用程序?

标签 docker docker-compose dockerfile development-environment

Docker 据说可以帮助隔离应用程序环境,并帮助开发人员运行相同的环境。但是所有指南、教程、类(class)等都从一个已经构建的应用程序开始。那么我如何从头开始一个新的应用程序,比如说在 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 之外,我的主机上没有安装任何东西,容器应该隔离应用程序所需的一切,最佳实践是在开发过程中保留任何安装的新包。

最佳答案

您可以通过 How to use Docker for Node.js development 关注“Cody Craven” :

它确实使用 Docker 本身进行开发,而不仅仅是部署/运行 NodeJS 应用程序。

例子:

# 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

所有没有在您的工作站上安装节点!

关于docker - 如何在 docker 容器内从头开始构建新应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56518177/

相关文章:

docker - 安装RPMS(〜500MB)将docker镜像大小增加1 GB以上

docker - 如何在 docker-compose.yml 中选择卷挂载点?

docker - 在 Mint 20 上更新 Docker Azerothcore 最新版本的问题

linux - 重新启动终端并使用 Dockerfile 运行命令

java - Docker:无法从 Spring Boot docker 镜像连接到 Elasticsearch

java - 您如何使用 Docker 确定 Java 微服务的堆/非堆大小?

mysql - 为什么运行 docker 容器后 mysql 数据所有权更改为 systemd-journal-remote

docker-compose - 如何在 env_file 中进行变量替换?

docker-compose 在主机重启后启动容器。哪个?

docker - 无法访问映射到Docker容器端口的主机上的端口