Please enable Javascript to view the contents

如何使用 Docker 开发个人项目

 ·  ☕ 4 分钟

1. 关于个人项目

为什么强调是个人项目?商业项目对代码托管、开发、运维部署等环节有着冗长的流程。而对于个人开发者,这样的流程成本过高,不利于快速项目迭代。

个人项目可能是一次学习的 Demo。完成一个领域 Demo 是很好的技术学习思路。从零开始搭建一个完整的 Demo, 不仅能了解到一些常见的领域问题,还能够对领域有一个完整的了解。既见树木,又见树林。

个人项目也有可能是为了满足一个小的需求。比如,你需要一个在线相册,而公共相册又不能任意的按照自己的想法展示,也不承诺永久服务。这样就产生了一个需求。你可以自己开发在线相册,也可以在开源项目的基础上修改,总之有了一个小需求。

无论何种出发点,个人项目都应该被鼓励。个人项目是程序员的试验场,也是程序员展示自己的地方,既能够提高自己的能力,也能够取悦自己。

2. 使用 GitHub 开源自己的项目

你要记住的是,你的代码远没有你想象的那么重要。

绝大多数的程序员只是在模仿或者搬运他人的成果,具有开创性贡献的程序员极少。这里并不是在贬低模仿或者搬运,对于商业来讲,代码的核心是与业务逻辑相关的实现,并不需要特殊的技巧。而对于个人项目,摆脱了业务逻辑的束缚,开源对我们不仅没有害处,还有诸多好处。

  • 监督代码质量。毕竟是需要对外开源的项目,代码肯定被自己 Review 很多次。

  • 交流项目合作开发。全世界的程序员都在 GitHub,用 issues 提交自己的问题,通过 PR 多人开发。

  • 增加影响力。你的Demo、小需求,其他人也会需要,在分享给其他人的同时,你也获得了其他人的赞许,收获影响力。

3. 使用 Docker 容器化项目

Docker 简直是喜欢折腾服务器者的福音。

在没有 Docker 之前,服务器总是被弄得乱糟糟,安装各种服务软件、运行环境,没过多久服务器磁盘就不够用了。有了 Docker 之后,你可以在隔离的运行环境去完成自己的各种尝试。

Docker 通过 lxc、cgroup、namespace 等技术在宿主机上虚拟出运行时,提供支持秒级启停的虚拟机服务。相对于 VirtualBox、VMWare 等虚拟机,Docker 更轻量级,对资源利用率更高效。

使用 Docker 容器化一个项目也只有三步:

  • 需要合适的基础镜像

  • 挂载目录

  • 暴露服务端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 需要合适的基础镜像
FROM node:6

RUN mkdir -p /var/www/app
WORKDIR /var/www/app

# 挂载目录
ADD . /var/www/app
RUN rm -rf /var/www/app/resources/photos/* /var/www/app/config.js

# 暴露服务端口
EXPOSE 3000

RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && return 0
RUN cnpm install

CMD ["cnpm", "run", "start"]

上面是我为最近 Docker 化的一个应用,编写的 Dockerfile 文件。为了加快依赖包安装时间,使用了 cnpm。

4. 使用 hub.docker.com 发布镜像

通过 GitHub 托管代码的好处是可以方便地使用各种各样周边的服务。比如,用于持续集成的 Travis CI 。这里想提的是 hub.docker.com 提供的镜像编译功能。

在 hub.docker.com 注册账号之后,创建项目关联上 GitHub 的项目。每次向 GitHub 推送代码之后,就会触发 hub.docker.com 的编译镜像任务。同时,编译完成的镜像也可以被其他人所使用。

5. 使用 GitLab 私有仓库托管部署脚本

对于一些私人信息的配置,放在 GitLab 是一个不错的选择。GitHub 免费账号只能创建公开项目,而 GitLab 免费账户也可以创建私人项目。

将项目配置、部署脚本托管在 GitLab 私有仓库,既保证了隐私,也记录了配置和脚本的变更。

再加上 GitLab CI,GitLab 真的是越用越喜欢。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '2'

services:

    nginx:
      image: shaowenchen/docker-nginx:latest
      restart: always
      privileged: true
      links:
        - gallery
      volumes:
        - ./www/:/var/www/
      ports:
        - "80:80"
      depends_on:
        -  gallery

    gallery:
      image: shaowenchen/zing-gallery:latest
      restart: always
      volumes:
        - ./www/resources/photos:/var/www/app/resources/photos
        - ./www/conf/config.js:/var/www/app/config.js

上面是我最近利用 docker-compose 编排的一个服务。只需要一个 docker-compose.yml 文件,加上一些配置文件,在任意一台服务器上,都可以使用一条命令 docker-compose up -d 将服务跑起来。

6. 将服务监控起来

有两种方式监控服务:

  • 第一种是通过日志。通过部署 ELK 可以很好的记录运行和访问日志,针对日志关键字可以开发相关的监控告警系统。

  • 第二种是监控系统。通过部署 Prometheus、Bosun 可以对服务进行有效地监控。

如果嫌麻烦,还有一种更加方面的途径,使用 DaoCloud。安装 DaoCloud 的 Agent ,将主机托管在 DaoCloud 之后,就可以实时地查看和部署服务,了解服务器的运行状况了。


微信公众号
作者
微信公众号