Docker 快速入門、核心概念和常用指令
1.1、安裝
Linux 是 Docker 的原生支持平臺,所以建議在 Linux 下安裝。
CentOS 下安裝 Docker,需要 7 及以上的發(fā)行版,建議使用 overlay2 存儲驅(qū)動程序。
# 卸載已有 docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 添加安裝源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安裝最新版
sudo yum install docker-ce docker-ce-cli containerd.io
# 啟動
sudo yum install docker-ce docker-ce-cli containerd.io
1.2、鏡像
本質(zhì)上是只讀的文件和文件夾組合,包含了容器運行時所需要的所有基礎(chǔ)文件和配置信息。
操作:
1、拉取鏡像 docker pull
如:docker pull nginx
2、重命名鏡像 docker tag
如:docker tag nginx:latest mynginx:latest
3、查看鏡像 docker image ls 或 docker images
4、刪除鏡像 docker rmi如:docker rmi mynginx
5、構(gòu)建鏡像 docker build 或 docker commit
如:docker commit nginx mynginx:lastest
docker build 相對復雜,但使用較多
1.3、容器
容器是鏡像的運行實體、一個鏡像可以創(chuàng)建出多個容器、運行容器本質(zhì)是在容器內(nèi)部創(chuàng)建該文件系統(tǒng)的讀寫副本。
生命周期:
created:初建狀態(tài)
running:運行狀態(tài)
stopped:停止狀態(tài)
paused:暫停狀態(tài)
deleted:刪除狀態(tài)操作:
1、創(chuàng)建并啟動容器
創(chuàng)建:docker create -it --name=mynginx mynginx
啟動:docker start mynginx
創(chuàng)建并啟動:docker run -it --name=mynginx mynginx
2、終止容器
docker stop mynginx
3、進入容器
docker attach mynginx
docker exec -it mynginx sh (使用較多)
4、刪除容器
docker rm mynginx
刪除運行中的容器:docker rm -f mynginx5、導出容器
docker export mynginx > mynginx.tar
6、導入容器
docker import mynginx.tar mynginx:import
1.4、倉庫
存儲和分發(fā) Docker 鏡像;注冊服務器是存放倉庫的實際服務器,可包含很多個倉庫,每個倉庫可以包含多個鏡像。
公共倉庫 docker hub https://hub.docker.com/
登錄:docker login
推送鏡像到倉庫:docker push使用 distribution 構(gòu)建私有倉庫
https://github.com/distribution/distribution
docker run -d -p 5000:5000 --name registry registry:2.7
docker push localhost:5000/mynginx
1.5、卷
可以繞過默認的聯(lián)合文件系統(tǒng),直接以文件或目錄的形式存在于宿主機上。它解決了數(shù)據(jù)持久化和容器間共享數(shù)據(jù)的問題。
操作:
1、創(chuàng)建:docker volume create volume-name
2、-v 指定被持久化的路徑,Docker 會自動為我們創(chuàng)建卷,并且綁定到容器中
docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx3、查看:docker volume ls
4、卷詳細信息:docker volume inspect volume-name
5、--mount 參數(shù)指定卷的名稱
docker run -d --name=nginx --mount source=volume-name,target=/usr/share/nginx/html nginx6、刪除卷:docker volume rm volume-name
7、卷之間數(shù)據(jù)共享:
docker run --mount source=lv,target=/tmp/log --name=v-producer -it test
docker run -it --name consumer --volumes-from v-producer test8、卷與主機之間數(shù)據(jù)共享:
docker run -v /data:/usr/local/data -it test
1.6、重要組件
1、Docker
docker,是 Docker 客戶端,發(fā)送請求
dockerd,服務端入口,負責接收請求、返回結(jié)果
docker-init,容器的 1 號進程,管理子容器
docker-proxy,主機的網(wǎng)絡流量轉(zhuǎn)發(fā)到容器
2、containerd
containerd,負責容器的生命周期管理,如容器啟動、停止等…
containerd-shim,作為容器進程的父進程,解耦 containerd 和真正的容器進程
ctr,containerd 的客戶端,開發(fā)與調(diào)試時向 containerd 發(fā)送請求
3、運行時
runc,通過系統(tǒng)接口,創(chuàng)建、銷毀容器
1.7、容器監(jiān)控
docker stats 可查看主機上所有容器的 CPU、內(nèi)存、網(wǎng)絡 IO、磁盤 IO、PID 等資源的使用情況。
cAdvisor 是谷歌開源的一款通用的容器監(jiān)控解決方案。
安裝參考:https://www.jianshu.com/p/91f9d9ec374f
查看監(jiān)控:
http://localhost:8080
http://localhost:8080/containers/
http://localhost:8080/docker/
1.8、安全問題
自身安全漏洞
鏡像中存在安全問題
Linux 主機內(nèi)核隔離不夠
2.1、Namespace
Namespace 是 Linux 內(nèi)核的一個特性,該特性可以實現(xiàn)在同一主機系統(tǒng)中,對進程 ID、主機名、用戶、文件名、網(wǎng)絡和進程間通信等資源的隔離。
Docker 使用了六種:
Mount Namespace,掛載點隔離
PID Namespace,進程隔離
UTS Namespace,主機名隔離
IPC Namespace,進程間通信隔離
User Namespace,用戶和用戶組隔離
Net Namespace,網(wǎng)絡設備、IP 地址和端口等隔離
2.2、Cgroups
限制進程或者進程組的資源,如 CPU、內(nèi)存、磁盤 IO 等。
cgroups 的功能:
限制資源的使用量
不同的組可以有 CPU 、磁盤 IO 等資源不同的使用優(yōu)先級
計算控制組的資源使用情況
控制進程的掛起或恢復
2.3、聯(lián)合文件系統(tǒng)
Union File System,一種分層的輕量級文件系統(tǒng),可以把多個目錄內(nèi)容聯(lián)合掛載到同一目錄下,從而形成一個單一的文件系統(tǒng)。
Docker 中最常用的聯(lián)合文件系統(tǒng)有三種:AUFS、Devicemapper 和 OverlayFS。
AUFS 最早、最成熟;
Devicemapper,Linux 內(nèi)核提供的框架,是一種映射塊設備的技術(shù)框架。核心概念有映射設備(mapped device)、目標設備(target device)、映射表(map table),包含 loop-lvm 模式、direct-lvm 模式(生產(chǎn)使用);
overlay2,更新更穩(wěn)定,對 Linux 內(nèi)核和 Docker 版本要求都較高。
2.4、網(wǎng)絡實現(xiàn)
CNM (Container Network Model) 是 Docker 發(fā)布的容器網(wǎng)絡標準。
Libnetwork 是開源的,使用 Golang 編寫,完全遵循 CNM 網(wǎng)絡規(guī)范,是 CNM 的官方實現(xiàn)。
Libnetwork 包含四種主要的網(wǎng)絡模型:
null 空網(wǎng)絡模式,不提供容器網(wǎng)絡
bridge 橋接模式,容器與容器之間互通
host 主機網(wǎng)絡模式,容器內(nèi)與主機網(wǎng)絡互通
container 網(wǎng)絡模式,容器放在同一網(wǎng)絡通過 localhost 訪問
3.1、容器編排
Docker 三種常用的編排工具:Docker Compose、Docker Swarm 和 Kubernetes。
Docker Compose 是 Docker 收購得來,本質(zhì)是一個 python 腳本,可以在單個結(jié)點上管理和編排多個容器。
Docker Swarm 是 Docker 官方推出的容器集群管理工具,原生支持 Docker API,它的操作簡單、支持 TLS 雙向認證、使用 Raft 協(xié)議實現(xiàn)分布式。
Kubernetes,Google 借鑒內(nèi)部 Borg 系統(tǒng)沉淀的技術(shù)設計實現(xiàn),功能強大,目標是能夠支撐數(shù)億容器的運行;但其架構(gòu)較為復雜,上手門檻高。
3.2、在 devops 中的作用
DevOps 的整體目標是促進開發(fā)和運維人員之間的配合,并且通過自動化的手段縮短軟件的整個交付周期,提高軟件的可靠性。
通過 Docker 快速安裝開發(fā)環(huán)境、Dockerfile 構(gòu)建鏡像快速集成、拉取鏡像運行容器即可完成部署,結(jié)合容器編排工具可實現(xiàn)藍綠發(fā)布。助力了 DevOps 的發(fā)展。
可以快速持續(xù)集成與交付。
