週末有朋友問起Docker相關的問題。今天就來跟大家分享Docker 快速入門、核心概念和常用指令。
Linux 是Docker 的原生支援平台,所以建議在Linux 下安裝。 CentOS 下安裝 Docker,需要 7 及以上的發行版,建議使用 overlay2 儲存驅動程式。
# 卸载已有 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、拉取鏡像 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、建置映像docker build 或docker commit 如:docker commit nginx mynginx:lastest docker build 相對複雜,但使用較多
#容器是鏡像的運作實體、一個映像可以建立出多個容器、運行容器本質是在容器內部建立該檔案系統的讀寫副本。
生命週期:
created:初建狀態
running:運作狀態
stopped:停止狀態
paused:暫停狀態
deleted:刪除狀態
操作:1、建立並啟動容器
建立:docker create -it --name=mynginx mynginx
#啟動: docker start mynginx
建立並啟動: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 mynginx
#5、匯出容器 docker export mynginx > mynginx.tar
6、導入容器 docker import mynginx.tar mynginx:import
##儲存和分發Docker 映像;註冊伺服器是存放倉庫的實際伺服器,可包含許多倉庫,每個倉庫可以包含多個鏡像。 公共倉庫 docker hub https://hub.docker.com/ 登入:docker login 推送映像到倉庫:docker push使用 distribution 建置私有倉庫 https://github.com/distribution/distributiondocker run -d -p 5000:5000 --name registry registry:2.7 docker push localhost:5000/mynginx
#可以繞過預設的聯合檔案系統,直接以檔案或目錄的形式存在於宿主機上。它解決了資料持久化和容器間共享資料的問題。操作:1、建立:docker volume create volume-name
2、-v 指定被持久化的路徑,Docker 會自動為我們建立卷,並且綁定到容器中 docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx
3、檢視:docker volume ls
4、磁碟區詳細資料:docker volume inspect volume-name
5、--mount 參數指定磁碟區的名稱 docker run -d --name=nginx --mount source=volume-name,target=/usr/share/nginx/html nginx
6、刪除磁碟區:docker volume rm volume-name
#7、磁碟區之間資料共用:docker run --mount source=lv,target=/tmp/log --name=v-producer -it test docker run -it --name consumer --volumes-from v-producer test
#8、磁碟區與主機之間資料共用:docker run -v /data:/usr/local/data -it test
#1、Docker
##containerd,負責容器的生命週期管理,如容器啟動、停止等…
- ##docker,是Docker 用戶端,發送請求
- dockerd,服務端入口,負責接收請求、返回結果
- docker-init,容器的1號進程,管理子容器
- docker-proxy,主機的網路流量轉送到容器
##2、containerd
- #containerd-shim,作為容器進程的父進程,解耦containerd 和真正的容器進程
- ctr,containerd 的客戶端,開發與調試時向containerd 發送請求
##3、運行時
runc,透過系統接口,建立、銷毀容器
docker stats 可查看主機上所有容器的CPU、記憶體、網路IO、磁碟IO、PID 等資源的使用情況。 cAdvisor 是Google開源的通用的容器監控解決方案。安裝參考:
https://www.jianshu.com/p/91f9d9ec374f
##查看監控:http://localhost:8080 http://localhost:8080/containers/ http://localhost:8080/docker/
- 自身安全漏洞
- 映像中存在安全性問題
- #Linux 主機核心隔離不夠
Docker 使用了六種:Mount Namespace,掛載點隔離 PID Namespace,進程隔離 UTS Namespace,主機名稱隔離 IPC Namespace,進程間通訊隔離 User Namespace,使用者和使用者群組隔離 Net Namespace,網路設備、IP 位址和連接埠等隔離
限制資源的使用量 不同的群組可以有CPU 、磁碟IO 等資源不同的使用優先權 計算控制組的資源使用量 控制進程的掛起或復原
Union File System,一種分層的輕量級檔案系統,可以把多個目錄內容聯合掛載到同一目錄下,從而形成一個單一的文件系統。
Docker 中最常用的聯合檔案系統有三種:AUFS、Devicemapper 和 OverlayFS。
AUFS 最早、最成熟; #Devicemapper,Linux 核心提供的框架,是一種映射區塊裝置的技術框架。核心概念有映射設備(mapped device)、目標設備(target device)、映射表(map table),包含loop-lvm 模式、direct-lvm 模式(生產使用);
##### #overlay2,更新更穩定,對Linux 核心和Docker 版本需求都較高。 #####################2.4、網路實作###############CNM (Container Network Model) 是Docker 發佈的容器網路標準。 Libnetwork 是開源的,使用 Golang 編寫,完全遵循 CNM 網路規範,是 CNM 的官方實作。 ######Libnetwork 包含四個主要的網路模型:###
null 空網路模式,不提供容器網路 bridge 橋接模式,容器與容器之間互通 host 主機網路模式,容器內與主機網路互通 container 網路模式,容器放在同一網路透過localhost 存取
Docker 三種常用的編排工具:Docker Compose、Docker Swarm 和Kubernetes。
Docker Compose 是 Docker 收購得來,本質是一個 python 腳本,可以在單一結點上管理和編排多個容器。 Docker Swarm 是 Docker 官方推出的容器叢集管理工具,原生支援 Docker API,它的操作簡單、支援 TLS 雙向認證、使用 Raft 協定實作分散式。 Kubernetes,Google 借鑒內部 Borg 系統沉澱的技術設計實現,功能強大,目標是能夠支撐數億容器的運作;但其架構較為複雜,上手門檻高。
DevOps 的整體目標是促進開發和維運人員之間的配合,並且透過自動化的手段縮短軟體的整個交付週期,提高軟體的可靠性。
透過 Docker 快速安裝開發環境、Dockerfile 建置映像快速整合、拉取映像運行容器即可完成部署,結合容器編排工具可實現藍綠發布。
協助了 DevOps 的發展。
可以快速持續整合與交付。
以上是Docker 快速入門、核心概念和常用指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!