Docker學習筆記

容器VS虛擬機

     

 

容器比虛擬機更節省硬盤空間,由於虛擬機需包含一個完整操做系統,而容器只包含應用和其依賴的庫nginx

虛擬機須要模擬硬件行爲對CPU和內存消耗至關大git

 

Docker簡介

Docker是把開發的應用程序自動部署到容器的開源引擎,使用go語言編寫github

Github地址:https://github.com/docker/dockerweb

容器是一種虛擬化的方案docker

與虛擬機不一樣的是虛擬機是虛擬運行在物理硬件之上,而容器直接運行在操做系統之上編程

所以容器虛擬化也稱之爲操做系統虛擬化ubuntu

容器只能運行與宿主操做系統相同或類似內核的操做系統,依賴Linux內核的Namespace和Cgroups(Control Group)特性windows

Docker 的目標是:centos

一、提供簡單輕量的建模方式bash

二、職責的邏輯分離

三、快速高效的開發生命週期

Docker的使用場景:

一、建立隔離的容許環境

二、搭建測試環境

三、使用Dockerk開發、測試、部署服務

四、構建多用戶的平臺即服務(PaaS)基礎設施

五、提供軟件即服務(SaaS)應用程序

六、高性能、超大規模的宿主機部署

Docker的基本組成

Docker Image鏡像:

容器的基石

層疊的只讀文件系統

聯合加載(union mount)

 

Docker Container 容器

經過鏡像啓動

啓動和執行階段

寫時複製(copy on write)

 

Docker Registry 倉庫

公用

私有

包含了多個鏡像

Docker 相關技術介紹

Docker依賴Linux內核特性 Namespace和Cgroups

Namespace 命名空間

編程語言

    封裝  - 代碼分離

操做系統

     系統資源的隔離

     進程、網絡、文件系統等

一、PID 進程隔離

二、NET 管理網絡接口

三、IPC   管理跨進程通訊的訪問

四、MNT 管理掛載點

五、UTS    隔離內核和版本標示

Cgroups 控制組

用來分配資源

來源於google 整合Linux Kernrl2.6.24@2007

功能:

資源限制

優先級設定

資源計量

資源控制

Docker 容器的能力

一、文件系統隔離:每一個容器都有本身的root文件系統

二、進程隔離:每一個容器都運行在本身的進程環境中

三、網絡隔離:容器間的虛擬網絡接口和IP地址都是分開的

四、資源隔離和分組:使用cgroups將CPU和內存之類的資源獨立分配給每一個Docker容器

Docker的安裝

支持ubuntu centos os x  windows

 官方安裝文檔 https://docs.docker.com/

由於國內網絡訪問Docker鏡像源速度太慢 這裏採用阿里雲的鏡像源加速安裝
安裝請訪問https://cr.console.aliyun.com/(須要有阿里雲帳號)

windows

微軟在windows 2016 中原生支持了Docker

https://msdn.microsoft.com/zh-cn/virtualization/windowscontainers/containers_welcome

其餘版本windows 可使用boot2docker 建議windows7以上

boot2docker 項目地址 

https://github.com/boot2docker/boot2docker

Docker 基本命令

$docker info    
#查看Docker信息
$docker pull ubuntu              
#從倉庫下載ubuntu鏡像
$docker run -i -t ubuntu /bin/bash   
#建立一個交互式的容器
$docker run --name [容器名] -i -t ubuntu /bin/bash   
#定義容器名
$docker run --name [容器名] -d ubuntu /bin/bash   
#建立一個守護方式容器
$docker attach [容器名]           
#進入在後臺運行的容器
$docker ps
#查看正在運行的容器
$docker ps -a    
#查看全部容器
$docker inspect [容器名]   
#查看容器信息
$docker start -i [容器名]          
#啓動容器
$docker [stop][kill] [容器名] 
#sotp是發送結束信號  kill是強制關閉
$docker rm [容器名]                
#刪除容器
$docker rmi [鏡像名]                
#刪除鏡像
$docker rmi ubuntu $(docker images -q)
#刪除ubuntu鏡像的全部標籤 
$docker images 
#查看本地鏡像 -a 查看所有鏡像 -f 過濾條件 --no-trunc 不截斷ID -q 只顯示鏡像惟一ID
$Ctrl+P Ctrl+Q                    
#退出交互式容器的bash 容器在後臺運行
$docker logs -f -t --tail [容器名]  
#查看容器日誌  -f跟蹤日誌變化 -t加上時間戳 --tail 指定日誌返回結尾的數量
$docker top [容器名] 
#查看運行中容器的進程
$docker exec -d -i -t [容器名] /usr/sbin/service nginx start 
#在運行中的容器運行一個命令
$docker run -p [80] [8080:80][0.0.0.0:80][0.0.0.0:8080:80] -i -t ubuntub /bin/bash
#映射端口 不指定宿主機端口宿主機會隨機映射端口

  

製做鏡像

$docker commit [容器名] -a -m -p [倉庫名]:[標籤]
#使用commit構建鏡像 a 指定做者 -m 記錄鏡像構建的信息 -p 不暫停正在運行的容器

  

使用Dockerfile文件製做鏡像

$docker bulid -t="ubuntu/web" .  #須要在dockerfile文件目錄下執行

dockerfile文件指令

FORM <imgage> <imgage>:<tar> #必須是已經存在的鏡像
MAINTAINER <做者信息> #做者信息
RUN  /bin/sh -c 命令 #sell模式 RUN命令是鏡像建立過程當中啓動
EXPOSE 80  #告訴docker 容器開放的端口
CMD
相關文章
相關標籤/搜索