背景
大大小小经历了几个项目后,有一个共同的痛点就是开发完成后测试或上线部署很麻烦。比如有个小项目主要包括几个服务:1. Node.js 后台 API 服务; 2. MongoDB; 3. Nginx 反向代理静态资源和后台 API 服务,并且后续可能还会加入 Redis 做缓存。而且很多时候同一套系统,部署不下三次。
其实解决方案很早就出现了,那便是大名鼎鼎的 Docker!
:exclamation: 这里有一篇很好的科普文(Docker for Devs: Containerizing Your Application,相应的中文),小白必读!补充提示:初次安装 Docker 时,国内用户一定要配置加速器(比如文末 资源 部分介绍的 DaoCloud 加速器)
利用 Docker 和 Docker-Compose 解放生产力
通过一个小项目感受一下 Docker 的魅力。
主要有三个服务:1. MongoDB ;2. Node API 服务;3. Nginx 反向代理静态资源和 API 服务。
Node API 服务 和 Nginx 服务需要一个 Dockerfile,整个项目由 Docker-Compose 去管理。
- 项目目录
├── client
│ ├── Dockerfile
│ ├── .dockerignore
│ ├── dist
│ ├── etc
│ │ └── nginx.conf
├── server
│ ├── Dockerfile
│ ├── .dockerignore
│ ├── source-dir
├── docker-compose.yml - 主要目的阐述
- client 下的
Dockerfile
(Nginx 反向代理静态资源和 API 服务)- 以 Nginx 为基础镜像;
- 复制 nginx 配置文件(etc 下的 nginx.conf )到相应目录替换原本镜像的配置
- 复制已经打包好的前端网页代码到镜像
- 启动 nginx
- server 下的
Dockerfile
(Node API 服务)- 以 Nodejs 为基础镜像;
- 复制
package.json
,并安装相应 npm 包 - 复制源码
- 启动 Node 服务
- 根目录下的
docker-compose.yml
:根据不同目录下的 Dockerfile 构建镜像,并根据配置依赖按照一定的顺序创建启动容器实例 - 相关 Dockerfile 和 docker-compose.yml 已经放到 github,可直接查阅,本文就不贴了。
- 所有配置完成后,只需要一条命令就可以启动整套系统服务:
docker-compose up
。默认会以前台启动,应用的输出会显示在前台。
好文必读
- Best practices for writing Dockerfiles:最佳实践,每位使用 Docker 的人员必读!
- Docker Compose:Compose 也是很常用的一个工具!
- 使用任何一个镜像时的介绍,通常会阐明基本用法和一些最佳实践,比如 nginx
- 各种常见镜像的一些最佳实践
- Node.js: Docker and Node.js Best Practices
- Nginx
- Load Balancing Node.js Applications with NGINX and Docker: 非常好的介绍了如何用 Docker 和 Nginx 来做 Nodejs 应用的负载均衡,涉及到 Docker 的简单介绍和安装 以及具体的操作。文末还列出了几个非常好的相关资料
- Tips for Deploying NginxOffical Image with Docker
常用手册
- Docker - 从入门到实践:新手建议阅读一遍,文章内容其实不算长,但是 Docker 的大部分内容都涉及到了。有什么概念忘了也可以快速温故。
- 官方文档:Get Docker, Get started, User guide, Admin guide …
资源
- docker store:Docker 官方的镜像仓库,替代了以前的 Docker Hub.
- 国内最好用的 Docker 加速器 - DaoCloud:国内一定要配置加速器( DaoCloud 的介绍: 使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。如果您是在国内的网络环境使用 Docker,那么 Docker 加速器一定能帮助到您。 )
Mac 配置方法(Docker desktop community v2.2.05(43884)): Preference -> Docker Engine(修改配置,新增如下内容)
1
2
3
4
5
6
7
8
9
10
11
12
13
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"http://f1361db2.m.daocloud.io"
]
}