Skip to main content

使用docker进行简单部署

预习功课

安装 Docker

这里是官方的 Get Started,可以在这里下载 Docker Desktop。安装 Docker Desktop 的同时,也会安装 docker-compose

学习 Docker

  1. 了解 Dockerfile Reference。了解最常见的 FROM/ADD/CMD 即可。不需要全部过一遍,遇到没见过的指令及时查阅即可。
  2. 了解 Compose file Reference 。不需要全部过一遍,遇到没见过的指令及时查阅即可。
  3. 了解 Docker Hub 。在该网站,可查找适合于自己的诸多基础镜像,比如 nodenginx

可以参考此文入门,后续我也会推出自己文章。

使用 docker 完成一个极简部署

本地启动测试

# 本地安装 serve 
pnpm i serve
# 配置 package.json 中的 scripts
# 启动静态资源服务器
pnpm run start

发现能够正常启动,就可以继续下一步

编写 Dockerfile

docker 默认去寻找文件名为 Dockerfile 的文件,但是由于本章前端需要演示多个 Dockerfile 文件,因此每个文件都有前缀。

本节配置的文件名为 node.Dockerfile

# 选择一个体积小的镜像 (~5MB)
FROM node:14-alpine

# 设置为工作目录,以下 RUN/CMD 命令都是在工作目录中进行执行
WORKDIR /Dcode

# 把代码置于镜像
ADD . /Dcode

# 装包
RUN yarn

# 暴露容器的 8080 端口
EXPOSE 8080

# 启动 Node Server
# 此处要注意:上面暴露的端口号为 8080,在 package.json 的 scripts 中写的时候应该写 "start": "serve . -p 8080"
CMD yarn run start

构建镜像

构建之前要注意,一定要启动 Docker Desktop,否则会报错。

构建容器的命令如下

// -t 表示名字
// -f 表示使用哪个 Dockerfile
// . 代表当前路径
docker build -t <image_name> -f <Dockerfile_name> .
// eg: docker build -t simple-app -f node.Dockerfile .

// git rev-parse --short HEAD: 列出当前仓库的 CommitId
// 也可将当前 Commit 作为镜像的 Tag
// 如果该前端项目使用 git tag 以及 package.json 中的 version 进行版本维护,也可将 version 作为生产环境镜像的 Tag
docker build -t simple-app:$(git rev-parse --short HEAD)

至此镜像构建完成,我们可以使用 docker iamges 命令来查看。

启动容器

镜像构建以后,我们需要启动它。

// 根据该镜像运行容器
// 如果需要在后台运行则添加 -d 选项
// --rm: 当容器停止运行时,自动删除容器
// -p: 4000:8080,将容器中的 8080 端口映射到宿主机的 4000 端口,左侧端口为宿主机端口,右侧为容器端口
docker run --rm -d -p 4000:8080 simple-app

注意:上面左侧的端口号,为我们本地实际需要访问的;右侧的端口号,为 Dockerfilepackage.json 里面需要写的。上面的这种写法即,我们要访问 http://localhost:3000/

此时容器已经成功启动,我们可以使用 docker ps 查看容器。也可以使用 docker stop xxx 关闭容器。

使用 docker-compose 管理

docker compose 可将 docker cli 的选项翻译成 yaml 配置文件,除此之外,它还有更强大的功能。

配置编辑 docker-compose.yaml 配置文件如下所示。

version: "3"
services:
node-app:
# build: 从当前路径构建镜像
build:
context: .
dockerfile: node.Dockerfile
ports:
- 4000:8080

配置完成后,我们就可以使用一行命令,docker-compose up 替代以前关于构建及运行容器的所有命令。

# up: 创建并启动容器
# -f 指定执行的文件名
# --build: 每次启动容器前构建镜像
docker-compose -f docker-compose.yaml up --build node-app

debug 小技巧

在使用 docker build 进行构建时,通过 RUN 指令可以通过打印一些关键信息进行调试,

但是,在我们进行 docker build 时,无法查看其输出结果。

此时可以通过 --progress plain 来查看其输出结果。

FROM node:14-alpine

RUN echo shanyue
RUN ls -lah

给构建命令加入 --progress plain,即执行 docker build -t simple-app -f node.Dockerfile --progress plain --no-cache .,可以发现打印出调试信息。