阿里雲部署Docker

Why Docker?

I 替代方案不夠優雅

上一篇文章使用CentOS部署Flask介紹到了隔離Python環境用到的兩種手段:virtualenv和pyenv,可是這兩種手段有以下缺陷:html

  • 只能提供Python級別的隔離,沒法確保系統庫和其餘環境
  • 若是不在正式環境中運行它,意味着開發環境和正式環境有差別,指不定會出什麼幺蛾子
  • 依靠修改腳本和設置路徑實現,不夠優雅與純粹
    (其餘缺陷能夠參考:Why I hate virtualenv and pip

II Docker足夠優秀

How To Deployment

阿里雲部署文檔
查看CentOS版本號:cat /proc/versionpython

Docker要求64位的系統且內核版本至少爲3.10web

 

個人內核信息docker


若是你使用阿里雲,能夠參考他們的更換內核文檔作系統版本升級數據庫

 

How To Use

參考文檔
Docker 容許你在容器內運行應用程序, 使用 docker run 命令來在容器內運行一個應用程序flask

想在CentOS經過ubuntu運行個程序試試?
docker run ubuntu:15.10 /bin/echo "Hello world"
爲你加載或下載ubuntu15.10,而後echo個Hello worldubuntu

聊聊命令和參數:

  • - t:在新容器中指定一個僞終端或終端centos

  • - i:容許你對容器內的標準輸入進行交互
    docker run -i -t ubuntu:15.10 /bin/bash安全

    看!這個時候主機名已經變動了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之間已經打開了一個安全隧道,且不須要暴露任何端口到容器外部 - 看看建立數據庫容器的時候,咱們沒有綁定端口到主機喲!
相關文章
相關標籤/搜索