阿里云部署Docker

wiki这个东东实在是个好东西...想着在阿里云上部署一套 参考链接。但是之前还在上面部署了一个Flask跑起来的小服务器...希望以后将他改造为自己的博客系统,所以需要用到Docker这个东东来做隔离...

嘛...写着写着的一点小感悟:虽然人的基本认知模型是:是什么-为什么-怎么样,但是写东西或者学东西的时候,往往从「为什么」入手会更容易,尤其是研究新技术。某个技术之所以出现,一定是为了解决某个问题的,所以所以,一定要先把问题找到、讲明白。
「以终为始」「不是学某个东东,而是用某个东东」 - 既然是用,就一定是要解决问题的...嗯嗯,有点啰嗦...

Why Docker?

I 替代方案不够优雅

上一篇文章使用CentOS部署Flask介绍到了隔离Python环境用到的两种手段:virtualenv和pyenv,但是这两种手段有如下缺陷:

  • 只能提供Python级别的隔离,无法确保系统库和其他环境
  • 如果不在正式环境中运行它,意味着开发环境和正式环境有差异,指不定会出什么幺蛾子
  • 依靠修改脚本和设置路径实现,不够优雅与纯粹
    (其他缺陷可以参考:Why I hate virtualenv and pip

II Docker足够优秀

How To Deployment

阿里云部署文档
查看CentOS版本号:cat /proc/version

Docker要求64位的系统且内核版本至少为3.10

我的内核信息

如果你使用阿里云,可以参考他们的更换内核文档做系统版本升级

How To Use

参考文档
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序

想在CentOS通过ubuntu运行个程序试试?
docker run ubuntu:15.10 /bin/echo "Hello world"
为你加载或下载ubuntu15.10,然后echo个Hello world

聊聊命令和参数:

  • - t:在新容器中指定一个伪终端或终端

  • - i:允许你对容器内的标准输入进行交互
    docker run -i -t ubuntu:15.10 /bin/bash

    看!这个时候主机名已经变更了

  • - c:启动一个后台运行的容器
    docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"

    返回了一长串标识符,标识这个启动了的容器

  • docker ps可以查看当前运行着的Docker们

    刚刚运行的Docker在这里

  • docker logs 标识符/name查看指定标识符下docker的log们

    查看Log们

  • docker stop 标识符/name停止docker

    停止之后,果然木有了...

Docker容器使用

  • docker查看docker命令选项

  • docker command --help查看command的使用帮助

  • docker run -d -P training/webapp python app.py在docker中运行一个flask应用

    docker run

    • -d --detach:后台运行 Run container in background and print container ID
    • -P --publish-all:将容器内部使用的网络端口,映射到主机的一个随机端口上 Publish all exposed ports to random ports
    • -p --publish value:绑定指定的端口 Publish a container's port(s) to the host (default []) - 和-P互斥吧应该
      docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py同时指定映射到主机的IP和Port,并指定绑定UDP端口

TODO:示例图片待补充...不会在Docker里配置Python环境,跑不起来flask...

  • docker ps查看到的docker信息会有PORTS字段,
    0.0.0.0:32769->5000/tcp表示docker中的5000端口,映射到了主机的32769端口上

  • docker port docker标识符查看标识符的docker中port的映射关系

  • docker logs -f 标识符查看docker的标准输出

    • -f:像使用tail -f一样来输出容器内部的标准输出
  • docker top 标识符查看Docker中的运行着的进程

    Docker中运行着的进程们

  • docker inspect检查docker中的底层信息,返回一个JSON文件记录着Docker容器的配置和状态信息

    返回了很大一坨信息呢

  • docker stop 标识符停止容器
    通过docker ps -a指令,还能看到已经stop的容器

  • docker start 标识符重启已经停止的容器

  • docker ps -l查询最后一次创建的容器 last嘛

  • docker restart 标识符重启正在运行的容器

  • docker rm 标识符移除停止状态下的容器

    移除之后,我们找不到jolly_stallman了...伤感ing...

Docker镜像的使用

当运行容器的时候,如果使用的镜像在本地不存在,会从docker镜像仓库中下载。默认是从Docker Hub公共镜像源下载的。
辣沫,这一小节,来看下:

  1. 如何管理和使用本地的Docker主机镜像
  2. 创建镜像(对的,之后直接把镜像安装到另一台机器上,就能保证环境一致啦!)
  • docker imges列出本地主机上的镜像

    对,我只有一个镜像...尴尬...

    • PEROSITORY:镜像的仓库源
    • TAG:镜像的标签
    • IMAGE ID:镜像ID
      现在知道docker run -t -i ubuntu:15.10 /bin/bash中的15.10出自哪里了吧
      当不指定镜像版本的时候,系统默认使用最新版
  • docker search 系统名(如centos)在docker hub上查找合适的镜像

    查查CentOS...不知道为啥,对CentOS有一种谜之偏爱...

  • docker pull 镜像NAMEdocker pull 系统名预先下载某镜像,暂不使用。第二个指令默认下载官方版

  • docker commit -m="has update" -a="镜像作者名" Docker标识符 目标镜像名(一般是 作者名/操作系统:v版本号)

    • 示例:docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
    • commit之后,本地就有了这个镜像,通过docker images可以看到
  • docker tag xxx 镜像名称为镜像名称指定一个新的tag

使用描述文件构建镜像:没啥大意思也不难,可以参考这里

容器连接

目标:通过端口,连接到一个Docker

Docker连接到另一个容器,有两个方案:

  • 方案一:端口映射(只能连接到主机的端口吧...)
  • 方案二:使用Docker的连接系统,将多个Docker连接在一起,共享连接信息。连接会创建父子关系,父容器可以看到子容器的信息。
    • 先创建一个数据库容器sudo docker run -d --name db training/postgres
    • 再创建一个web服务器容器连接到数据库容器sudo docker run -d -P --name web --link db:db training/webapp python app.py
      • --link name:alias
    • db是父容器,web是子容器,父可访问子。此时两个docker之间已经打开了一个安全隧道,且不需要暴露任何端口到容器外部 - 看看创建数据库容器的时候,我们没有绑定端口到主机哟!
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容