差不多一年前我用 Vue 做了一个 Web App 项目,最近又完成这个项目的 2.0 版本,除去项目本身的升级以外,在部署方面我也从以前的土法部署改成了基于 Docker 环境部署。
基于国内糟糕的网络环境,以及 Web 前端项目日益臃肿的部署和消耗资源极大的构建环境,这篇文章简单列举一下我用的加速镜像及构建方式。
Docker 加速镜像
就像使用 Ubuntu 或其他 Linux 发行版需要使用镜像源一样,使用 Docker 也得使用镜像源,不然慢吞吞地从国外官方源 Pull Image 的过程会痛不欲生。
这里推荐 Docker 中国的镜像,使用很简单,修改 /etc/docker/daemon.json
文件,写入下面这行即可(记得重启 Docker 以生效):
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
此外还有一个候选,如果你是阿里云的用户,则可以使用「阿里云加速器」,可以登录 容器Hub服务 获得。
如果自己有能力折腾的话,可以尝试一下 @yaodongfs 所说的「自建 registry,上游再对接国内镜像」的方式。
参考资料:
- Docker 中国官方镜像加速 https://www.docker-cn.com/registry-mirror
- 阿里云容器服务 - Docker 镜像加速器 https://cr.console.aliyun.com
Python 的 pip 源镜像
Docker 镜像的速度解决了,后面还有更多的问题等着你…我的这个项目是用 Python 做后端服务的,和 Docker 一样,默认情况下安装 Python 包会非常慢。这个要怎么解决呢?
如果在目标服务器上制作 Docker 镜像,可以推荐阿里云镜像。首先准备一个叫 pip.conf
的文件:
[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple
在制作 Docker 镜像的 Dockerfile 里面,添加一句:
ADD pip.conf /etc/pip.conf
这样在通过 pip install
安装 Python 包的时候,就会从这个源去获得了。
NPM 镜像
NPM 包管理也同理,不管你是本地构建还是服务器构建,镜像可以使用「淘宝 NPM 镜像」:https://npm.taobao.org
里面介绍得很详细,我这里就不多讲了。
Web 前端项目本地构建,rsync 上传
前言提到了一句「消耗资源极大的构建环境」,本来我还没有感觉,毕竟一年前我就在服务器上构建 Web 项目,没出过什么问题,直到昨晚…连续搞挂两次 1G 内存的 Server,我才意识到——Web 前端(Node 项目)已经到了可以几乎和 Native App 一样相比的构建模式了。
于是我简单的学了一下,采用了 @请叫我汪二 同学推荐的「本地构建 + rsync 上传」模式。
rsync 的使用非常简单,而且默认就是基于 SSH 的,比如:
rsync -r fontend/dist username@my.server.com:~/www/
就可以把本地前端项目构建好的 dist
目录上传至远程服务器的 ~/www
目录下了。可以说从「远端构建」改成「本地构建 + rsync 上传」的成本非常低。
总结
经过上述变更之后,在国内的服务器上,终于也可以很流畅地部署 Web 项目了…如果大家有更棒的部署和构建方式,欢迎交流。
https://registry.docker-cn.com 會同步 docker 官方的 image?如果自己構建的 image push 上去是私有的怎麼辦?它也會代理 docker login 的請求得到嗎?
所以选择「自建 registry」的方式吧。
用 circleci 之类的不是更方便吗
谢谢推荐,下个项目用这个。
非阿里云用户,推荐一下 Daocloud 的服务,无论是文档还是速度都很令人满意。
软件源什么的,清华源自从重拾初心后,还是很棒的(只不过开大会期间会被干掉)。
私有镜像,如果有硬件条件的话能自建仓库还是推荐用自建仓库,不过安全性可能会有问题(我用的是2016年的方案,现在应该有更容易的)。
如果没有条件的话,办法也是有的:
本地创建镜像->生成一个容器->docker export导出容器到文件->服务器端docker import导入这个容器。不过这个方法不是很优雅,我们应该直接操作镜像,而不是容器。
现在的版本应该有docker save和docker load可以直接导入导出镜像了。这些方法也很适合开发条件非常差的国内公司。
七牛也提供了dockerhub镜像 https://reg-mirror.qiniu.com