惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
N
Netflix TechBlog - Medium
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
D
Docker
WordPress大学
WordPress大学
罗磊的独立博客
J
Java Code Geeks
博客园 - 【当耐特】
博客园 - 司徒正美
雷峰网
雷峰网
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
B
Blog

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
如何使用 Docker 开发个人项目
微信公众号 · 2018-04-16 · via 陈少文的网站

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。

通过 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 之后,就可以实时地查看和部署服务,了解服务器的运行状况了。