Docker 從入門到精通(一)基本操作

大雄45發表於2023-04-28
一,為什麼要用 Docker?

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

Docker 的特點:

1,更快速的交付和部署

2,更高效的虛擬化

3,更輕鬆的遷移和擴充套件

4,更簡單的管理

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

Docker 從入門到精通(一)基本操作Docker 從入門到精通(一)基本操作

Docker與虛擬機器建構對比

Docker 從入門到精通(一)基本操作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 利用容器來執行應用。映象是隻讀的,容器在啟動的時候建立一層可寫層作為最上層。

3、倉庫:倉庫是集中存放映象檔案的場所,倉庫註冊伺服器(Registry)上往往存放著多個倉庫,每個倉庫中又包含了多個映象,每個映象有不同的標籤(tag)。目前,最大的公開倉庫是 Docker Hub,存放了數量龐大的映象供使用者下載。

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

二,安裝 Docker

前提條件:Docker執行對核心要求比較高,因此一般建議直接在Ubuntu這樣的平臺執行。但作為一個容器標準,Docker也是支援其他如 , 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 images #檢視當前存在的映象
 
# 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 #獲取容器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表示在構建過程中不使用快取


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2943954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章