Docker 快速入門、核心概念和常用指令
週末有朋友問起Docker相關的問題。今天就來跟大家分享Docker 快速入門、核心概念和常用指令。
1、基本概念與運算
1.1、安裝
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.2、鏡像
#本質上是唯讀的檔案和資料夾組合,包含了容器運行時所需要的所有基礎文件和設定資訊。操作: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 相對複雜,但使用較多
1.3、容器
#容器是鏡像的運作實體、一個映像可以建立出多個容器、運行容器本質是在容器內部建立該檔案系統的讀寫副本。
生命週期:
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
#1.4、倉庫
##儲存和分發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.5、磁碟區
#可以繞過預設的聯合檔案系統,直接以檔案或目錄的形式存在於宿主機上。它解決了資料持久化和容器間共享資料的問題。操作: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.6、重要元件
#1、Docker
##containerd,負責容器的生命週期管理,如容器啟動、停止等…
- ##docker,是Docker 用戶端,發送請求
- dockerd,服務端入口,負責接收請求、返回結果
- docker-init,容器的1號進程,管理子容器
- docker-proxy,主機的網路流量轉送到容器
##2、containerd
- #containerd-shim,作為容器進程的父進程,解耦containerd 和真正的容器進程
- ctr,containerd 的客戶端,開發與調試時向containerd 發送請求
##3、運行時
runc,透過系統接口,建立、銷毀容器
#1.7、容器監控
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 主機核心隔離不夠
2、實作原則
##Namespace 是Linux 核心的特性,可以實現在同一主機系統中,對進程ID、主機名稱、使用者、檔案名稱、網路和進程間通訊等資源的隔離。
Docker 使用了六種:Mount Namespace,掛載點隔離 PID Namespace,進程隔離 UTS Namespace,主機名稱隔離 IPC Namespace,進程間通訊隔離 User Namespace,使用者和使用者群組隔離 Net Namespace,網路設備、IP 位址和連接埠等隔離
2.2、Cgroups
限制進程或進程組的資源,如CPU、記憶體、磁碟IO 等。 cgroups 的功能:
限制資源的使用量 不同的群組可以有CPU 、磁碟IO 等資源不同的使用優先權 計算控制組的資源使用量 控制進程的掛起或復原
2.3、聯合檔案系統
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 存取
3、其他相關
#3.1、容器編排
Docker 三種常用的編排工具:Docker Compose、Docker Swarm 和Kubernetes。
Docker Compose 是 Docker 收購得來,本質是一個 python 腳本,可以在單一結點上管理和編排多個容器。 Docker Swarm 是 Docker 官方推出的容器叢集管理工具,原生支援 Docker API,它的操作簡單、支援 TLS 雙向認證、使用 Raft 協定實作分散式。 Kubernetes,Google 借鑒內部 Borg 系統沉澱的技術設計實現,功能強大,目標是能夠支撐數億容器的運作;但其架構較為複雜,上手門檻高。
3.2、在devops 中的作用
DevOps 的整體目標是促進開發和維運人員之間的配合,並且透過自動化的手段縮短軟體的整個交付週期,提高軟體的可靠性。
透過 Docker 快速安裝開發環境、Dockerfile 建置映像快速整合、拉取映像運行容器即可完成部署,結合容器編排工具可實現藍綠發布。
協助了 DevOps 的發展。
可以快速持續整合與交付。
以上是Docker 快速入門、核心概念和常用指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

退出 Docker 容器的四種方法:容器終端中使用 Ctrl D 快捷鍵容器終端中輸入 exit 命令宿主機終端中使用 docker stop <container_name> 命令宿主機終端中使用 docker kill <container_name> 命令(強制退出)

Docker 中將文件拷貝到外部主機的方法:使用 docker cp 命令:執行 docker cp [選項] <容器路徑> <主機路徑>。使用數據卷:在主機上創建目錄,在創建容器時使用 -v 參數掛載該目錄到容器內,實現文件雙向同步。

可以通過以下步驟查詢 Docker 容器名稱:列出所有容器(docker ps)。篩選容器列表(使用 grep 命令)。獲取容器名稱(位於 "NAMES" 列中)。

重啟 Docker 容器的方法:獲取容器 ID(docker ps);停止容器(docker stop <container_id>);啟動容器(docker start <container_id>);驗證重啟成功(docker ps)。其他方法:Docker Compose(docker-compose restart)或 Docker API(參考 Docker 文檔)。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

Docker 容器啟動步驟:拉取容器鏡像:運行 "docker pull [鏡像名稱]"。創建容器:使用 "docker create [選項] [鏡像名稱] [命令和參數]"。啟動容器:執行 "docker start [容器名稱或 ID]"。檢查容器狀態:通過 "docker ps" 驗證容器是否正在運行。

在 Docker 中創建容器: 1. 拉取鏡像: docker pull [鏡像名] 2. 創建容器: docker run [選項] [鏡像名] [命令] 3. 啟動容器: docker start [容器名]
