最近在学 flask,想自己写个博客练手.遇到的困难远比自己想象得多,
今天逛 V2 看到 /t/274121 有人推荐 Daocloud,听说免费就去折腾下看看. 完全没接触过 Docker,只知道它的名字叫容器,是轻量虚拟化方案. 注册之后登陆控制台,一直是个吃豆人,后来发现是 DaoVoice 脚本导致的, 建议处理下吧.
反正是进来了,按照我的想象应该就是找个容器点几下就能运行了才对.
看到有个镜像仓库,我想这应该就是我这种菜鸟要的!
结果发现基础系统环境或者是 Python 相关都不能部署到 daocloud!
我并不清楚部署到主机是什么意思!
左点右点在 DaoCloud 的 Github 看到一些 Deomo,fork 之后就试着代码部署.
执行节点我选的国内,想着国内访问速度会好些.
等了很久还是没部署好,去吃个饭回来说是超时了.
我的内心是崩溃的.
不知道怎么办才好
我最后的选择不是去看 DaoCloud 的文档,去看 Docker 的入门.
发现问题比想象得简单得多
基本上只要几分钟你就能知道怎么回事,我在本地很快部署了自己的镜像.
也找到了线上部署失败的原因
pull 一个 ubuntu 镜像之后进 shell 安装各种需要的东西.发现速度很慢.
Ubuntu 的 apt 源是国外的.
Running in 6be8ad6cb255
Ign http://archive.ubuntu.com trusty InRelease Get:1 http://archive.ubuntu.com trusty-updates InRelease
看完入门文档然后自己写了一个 Dockerfile,顺利定制了第一个容器.
发现是真的非常简单,为什么 DaoCloud 连号称做了那么多工作,还没有一页 Docker 入门教程来得实用.
FROM ubuntu
MAINTAINER pimin "[email protected]"
RUN sed -i "s/archive.ubuntu.com/cn.archive.ubuntu.com/g" /etc/apt/sources.list
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python"]
CMD ["app.py"]
代码比较简单,就是从 Ubuntu 镜像创建一个容器,先更换 Ubuntu 源为国内源,然后安装 Python,pip
再用 pip 安装 requirements.txt 内指定的依赖.
最后运行 flask 的最小 demo.
然后代码 push 到 github 之后通过 DaoCloud 的代码构建,只要 3 分钟!!
我当时是震惊的! DaoCloud 为什么不能写一行替换替换为国内源的代码.
在我看来那个什么镜像加速都没有改一下源来得实用.
如果你代码构建做得好,像我这样新手一次就就可以代码构建成功!
这样的失败体验很有可能把我们挡在门外
项目地址在 https://github.com/28sui/dao-flask
Docker 和 github 结合确实是非常方便的方案,push 之后自动重新部署.
不清楚如果是集群的话重新部署需不需要下线,会不会自动调度部署顺序.
感觉定制性非常高!
有疑问的是
1.安全性,demo 只暴露了一个端口,按照传统思路来用 docker 会不会增加风险?
2.动态调整问题.通过 Dockerfile 做调整都要重新部署.对于我这样的新手学习来说,不如 vps 之类来得方便.
如果我按 VPS 那样使用,SSH 进去做的修改重启之后就会丢失.我知道我应该在本地先调试好再 push.
3.如果我有几个服务,是不是分几个容器更靠谱一些?这样运行成本是不是就高很多.
这样看来 Daocloud 的免费基本上也就是练习用.专业版只是开了功能,对于资源使用额度没有提升.
入门级的话,成本上升是不是太快了?
比阿里云这些有价格优势么?
4.免费只有 2x 资源,确实是太小了,绑定微信有 3x 才算能用.2x 运行环境,1x 数据库.
不过有效期只有半年.总体来说并不是一个长期使用的方案.
当然作为学习环境 50M 的数据库是完全足够了. 暂时就入这个坑吧!
1
YUX 2016-04-26 06:43:12 +08:00 1
是我在你给出 V2 的那个帖子里推荐 DaoCloud ,部署到主机的意思是你有一台自己的主机,比如说阿里云的 ECS ,或者 AWS 的 EC2 ,然后在 DaoCloud 控制台->我的集群->自有集群->添加主机->选择主机操作系统后按步骤部署 DaoTools 。这样方便通过 DaoCloud 来对主机进行部署。
如果想通过 DaoCloud 部署 Flask 也是非常简单的,在 DaoCloud 控制台->镜像仓库->DockerHub 仓库->搜索 tiangolo/uwsgi-nginx-flask->部署最新版本->起个名字->运行环境->我的主机->就可以找到刚刚在上一步添加的你的主机了,之后就可以部署完成 首先我想对于 Docker 来讲, DaoCloud 肯定不是必须的,但通过容器化的管理来对主机进行部署是一个非常方便高效的方案, DaoCloud 无疑使这种新技术更加平易近人,也更加适应国内的网络环境 对于 Docker(DaoCloud)部署 Flask 可以参考我的一篇小文章 https://blog.yux-io.com/2016/04/22/setup-flask-with-docker/ 我觉得使用 DaoCloud 的免费 3x 额度是肯定不够用的,但在自己主机上部署前小试一把还是挺实用的,而且往 DaoCloud 上充钱碓配置的性价比也是非常低的, 16x 每个月会花费您 94 元,这才是 2G 内存的一个容器。 但是通过 DaoCloud 部署自己的主机则是免费的,我觉得这一点是非常良心的, DaoCloud 的国内镜像的速度比 Docker 的源速度快了很多很多 |
2
YUX 2016-04-26 06:46:17 +08:00 1
我觉得我用 Docker 并不是为了研究 Docker ,对我来说这只是一个小工具,部署好了容器,之后该干嘛干嘛。
|
3
yxwzaxns 2016-04-26 07:26:20 +08:00 via Android 2
我想说的是,代码构建是在国外完成的,不用改软件源,不用选国内,那是有特殊需要才选的
|
6
YUX 2016-04-26 07:39:40 +08:00
@pimin 运维也会不断学习新技术啊,想把 Docker 放到生产环境还是有不少坑的(据说)。但我不是专业队的,对我来说就是简单的省了不少事
|
8
wph95 2016-04-26 07:57:18 +08:00 1
你看的教程不是这个吧 http://open.daocloud.io/tag/python-kai-fa-zhe-de-docker-zhi-lv/
要是说这个教程看不懂没说清,你可以来揍我 |
10
pimin OP @wph95
我点这个教程之前不知道点哪里就点到了 github 看到 python-sample-base-image,然后部署了好久好久..往下看你这个教程根本没机会部署 等那个失败我把两个都删了 你可以等今天晚上 8-9 点试试在国内节点构建下 python-sample-base-image |
11
sakeven 2016-04-26 08:33:58 +08:00 via iPhone
我们一直推荐国外构建的。。。
|
12
zacard 2016-04-26 09:26:24 +08:00
然而我却角色 DaoCloud 的文档蛮好的。。。
|
13
qqmishi 2016-04-26 09:43:27 +08:00 via Android
daocloud 每次我部署 php 都是卡在开端口的地方,什么都不显示,,,
还有很多只支持部署到自有主机,但我都有主机了直接在上面玩就好了啊,为啥非得用 daocloud 的服务呢,国外 vps 又不存在速度问题,,, |
15
pimin OP |
16
qqmishi 2016-04-26 09:58:25 +08:00 via Android
@pimin 不不不,原来是有 TCP 和 HTTP 可选,现在直接没选项,然后就没法进行下一步了。
加速器在本机上装的时候对速度帮助很大,但我的自有主机都是国外的没什么用啊,,,也就剩个管理的作用 |
17
Tink 2016-04-26 12:02:02 +08:00 via iPhone 1
我只是觉得 daocloud 的网站逻辑有点乱
|
18
zongwan 2016-04-26 12:18:05 +08:00
专业版的收费规则有点乱
django 不想把密码放到配置文件里 进入 ssh 手动设置需要专业版 改完后一直没管只看看日志,专业版还在收费。之后关闭了专业版 依然可以运行 那么专业版只需要在需要改一下的时候开启,改完换回社区版。具体收费就不清楚是否是按月了 |
19
gevin 2016-04-26 12:44:35 +08:00
|
21
pimin OP |
22
pimin OP |
24
xujialiang 2016-04-26 13:23:49 +08:00 via iPhone
用微容器,可以减少很多部署时间
|