美文网首页
阿里云部署Docker

阿里云部署Docker

作者: Azen | 来源:发表于2018-03-26 13:56 被阅读3570次

    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之间已经打开了一个安全隧道,且不需要暴露任何端口到容器外部 - 看看创建数据库容器的时候,我们没有绑定端口到主机哟!

    相关文章

      网友评论

          本文标题:阿里云部署Docker

          本文链接:https://www.haomeiwen.com/subject/lhfowxtx.html