Docker學習筆記

1.什麼是Docker容器?

Docker容器是Docker進程+鏡像文件(Docker 鏡像中包含了運行環境和配置)python

官方定義:Docker是以Docker容器爲資源分割和調度的基本單位,封裝整個軟件運行時環境,爲開發者和系統管理員設計的,用於構建、發佈和運行分佈式應用的平臺。是一個跨平臺,可移植而且簡單易用的容器解決方案。web

Docker是經過內核虛擬化技術(namespace及cgroups等)來提供容器的資源隔離與安全保障等因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機VM額外的操做系統開銷,提升資源利用率docker

 

1.1 namespace 隔離容器的運行環境

  • 當用dockerrun啓動一個容器時,Docker 將在後臺爲容器建立一個獨立的命名空間。命名空間提供了最基礎也是最直接的隔離,在容器中運行的進程不會被運行在本地主機上的進程和其餘容器經過正常渠道發現和影響。
  • 從網絡架構的角度來看,全部的容器其實是經過本地主機的網橋接口(Docker0)進行相互通訊,就像物理機器經過物理交換機通訊同樣。 

1.2 控制組資源控制的安全

控制組是Linux容器機制中的另一個關鍵組件,它負責實現資源的審計和限制。當用docker run啓動一個容器時,Docker將在後臺爲容器建立一個獨立的控制組策略集合。
它提供了不少有用的特性;以及確保各個容器能夠公平地分享主機的內存、CPU、磁盤等資源;固然,更重要的是,控制組確保了當發生在容器內的資源壓力不會影響到本地主機系統和其餘容器。
儘管控制組不負責隔離容器之間相互訪問、處理數據和進程,可是它在防止拒絕服務攻擊(DDoS)方面是必不可少的。尤爲是在多用戶的平臺(好比公有或私有的PaaS)上,控制組十分重要。例如,當某些應用容器出現異常的時候,能夠保證本地系統和其餘容器正常運行而不受影響。

數據庫

 

優勢

  • 持續部署與測試:消除線上線下的環境差別,保證應用生命週期的環境一致性和標準化。開發人員利用鏡像實現標準開發環境的構建, 開發完成後經過經過封裝着完整環境和應用的鏡像進行遷移,由此,測試和運維人員能夠直接部署軟件鏡像來進行測試和發佈,大大簡 化了持續集成,測試和發佈的過程。
  • 跨雲平臺支持:Docker帶來的最大好處就是其適配性,愈來愈多的雲平臺支持Docker,同時也讓應用多平臺混合部署成爲可能。
  • 環境標準化和版本控制:基於Docker提供的環境一致性和標準化,你可使用Git等工具對Docker鏡像進行版本控制,相比基於代碼的版本控制來講,你還能夠對整個應用運行環境進行本本控制,一旦出現故障能夠快速回滾。相比之前的虛擬機鏡像,Docker壓縮和備份的速度更快,鏡像啓動也像啓動一個普通進程同樣快。
  • 高資源利用率和隔離:Docker容器沒有管理程序的額外開銷,與底層共享操做系統,性能更加優良,系統負載更低,在同等條件下能夠運行更多的應用實      例,能夠更充分的利用系統資源。同時,Docker擁有不錯的資源隔離與限制能力,能夠精確的對應用分配CPU、內存等資源,保證應用 間不會相互影響
  • 容器跨平臺性和鏡像:Docker爲容器設定了一整套標準化的配置方法,將應用及其依賴的運行環境打包成鏡像,真正實現了「構建一次,處處運行」的理念,      大大提升了容器的跨平臺性
  • 應用鏡像倉庫:Docker官方構建了一個鏡像倉庫,

2.Docker的應用場景

  • Web 應用的自動化打包和發佈。
  • 自動化測試和持續集成、發佈。
  • 在服務型環境中部署和調整數據庫或其餘的後臺應用。
  • 從頭編譯或者擴展示有的 OpenShift 或 Cloud Foundry 平臺來搭建本身的 PaaS 環境

3.Docker 架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和建立Docker容器。編程

Docker 容器經過 Docker 鏡像來建立。ubuntu

容器鏡像的關係相似於面向對象編程中的對象瀏覽器

 

4.各組成部分

5.docker run

Docker 容許你在容器內運行應用程序, 使用 docker run 命令來在容器內運行一個應用程序。安全

docker run -i -t ubuntu:15.10 /bin/bash bash

  • -t:在新容器內指定一個僞終端或終端。服務器

  • -i:容許你對容器內的標準輸入 (STDIN) 進行交互

能夠經過運行exit命令或者使用CTRL+D來退出容器

6.中止容器

docker stop + CONTAINER ID 命令來中止容器;

docker ps 查看正在運行的容器;

docker start 已經中止的容器,咱們可使用改命令 來啓動;

docker ps -l 查詢最後一次建立的容器;

docker rm 命令來刪除不須要的容器(刪除容器時,容器必須是中止狀態);

docker restart 正在運行的容器,咱們可使用該命令來重啓;

7.運行一個web應用

 docker pull training/webapp  // 載入鏡像

 

 docker run -d -P training/webapp python app.py  

  • -d:讓容器在後臺運行。

  • -P: 隨機端口映射,容器內部端口隨機映射到主機的高端口

  • -p: 指定端口映射,格式爲:主機(宿主)端口:容器端口

使用 docker ps 來查看咱們正在運行的容器:

Docker 開放了 5000 端口(默認 Python Flask 端口)映射到主機端口 32769 上。

這時咱們能夠經過瀏覽器訪問WEB應用

也能夠經過 -p 參數來設置不同的端口 "docker run -d -p 5000:5000 training/webapp python app.py "容器內部的 5000 端口映射到咱們本地主機的 5000 端口上。

8.列出鏡像列表

咱們可使用 docker images 來列出本地主機上的鏡像

docker search  搜索 httpd 來尋找適合咱們的鏡像

docker pull 下載鏡像

當咱們從docker鏡像倉庫中下載的鏡像不能知足咱們的需求時,咱們能夠經過如下兩種方式對鏡像進行更改。

1)從已經建立的容器中更新鏡像,而且提交這個鏡像

  • 2)使用 Dockerfile 指令來建立一個新的鏡像

docker tag 命令,爲鏡像添加一個新的標籤。

 

 

獲取一個新的鏡像

相關文章
相關標籤/搜索