欢迎关注
最酷最in的云资讯

阿里云部署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

阿里云部署Docker

我的内核信息

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

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

阿里云部署Docker

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

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

阿里云部署Docker

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

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

阿里云部署Docker

刚刚运行的Docker在这里

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

阿里云部署Docker

查看Log们

docker stop 标识符/name停止docker

阿里云部署Docker

停止之后,果然木有了…

Docker容器使用

  • docker查看docker命令选项

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

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

阿里云部署Docker

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中运行着的进程们

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

阿里云部署Docker

返回了很大一坨信息呢

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

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

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

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

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

阿里云部署Docker

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

Docker镜像的使用

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

  1. 如何管理和使用本地的Docker主机镜像

  2. 创建镜像(对的,之后直接把镜像安装到另一台机器上,就能保证环境一致啦!)

  • docker imges列出本地主机上的镜像

阿里云部署Docker

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

    • PEROSITORY:镜像的仓库源

    • TAG:镜像的标签

    • IMAGE ID:镜像ID
      现在知道docker run -t -i ubuntu:15.10 /bin/bash中的15.10出自哪里了吧
      当不指定镜像版本的时候,系统默认使用最新版

  • docker search 系统名(如centos)在docker hub上查找合适的镜像

阿里云部署Docker

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

作者:Azen
链接:https://www.swifty.cc/p/972cd8674024
来源:云微
云微著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

赞(0) 打赏
未经允许不得转载:云微资讯 » 阿里云部署Docker
分享到: 更多 (0)

云微资讯 科技新媒体资讯平台

关于我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏