每个开发者都应该懂点 Docker

Posted by nepaul on 2017-08-02

背景

大大小小经历了几个项目后,有一个共同的痛点就是开发完成后测试或上线部署很麻烦。比如有个小项目主要包括几个服务: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 服务)
    1. Nginx 为基础镜像;
    2. 复制 nginx 配置文件(etc 下的 nginx.conf )到相应目录替换原本镜像的配置
    3. 复制已经打包好的前端网页代码到镜像
    4. 启动 nginx
  • server 下的 Dockerfile(Node API 服务)
    1. 以 Nodejs 为基础镜像;
    2. 复制 package.json ,并安装相应 npm 包
    3. 复制源码
    4. 启动 Node 服务
  • 根目录下的 docker-compose.yml:根据不同目录下的 Dockerfile 构建镜像,并根据配置依赖按照一定的顺序创建启动容器实例
  • 相关 Dockerfile 和 docker-compose.yml 已经放到 github,可直接查阅,本文就不贴了。
  • 所有配置完成后,只需要一条命令就可以启动整套系统服务:docker-compose up。默认会以前台启动,应用的输出会显示在前台。

好文必读

常用手册

  • Docker - 从入门到实践:新手建议阅读一遍,文章内容其实不算长,但是 Docker 的大部分内容都涉及到了。有什么概念忘了也可以快速温故。
  • 官方文档:Get Docker, Get started, User guide, Admin guide …

资源

  • docker storeDocker 官方的镜像仓库,替代了以前的 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"
      ]

      }

Comments: