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

推荐订阅源

Forbes - Security
Forbes - Security
Cisco Talos Blog
Cisco Talos Blog
Latest news
Latest news
P
Proofpoint News Feed
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
S
Securelist
T
Tor Project blog
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
NISL@THU
NISL@THU
C
CERT Recently Published Vulnerability Notes
L
LINUX DO - 热门话题
V
Vulnerabilities – Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
T
The Blog of Author Tim Ferriss
Security Latest
Security Latest
P
Proofpoint News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tenable Blog
博客园_首页
TaoSecurity Blog
TaoSecurity Blog
Attack and Defense Labs
Attack and Defense Labs
Project Zero
Project Zero
The Hacker News
The Hacker News
M
MIT News - Artificial intelligence
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Application and Cybersecurity Blog
Application and Cybersecurity Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
F
Full Disclosure
WordPress大学
WordPress大学
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
GbyAI
GbyAI
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Recent Announcements
Recent Announcements
博客园 - 叶小钗
Webroot Blog
Webroot Blog
Hacker News: Ask HN
Hacker News: Ask HN

陈少文的网站

巨变与机遇的未来十年 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) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
如何使用 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 之后,就可以实时地查看和部署服务,了解服务器的运行状况了。