Docker 使用指南 (一)—— 基本操做

版權聲明:本文由田飛雨原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/93
來源:騰雲閣 https://www.qcloud.com/communityhtml

Docker 是一個可以把開發應用程序自動部署到容器的開源引擎。它由Docker公司的團隊編寫,基於Apache 2.0開源協議受權。它提供了一個簡單、輕量的建模方式,使開發生命週期更高效快速,鼓勵了面向服務的架構設計。Docker 項目的目標是實現輕量級的操做系統虛擬化解決方案。 Docker 的基礎是 Linux 容器(LXC)等技術。在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不須要去關心容器的管理,使得操做更爲簡便。用戶操做 Docker 的容器就像操做一個快速輕量級的虛擬機同樣簡單。nginx

Docker 的特色:docker

  1. 更快速的交付和部署
  2. 更高效的虛擬化
  3. 更輕鬆的遷移和擴展
  4. 更簡單的管理
  • 容器技術與傳統虛擬機性能對比ubuntu

  • Docker與虛擬機建構對比緩存

Docker 容器本質上是宿主機上的一個進程。Docker 經過 namespace 實現了資源隔離,經過 cgroups 實現了資源的限制,經過寫時複製機制(copy-on-write)實現了高效的文件操做。安全

Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,爲了隔離有問題的應用,Docker運用Namespace將進程隔離,爲進程或進程組建立已隔離的運行空間,爲進程提供不一樣的命名空間視圖。這樣,每個隔離出來的進程組,對外就表現爲一個container(容器)。須要注意的是,Docker讓用戶誤覺得本身佔據了所有資源,但這並非」虛擬機」。服務器

Docker 中的三個概念:鏡像,容器,倉庫網絡

  1. 鏡像(image):Docker 鏡像就是一個只讀的模板,鏡像能夠用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,用戶甚至能夠直接從其餘人那裏下載一個已經作好的鏡像來直接使用。
    鏡像是一種文件結構。Dockerfile中的每條命令都會在文件系統中建立一個新的層次結構,文件系統在這些層次上構建起來,鏡像就構建於這些聯合的文件系統之上。Docker官方網站專門有一個頁面來存儲全部可用的鏡像,網址是:index.docker.io架構

  2. 容器( Container):容器是從鏡像建立的運行實例。它能夠被啓動、開始、中止、刪除。每一個容器都是相互隔離的、保證安全的平臺。能夠把容器看作是一個簡易版的 Linux 環境,Docker 利用容器來運行應用。鏡像是隻讀的,容器在啓動的時候建立一層可寫層做爲最上層。app

  3. 倉庫:倉庫是集中存放鏡像文件的場所,倉庫註冊服務器(Registry)上每每存放着多個倉庫,每一個倉庫中又包含了多個鏡像,每一個鏡像有不一樣的標籤(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載。

Docker倉庫用來保存咱們的images,當咱們建立了本身的image以後咱們就可使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另一臺機器上使用這個image時候,只須要從倉庫上pull下來就能夠了。Docker 倉庫的概念跟 Git 相似,註冊服務器能夠理解爲 GitHub 這樣的託管服務。

一.安裝 Docker

本次實驗環境:騰訊雲服務器 CentOS 6.7 x86_64

前提條件:
Docker運行對內核要求比較高,所以通常建議直接在Ubuntu這樣的平臺運行。但做爲一個容器標準,Docker也是支持其餘如CentOS, Mac OS X, Windows等平臺。目前Docker支持如下版本CentOS:

  • CentOS 7(64位)
  • CentOS 6.5(64位)及之後
  • 在運行CentOS 6.5及之後版本時,須要內核版本>=2.6.32-431,由於這些內核包含了運行Docker的一些特定修改。

Docker默認使用AUFS做爲存儲驅動,可是AUFS並無被包括在Linux的主線內核中。CentOS中可使用Device Mapper做爲存儲驅動,這是在2.6.9內核版本引入的新功能。咱們須要先確認是否啓用該功能:

CentOS 7

Docker RPM包已經包含在CentOS-Extra倉庫中,因此咱們能夠直接使用Yum安裝:

# yum install docker

CentOS 6.6

須要注意的是,CentOS6.6中,已經有一個同名docker的可執行系統程序包。因此Docker RPM包命名爲docker-io,咱們先卸掉docker。

# yum -y remove docker

第三步 Install Docker-IO

# yum -y install docker-io

這樣完成了Docker的安裝。

# /etc/init.d/docker start #啓動docker
# docker info #查看 docker 基本信息

二. Docker 基本操做

# docker run -d --name mynginx nginx   #啓動nginx鏡像,沒有會自動pull
# docker stop bfd094233f96   #中止一個容器,根據容器 id 進行刪除
# docker rm bfd094233f96   #刪除一個容器
# docker attach d20f3dc6cd92  #進入一個正在運行的容器

-t 選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上,
-i 則讓容器的標準輸入保持打開。
–name 使用一個自定義的名字

此命令不太好用,建議使用如下命令進入容器:

[root@localhost docker] docker inspect --format "{{.State.Pid}}" mynginx  #獲取容器pid 19769
[root@localhost docker] nsenter --target 19769 --mount --uts --ipc --net --pid  #進入容器(推薦方法)
docker run -d -p 91:80 --name mynginx2 nginx    # -p 指定端口映射,將80映射爲host的91

存儲鏡像:

# docker save -o ubuntu_14.04.tar ubuntu:14.04

載入鏡像:

# docker load < ubuntu_14.04.tar  或者使用 
# cat ubuntu.tar |  docker import - test/ubuntu:v1.0

移除本地鏡像:

# docker rmi training/sinatra
清理全部未打過標籤的本地鏡像:

# docker rmi $(docker images -q -f "dangling=true")
其中 -q 和 -f 是 quiet,–filter 的縮寫, 完整的命令其實能夠寫着下面這樣,是否是更容易理解一點?

# docker rmi $(docker images --quiet --filter "dangling=true")
注: 容器是否會長久運行,是和docker run指定的命令有關,和 -d 參數無關。

要獲取容器的輸出信息,能夠經過 docker logs 命令。
# docker logs [container ID or NAMES]

刪除容器:
# docker rm 默認並不會刪除運行中的容器

有關容器和鏡像的底層信息:
# docker inspect container/image

能夠查看:
容器實例的IP地址
端口綁定列表
特定端口映射的搜索
收集配置的詳細信息

從容器內複製文件到指定的路徑上:
# docker cp container:path hostpath

使用Dockerfile來構建鏡像:
# docker build [options] PATH | URL

–rm=true表示構建成功後,移除全部中間容器 –no-cache=false表示在構建過程當中不使用緩存

相關文章
相關標籤/搜索