使用docker进行简单部署
预习功课
安装 Docker
这里是官方的 Get Started,可以在这里下载 Docker Desktop
。安装 Docker Desktop
的同时,也会安装 docker-compose
。
学习 Docker
- 了解 Dockerfile Reference。了解最常见的 FROM/ADD/CMD 即可。不需要全部过一遍,遇到没见过的指令及时查阅即可。
- 了解 Compose file Reference 。不需要全部过一遍,遇到没见过的指令及时查阅即可。
- 了解 Docker Hub 。在该网站,可查找适合于自己的诸多基础镜像,比如 node 与 nginx 。
可以参考此文入门,后续我也会推出自己文章。
使用 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
注意:上面左侧的端口号,为我们本地实际需要访问的;右侧的端口号,为 Dockerfile
、package.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 .
,可以发现打印出调试信息。