什麼是 Docker
<hr />
Docker 是一個虛擬化容器引擎,完全使用沙箱隔離機制,較傳統的 VM 虛擬機有很大優勢。
傳統虛擬機(VM)和虛擬化容器(Docker)的區別:
傳統的 VM 虛擬機不能共享資源 , 比如在 VMWare 中安裝了一個內存爲 4GB 的 Linux 操作系統 , 意味着該Linux系統使用了宿主機中固定的 4GB 內存且不能與宿主機或其它虛擬系統共享該資源 , 可能會造成資源浪費或資源溢出。
Docker 彌補了傳統 VM 虛擬機的缺點 , 每個虛擬化操作系統可以互相共享資源 , 解決了資源溢出或者資源浪費等一系列問題。
Docker 主要概念
<hr />
Docker 鏡像(Image)
操作系統分爲內核和用戶空間。對於 Linux 而言,內核啓動後,會掛載 root 文件系統爲其提供用戶空間支持。而 Docker 鏡像(Image)就相當於是一個 root 文件系統。
Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如環境變量、用戶等)。
Docker 容器(Container)
Docker 鏡像和 Docker 容器的關係,就像是面向對象程序設計中的類與對象,鏡像是靜態的定義。
容器是鏡像運行時的實體,可以被創建、啓動、停止、刪除、暫停等。
容器內的進程是運行在一個隔離的環境裏,使用起來就好像是在一個獨立於宿主的系統下操作一樣,這種特性使得容器封裝的應用比直接在宿主運行更加安全。
Docker 倉庫(Registry)
鏡像構建完成之後,一行命令就可以在當前的宿主機上運行起來,但是如果要在其它服務器上使用這個鏡像,就需要一個集中存儲鏡像的倉庫 — 即 Docker 倉庫。
公有 Docker Registry:最常使用的 Registry 公開服務是官方的 Docker Hub,但在國內訪問會比較慢,而國內的一些雲服務商提供了針對 Docker Hub 的鏡像服務,常見的有 阿里雲、DaoCloud 加速器,比直接從 Docker Hub 下載速度會提高很多。
私有 Docker Registry:可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 鏡像,可以直接使用做爲私有 Registry 服務。
安裝 Docker
<hr />
使用腳本自動安裝
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
執行這兩行命令後,腳本就會自動的將一切準備工作做好,並且把 Docker CE 安裝在系統中。
使用 APT 安裝
# 安裝一些必要的系統工具
$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# 安裝 GPG 證書
$ curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 寫入軟件源信息
$ sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 更新軟件源
$ sudo apt-get -y update
# 安裝 Docker CE
$ sudo apt-get -y install docker-ce
Docker 用戶組
<hr />
安裝之後,默認情況下,Docker 命令會使用 Unix socket 與 Docker 引擎通訊,而只有 Root 用戶和 Docker 組的用戶纔可以訪問 Docker 引擎的 Unix socket,一般 Linux 系統上不會直接使用 Root 用戶。因此,更好地做法是將需要使用 Docker 的用戶加入 Docker 用戶組。
# 建立 Docker 用戶組
$ sudo groupadd docker
# 將用戶加入 Docker 用戶組
$ sudo usermod -aG docker 用戶名
鏡像加速器
<hr />
由於國內從 Docker Hub 下載鏡像有時會非常緩慢,因此可以配置國內雲服務商提供的鏡像加速器:
獲取阿里雲鏡像加速器
添加鏡像加速器
- 登錄阿里雲
- 進入 容器鏡像服務控制檯 > 鏡像加速器
- 添加鏡像加速器
- 複製加速器地址,如下圖
配置鏡像加速器
編輯 daemon.json 配置文件
$ sudo nano /etc/docker/daemon.json
添加以下代碼
{
"registry-mirrors": [
"鏡像加速器地址"
]
}
重啓 Docker 服務
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
檢查加速器是否生效
$ docker info
看到輸出以下內容,說明鏡像加速器配置成功
Registry Mirrors:
鏡像加速器地址
Docker 常用命令
<hr />
Docker 鏡像命令
# 列出鏡像列表
$ docker images
$ docker image ls -a
# 運行 Docker 鏡像(守護態方式)
$ docker run -d 鏡像名
# 刪除指定 Docker 鏡像
$ docker image rm 鏡像名
# 刪除 Docker 虛懸鏡像
$ docker image prune
Docker 容器命令
# 列出正在運行的容器
$ docker ps -a
# 列出所有容器(包括已停止容器)
$ docker ps -l
# 進入運行中的 Docker 容器
$ docker exec -it 容器ID /bin/bash
# 停止 Docker 容器
$ docker stop 容器ID
# 刪除指定 Docker 容器
$ docker rm -f 容器ID
# 刪除停止的 Docker 容器
$ docker container prune
# 查看 Docker 容器歷史運行日誌
$ docker logs 容器名
# 實時監聽 Docker 容器運行日誌
$ docker logs -f 容器名
Docker 數據卷命令
# 創建 Docker 數據卷
$ docker volume create 數據卷名
# 列出所有 Docker 數據卷
$ docker volume ls
# 刪除指定 Docker 數據卷
$ docker volume rm 數據卷名
# 刪除未關聯(失效) Docker 數據卷
$ docker volume prune
$ docker volume rm $(docker volume ls -qf dangling=true)
Docker 文件操作命令
# 從主機複製文件到 Docker 容器中
$ sudo docker cp 主機內文件路徑 容器ID:容器內文件存儲路徑
# 從 Docker 容器中複製文件到主機中
$ sudo docker cp 容器ID:容器內文件路徑 主機內文件存儲路徑
更多幹貨請移步:https://antoniopeng.com