1. 程式人生 > 其它 >Docker的基本管理

Docker的基本管理

Docker的基本管理

一、Docker 概述

1、Docker概念

  • Docker是一個開源的應用容器引擎,基於go語言開發並遵循了apache2.0協議開源
  • Docker是在Linux容器裡執行應用的開源工具,是一種輕量級的“虛擬機器”
  • Docker 的容器技術可以在一臺主機上輕鬆為任何應用建立一個輕量級的、可移植的、自給自足的容器

Docker的Logo設計為藍色鯨魚,拖著許多集裝箱

鯨魚可看作為宿主機,集裝箱可理解為相互隔離的容器,每個集裝箱中都包含自己的應用程式

2、Docker的設計宗旨

Build,Ship and Run Any App,Anywhere

即通過對應用元件的封裝、釋出、部署、執行等生命週期的管理,達到應用元件級別的“一次封裝,到處執行”的目的。這裡的元件,既可以是一個應用,也可以是一套服務,甚至是一個完整的作業系統

3、容器化越來越受歡迎,因為容器是

  • 靈活:即使是最複雜的應用也可以集裝箱化。
  • 輕量級:容器利用並共享主機核心。
  • 可互換:可以即時部署更新和升級。
  • 行動式:可以在本地構建,部署到雲,並在任何地方執行。
  • 可擴充套件:可以增加並自動分發容器副本。
  • 可堆疊:可以垂直和即時堆疊服務。

容器是在linux上本機執行,並與其他容器共享主機的核心,它執行的是一個獨立的程序,不佔用其他任何可執行檔案的記憶體,非常輕量

虛擬機器執行的是一個完成的作業系統,通過虛擬機器管理程式對主機資源進行虛擬訪問,相比之下需要的資源更多

4、Docker與虛擬機器/openstack的區別

5、容器在核心中支援2種重要技術

  • docker本質就是宿主機的一個程序,docker是通過namespace實現資源隔離,通過cgroup實現資源限制,通過寫時複製技術(copy-on-write)實現了高效的檔案操作(類似虛擬機器的磁碟比如分配500g並不是實際佔用物理磁碟500g)

二、Docker核心概念

1、映象

  • Docker的映象是建立容器的基礎,類似虛擬機器的快照,可以理解為一個面向 Docker 容器引擎的只讀模板
  • 通過映象啟動一個容器,一個映象是一個可執行的包,其中包括執行應用程式所需要的所有內容包含程式碼,執行時間,庫、環境變數、和配置檔案

2、容器

  • Docker的容器是從映象建立的執行例項,它可以被啟動、停止和刪除。所建立的每一個容器都是相互隔離、互不可見,以保證平臺的安全性
  • 可以把容器看做是要給簡易版的linux環境(包括root使用者許可權、映象空間、使用者空間和網路空間等)和執行在其中的應用程式。

3、倉庫

  • Docker倉庫是用來集中儲存映象的地方,當建立了自己的映象之後,可以使用push命令將它上傳到公有倉庫(Public)或者私有倉庫(Private)。當下次要在另外一臺機器上使用這個映象時,只需從倉庫獲取
  • Docker 的映象、容器、日誌等內容全部都預設儲存在 /var/lib/docker 目錄下。

三、安裝 Docker

1、防火牆設定

目前 Docker 只能支援 64 位系統。

systemctl stop firewalld.service
setenforce 0

2、安裝依賴包

yum install -y yum-utils device-mapper-persistent-data lvm2 
--------------------------------------------------------------------------------------------
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux核心中支援邏輯卷管理的通用裝置對映機制,它為實現用於儲存資源管理的塊裝置驅動提供了一個高度模組化的核心架構。
device mapper儲存驅動程式需要 device-mapper-persistent-data 和 lvm2。
---------------------------------------------------------------------------------

3、設定阿里雲映象源

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 

4、安裝 Docker-CE並設定為開啟自啟

yum install -y docker-ce

systemctl start docker.service
systemctl enable docker.service
---------------------------------------------------------------------------------------------
安裝好的Docker系統有兩個程式,Docker服務端和Docker客戶端。其中Docker服務端是一個服務程序,負責管理所有容器
Docker客戶端則扮演著Docker服務端的遠端控制器,可以用來控制Docker的服務端程序。大部分情況下Docker服務端和客戶端
執行在一臺機器上
------------------------------------------------------------------------------------------------

5、檢視Docker 版本資訊

docker version

四、Docker 映象操作

1、搜尋映象

  • 格式:docker search 關鍵字
docker search nginx

2、獲取映象

  • 格式:docker pull 倉庫名稱[:標籤]
  • 如果下載映象時不指定標籤,則預設會下載倉庫中最新版本的映象,即選擇標籤為 latest 標籤。
docker pull nginx

3、映象加速下載

類似於YUM源,使用國內源可加快映象拉取的速度

瀏覽器訪問 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 獲取映象加速器配置
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon
-reload systemctl restart docker

開啟阿里雲控制檯

選擇映象加速器

更換容器映象源

4、檢視映象資訊

  • 映象下載後存放在 /var/lib/docker
  • 下載的僅限資訊都是加密的

5、檢視下載的映象檔案資訊

cat /var/lib/docker/image/overlay2/repositories.json

6、檢視下載到本地的所有映象

docker images

REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    ae2feff98a0c   9 days ago   133MB
--------------------------------------------------------------------------------------------
REPOSITORY:映象屬於的倉庫;
TAG:映象的標籤資訊,標記同一個倉庫中的不同映象;
IMAGE ID:映象的唯一ID 號,唯一標識一個映象;
CREATED:映象建立時間;
VIRTUAL SIZE:映象大小;
--------------------------------------------------------------------------------------------

7、根據映象的唯一標識 ID 號,獲取映象詳細資訊

  • 格式:docker inspect 映象ID號
docker inspect ae2feff98a0c

8、為本地的映象新增新的標籤

  • 格式:docker tag 名稱:[標籤] 新名稱:[新標籤]
docker tag nginx:latest nginx:web

docker images | grep nginx

9、刪除映象

格式:
docker rmi 倉庫名稱:標籤                #當一個映象有多個標籤時,只是刪除其中指定的標籤
或者
docker rmi 映象ID號                        #會徹底刪除該映象
注意:如果該映象已經被容器使用,正確的做法是先刪除依賴該映象的所有容器,再去刪除映象。

docker rmi nginx:web

10、存出鏡像:將映象儲存成為本地檔案

格式:docker save -o 儲存檔名 儲存的映象
docker save -o nginx nginx:latest            #存出鏡像命名為nginx存在當前目錄下
ls -lh

11、載入映象:將映象檔案匯入到映象庫中

格式:
docker load < 存出的檔案
或者
docker load -i 存出的檔案

docker load < nginx