容器将应用与环境打包整合,解决了应用外部依赖的痛点,打包后通过窗口可方便地部署到任意环境,用过就知道很香。 创建示例应用以 NestJS 为例,先创建一个示例应用。 $ npm i -g @nestjs/cli
$ nest new my-app
$ cd my-app
$ yarn && yarn start
然后 app.controller.ts 中添加如下 action: @Get(‘ping‘)
async ping() {
return ‘pong‘;
}
测试一把会得到如下返回,证明我们的 app 一切正常: $ curl localhost:3000/ping
pong
Docker 介绍先了解 Docker 的两个核心概念:
Docker 安装$ brew install --cask docker
如果已经安装过,升级可使用如下命令: $ brew install --cask docker
然后在程序目录或 Spotlight 中找到并启动 Docker,系统状态栏中会有个鲨鱼图标。 启动后命令行工具已经可用,检查安装: $ docker —version
Docker version 20.10.6, build 370c289
使用通过 $ docker help
查看具体命令的帮助可在 $ docker help run
打包生成镜像Docker 中打包后的应用存在于镜像中,其中便包含了应用及依赖的环境。将这个镜像文件进行分发就可以在其他地方加载运行,实现了在新环境中方便部署,无须再关心外部依赖。 创建 Dockerfile使用 Docker 打包应用需先创建 Dockerfile,其中包含指导 Docker 如何打包的指令。 $ touch Dockerfile
一般我们会基于已有镜像来创建自己的镜像,比如这里打包 Node 应用,我们会使用一个已经包含 Node 环境的镜像作为源。通过如下 FROM node:14
创建应用所在的目录: # Create app directory
WORKDIR /usr/src/app
将文件复制到目标路径,然后进行 npm 包依赖的安装: # Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
复制应用中的源码文件: # Bundle app source
COPY . .
依赖和源码都好后,可以编译 Nest 应用,生成 dist 目录了: npm run build
可以把镜像看作一个封闭环境,外界要与其中的应用进行交互,比如这里打包的是 Nest 服务,要能正常访问 Nest 中我们编写的 HTTP 接口,就需要 image 向外暴露端口。 因为默认 Nest 应用起的 3000 端口,这里就将其暴露, EXPOSE 3000
最后一条指令,指导 Docker 启动 Nest 应用: CMD [ "node", "dist/main" ]
所以完整的 Dockerfile 目前长这样了: FROM node:14
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
npm run build
# Bundle app source
COPY . .
EXPOSE 8080
CMD [ "node", "dist/main" ]
|
The text was updated successfully, but these errors were encountered: |
相关文章
- 01-23使用docker部署springBoot并且yml配置文件不打包到jar中
- 01-23使用Docker部署项目
- 01-23Docker一键部署SpringBoot应用的方法,贼快贼好用!
- 01-23使用docker部署springboot应用
- 01-23解决.net core3.1使用docker部署在Ubuntu上连接sqlserver报error:35的问题
- 01-23使用Docker技术部署NextCloud
- 01-23Minio分布式集群部署(不使用docker)
- 01-23docker 应用实例如何使用arthas
- 01-23使用TENSORRT和NVIDIA-DOCKER部署深部神经网络
- 01-23RabbitMQ系列(五)使用Docker部署RabbitMQ集群