Docker 簡單應用

Docker簡介

Docker 可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。python

容器是徹底使用沙箱機制,相互之間不會有任何接口(相似 iPhone 的 app),更重要的是容器性能開銷極低。linux

  • docker 是一個工具,用來生成鏡像和容器的工具
  • 鏡像 是自定義的一套運行環境,能夠加入本身須要的軟件,如python等
  • 容器 是一個運行起來的環境,相似於一個正在運行的app

Docker 安裝

  • 安裝過程略  

Docker 使用

  • 獲取鏡像 docker pull images
  • 查看本地倉庫鏡像 docker images
  • 掛在鏡像 docker run ubuntu:15.10 /bin/echo "Hello world"

    會自動返回容器運行的id,若是想查看完成id可運行
    docker inspect 5a(返回的id) | grep Id
    Docker首先從本地主機上查找鏡像是否存在,若是不存在,Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像
  • 查看在運行的容器 docker ps [-a] 
    咱們發現並無任何容器在運行
    而後咱們運行docker ps -a
     -a 就是列出全部的容器,包括未在運行的,咱們看到最後一列狀態是Exited(退出的)
    從上面咱們能夠看到容器的ID,IMG,Status,commond,name等,其中名稱是容器自動分配的
  • 運行交互式的容器

    這樣咱們就進入了容器中,能夠在這裏面作一些操做
    若是咱們想退出直接輸入exit,可是咱們退出以後經過docker ps 命令並無看到有在運行的容器,這是由於直接exit,容器的狀態爲exited,並無運行,咱們能夠在交互界面直接按CTROL+Q+P,這是咱們在查看,發現容器的狀態是up

    那麼當咱們的容器已經在後頭運行了,咱們怎麼再次進入容器呢,若是咱們直接運行run,並無進入原來的容器,而是從新創建了一個容器,咱們能夠經過docker exec -it 775c7c9ee1e1(id)進入咱們的容器中

    那麼怎麼中止在後太運行的容器呢,第一種方法再次進入容器,而後輸入exit,第二種童工docker stop+(id或名字) 命令

    此時狀態已經變爲exited 若是想再次啓動該容器,直接運行docker start 命令
     當咱們的容器再也不使用時,咱們可使用docker rm 刪除(注意docker rmi 是用來刪除鏡像的) 
    只有在容器在未運行的狀況下才能刪除
  • 啓動容器(後臺模式)
    -d帶參數表示容器後臺運行

    可是咱們發現輸入命令後,容器狀態並非up,這是由於Docker容器在後臺運行,必需要有一個前臺進程,這裏咱們讓容器有前臺程序運行,就能夠實現容器的-d 啓動後存活,可使用"while true; do echo hello world; sleep 1; done",無限輸出hello world

    經過docker logs 能夠查看容器內的標準輸出

Dockerfile 建立鏡像

咱們除了使用公有倉庫裏面已有的鏡像外,當咱們要定製本身的鏡像時咱們能夠經過dockerfile文件建立咱們本身的鏡像,下面咱們以搭建scrapy爬蟲爲例,目標:建立一個鏡像,該鏡像包含scrapy爬蟲和scrapyddocker

  1. 創建目錄結構 咱們本身建立一個目錄,例如docker,目錄結構以下:

    code 用來放咱們的爬蟲代碼
    Dockerfile 是咱們的鏡像構建文件
    requirements.txt 爲咱們python程序須要的各類包
    2.dockerfile 文件內容

FROM ubuntu
# FROM指定基礎鏡像,而且必須是第一條指令
RUN apt-get update
RUN apt-get install -y python2.7
# RUN功能爲運行指定的命令
ENV PATH /usr/bin:$PATH
# ENV 設置環境變量 ADD . /code
# ADD一個複製命令,把文件複製到景象中 WORKDIR /code
# WORKDIR 設置工做目錄
ADD ./requirements.txt /code/bootstrap

而後在這個目錄打開終端經過docker build進行鏡像製做
docker build -t zhanghtt/scrapy:v1 .ubuntu

zhanghtt/scrapy 爲鏡像名
v1爲tags標識
.dockerfile文件所在的目錄
app

完成以後查看咱們的本地鏡像,顯示已經建立成功

至此咱們已經建立了一個包含python的ubuntu鏡像 一般基礎鏡像建立完成以後,咱們還須要增長不少依賴包,固然咱們能夠在建立dockerfile的時候加入,當時咱們能夠在建立完成以後再進行鏡像的更新
3.更新鏡像
要更新鏡像,首先要進入鏡像,而後跟操做linux系統同樣,進行軟件依賴包的安裝便可
好比覺得爲安裝pip 安裝apt-get install -y wget
安裝pip wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip -V  #查看pip版本
在這邊要特別注意安裝scrapy時要先安裝twisted,在安裝twisted可能會報錯,先安裝gcc便可解決
apt-get install gcc 軟件包所有安裝完成以後退出進行
提交副本
docker commit -m="has update" -a="zhanghtt" e218edb10161 zhanghtt/scrapy:v2
python2.7

  • -m:提交的描述信息
  • -a:指定鏡像做者
  • e218edb10161:容器ID
  • zhanghtt/ubuntu:v2:指定要建立的目標鏡像名

    但這樣會生成多個鏡像,若是可能儘可能仍是經過dokcerfile一次性構建鏡像
    4.啓動容器裏面的服務 經過端口映射啓動scrapyd docker run -p 6800:6800 -d scrapy:v4 scrapyd
  • -P :是容器內部端口隨機映射到主機的高端口。
  • -p : 是容器內部端口綁定到指定的主機端口(前面的爲映射的主機端口,後面的爲容器裏面的端口)。 使用docker port 查看端口映射狀況

鏡像保存爲文件

除了從倉庫中獲取鏡像外,咱們還能夠經過文件直接加載scrapy

  1. 首先把鏡像保存爲文件

    2.裝載鏡像
    能夠在任何裝 docker 的地方加載剛保存的鏡像了

    此時鏡像已經到了咱們的本地倉庫

小技巧

1.把該鏡像的記錄所有刪除掉,若是刪除全部鏡像的記錄,可使用:docker ps -a|awk '{print $1}'|xargs docker rm
2.將主機文件負債到容器
docker cp 要拷貝的文件路徑 容器名:要拷貝到容器裏面對應的路徑
3.進入容器 docker exec -it 775c7c9ee1e1工具

以上就是docker的最基礎的用法性能

k8s

k8s簡介

Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單而且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。