Docker 使用指南(一)一 基本操作

文章目錄

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

一,爲什麼要用 Docker?

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


Docker 的特點:


1,更快速的交付和部署

2,更高效的虛擬化

3,更輕鬆的遷移和擴展

4,更簡單的管理


容器技術與傳統虛擬機性能對比:



Docker與虛擬機建構對比

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

Docker有五個命名空間:進程、網絡、掛載、宿主和共享內存,爲了隔離有問題的應用,Docker運用Namespace將進程隔離,爲進程或進程組創建已隔離的運行空間,爲進程提供不同的命名空間視圖。這樣,每一個隔離出來的進程組,對外就表現爲一個container(容器)。需要注意的是,Docker讓用戶誤以爲自己佔據了全部資源,但這並不是”虛擬機”。

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

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

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

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

Docker倉庫用來保存我們的p_w_picpaths,當我們創建了自己的p_w_picpath之後我們就可以使用push命令將它上傳到公有或者私有倉庫,這樣下次要在另外一臺機器上使用這個p_w_picpath時候,只需要從倉庫上pull下來就可以了。Docker 倉庫的概念跟 Git 類似,註冊服務器可以理解爲 GitHub 這樣的託管服務。

二,安裝 Docker



前提條件: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 search centos  #搜索容器 # docker pull centos  #下載容器 # docker p_w_picpaths  #查看當前存在的鏡像 # docker run centos /bin/echo 'hello world'  #運行一條命令後直接退出 # docker run --name mydocker -it centos /bin/bash  #進入docker容器


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

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

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

[root@localhost docker]# docker inspect --format "``.`State`.`Pid`" mynginx  #獲取容器pid19769[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 p_w_picpaths -q -f "dangling=true")

其中 -q 和 -f 是 quiet,–filter 的縮寫, 完整的命令其實可以寫着下面這樣,是不是更容易理解一點?

# docker rmi $(docker p_w_picpaths --quiet --filter "dangling=true")

注: 容器是否會長久運行,是和docker run指定的命令有關,和 -d 參數無關。

要獲取容器的輸出信息,可以通過 docker logs 命令。

# docker logs [container ID or NAMES]

刪除容器:

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

有關容器和鏡像的底層信息:

# docker inspect container/p_w_picpath



可以查看:


容器實例的IP地址

端口綁定列表

特定端口映射的搜索

收集配置的詳細信息


從容器內複製文件到指定的路徑上:


docker cp container:path hostpath

使用Dockerfile來構建鏡像:

docker build [options] PATH | URL


–rm=true表示構建成功後,移除所有中間容器

–no-cache=false表示在構建過程中不使用緩存


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章