Docker是基於Go語言實現的開源容器項目,誕生於2013年年初,由dotCloud公司發起,此公司後更名爲Docker Inc.Docker項目已加入Linux基金會,並遵循Apache2.0協議,代碼託管在Github:Docker源碼地址nginx
各大操做系統現都支持Docker,而且最新的Linux發行版RedHat、CentOS、Ubuntu中均已默認帶有Docker軟件包.git
Docker的構想是要實現「Build,Ship and Run Any App, Anywhere」,即經過對應用的封 裝( Packaging)、分發( Distribution)、部署( Deployment)、運行( Runtime)生命週期進行管 理,達到應用組件級別的「 一次封裝 ,處處運行」 。 這裏的應用組件, 既能夠 是一個 Web 應 用、一個編譯環境,也能夠是一套數據庫平臺服務,甚至是一個操做系統或集羣。github
基於 Linux 平 臺上的多項開源技術, Docker 提供了高效、敏捷和輕量級的容器方案,並 支持部署到本地環境和多種主流雲平臺 。 能夠說 , Docker首次爲應用 的開發 、運行和部署提 供了「一站式」的實用解決方案。web
早期Docker代碼實現是基於LXC(Linux Containers,即Linux容器),自0.9版本開始,Docker開發了libcontainer項目做爲更普遍的容器驅動實現.docker
簡單地講,讀者能夠將 Docker 容器理解爲一種輕量級的沙盒( sandbox)。 每一個容器內 運行着一個應用,不一樣的容器相互隔離,容器之間也能夠經過網絡互相通訊。 容器的建立和 中止十分快速,幾乎跟建立和終止原生應用 -致;另外,容器自身對系統資源的額外需求也十分有限,遠遠低於傳統虛擬機 。 不少時候,甚至直接把容器看成應用自己也沒有任何 問題。shell
Docker 運行基本命令和模式:數據庫
Docker Engine:ubuntu
Docker architecture:瀏覽器
虛擬化 (virtualization)技術是一個通用的概念,在不一樣領域有不一樣的理解。 在計算領 域,通常指的是計算虛擬化 (computingvirtualization),或一般說的服務器虛擬化。 維基百科 上的定義以下:安全
「在計 算機技 術中,虛擬化 是 一種資 源管理技術,是將 計 算機 的各類實 體資 源,如服務器 、 網絡、 內存及存儲等,予以抽 象、轉換後呈現出來,打破實體 結 構間的不可切割的障礙,使用戶能夠用比本來的紐態更好的方式來應用這些資源 。」
可見,虛擬化的核心是對資源的抽象,目標每每是爲了在同一個主機上同時運行多個系
統或應用,從而提升系統資源的利用率,而且帶來下降成本、方便管理和容錯容災等好處 。
Docker 和常見的虛擬機方式的不一樣之處:
用戶能夠訪問 Docker 官網的 Get Docker Docker 官網頁面,查看獲取 Docker 的方式,以及 Docker 支持的平臺類型目前 Docker 支持 Docker 引 擎、 Docker Hub、 Docker Cloud 等多種服務 。
Linux安裝
$sudo apt-get update $sudo apt-get install docker-ce docker-ce-cli containerd.io
Mac安裝
$brew cask install docker
或者:
手動下載安裝 :Docker Mac傳送門
運行:
安裝完成後啓動Docker服務,而後嘗試運行以下命名:
$docker run -d -p 80:80 --name webserver_test nginx # 而後在瀏覽器訪問:http://127.0.0.1 看看效果,一個nginx服務器已經搭建完成了,是否是很香
鏡像是Docker三大核心概念中最重要的,是建立 Docker容器的基礎。本質上是一個文件,經過版本管理和增量的文件系統, Docker 提供了一套十分簡單的機制來建立和更新現有的鏡像,用戶甚至能夠從網上下載一個已經作好的應用鏡像,並直接使用.
Docker 運行容器前須要本地存在對應的鏡像, 若是鏡像不存在, Docker 會嘗試先從默 認鏡像倉庫下載(默認使用 Docker Hub 公共註冊服務器中的倉庫), 用戶也能夠經過配置, 使用自定義的鏡像倉庫。
$docker pull NAME [:TAG] $docker pull ubuntu:18.04 命令至關於 docker pull registry.hub.docker.com/ubuntu:18.04 若是從非官方的倉庫下載,則須要在倉庫名稱前指定完整的倉庫地址 NAME:鏡像倉庫名稱 TAG:鏡像標籤,若是不指定默認爲latest,即會下載倉庫中最新版本的鏡像
注意:
通常來講,鏡像的latest 標籤意味着該鏡像的內容會跟蹤最新版本的變動而變化,內容是不穩定的。所以,從穩定性上考慮,不要在生產環境中忽略鏡像的標籤信息或使 用默認的latest 標記的鏡像。
$docker images 或者 $docker image ls # 參數 > --digests=true|false: 列出鏡像的數字摘要值,默認爲否; > -f, --filter=[] : 過濾列出的鏡像, 如dangling=true 只顯示沒有被使用的 鏡像;也可指定帶有特定標註的鏡像等; > --format="TEMPLATE" : 控制輸出格式,如: .ID表明ID信息,.Repository 表明倉庫信息等; > -q, --quiet=true|false: 僅輸出ID信息, 默認爲否 更多子命令選項還能夠經過man docker-images來查看
顯示如圖:
爲了方便在後續工做中使用特定鏡像,還可使用docker tag
命令來爲本地鏡像任 意添加新的標籤。 例如,添加一個新的myubuntu: latest鏡像標籤:
$docker tag ubuntu:latest myubuntu:latest
使用 docker inspect
命令能夠獲取該鏡像的詳細信息,包括製做者、適應架構、各層的數字摘要等:
$docker inspect ubuntu:18.04 # 上面代碼返回的是一個JSON格式的消息,若是咱們只要其中一項內容時,可使用 -f 來指定,例如,獲取鏡像的ContainerConfig: $docker inspect -f {{".ContainerConfig"}} ubuntu:18.04
history
命令查看鏡像歷史history
子命令,該命令將列出各層的建立信息。$ docker search nginx 參數: -f, --filter filter: 過濾輸出內容 --format string: 格式化輸出內容 --limit int: 顯示個數,默認25 --no-trunc: 不截斷輸出結果 $ docker search --filter=is-official=true nginx
使用 docker rmi
或 docker image rm
命令能夠刪除鏡像, 命令格式爲 docker<br/>rmi IMAGE [IMAGE ... ]
, 其中 IMAGE 能夠爲標籤或 ID。
$docker rmi myubuntu:latest 參數: -f, -force: 強制刪除鏡像, 即便有容器依賴它; -no-prune: 不要清理未帶標籤的父鏡像。 注意: 當同 一 個鏡像擁有多個標籤的時候,docker rmi 命令只是刪除了該鏡像多個標籤中的指定 標籤而巳, 並不影響鏡像文件 # 刪除全部鏡像 $docker rmi $(docker ps -a) # 慎用啊!!!!
使用Docker一段時間後, 系統中可能會遺留一些臨時的鏡像文件, 以及一些沒有被使 用的鏡像, 能夠經過docker image prune
命令來進行清理。
建立鏡像的方法主要有三種:
Dockerfile是一個文本格式的配置文件,用戶可使用Dockerfile來快速建立自定義的鏡像。由一行行命令語句組成,而且支持以#開頭的註釋行。通常而言,Dockerfile主體內容分爲四部分:
未完待續......