首頁  >  文章  >  Java  >  Docker 快速入門、核心概念和常用指令

Docker 快速入門、核心概念和常用指令

Java后端技术全栈
Java后端技术全栈轉載
2023-08-23 14:56:34773瀏覽


週末有朋友問起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/distribution

docker 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

  • ##docker,是Docker 用戶端,發送請求
  • dockerd,服務端入口,負責接收請求、返回結果
  • docker-init,容器的1號進程,管理子容器
  • docker-proxy,主機的網路流量轉送到容器
  • ##2、containerd

##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/

1.8、安全性問題

  • 自身安全漏洞
  • 映像中存在安全性問題
  • #Linux 主機核心隔離不夠

2、實作原則

#2.1、Namespace

##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中文網其他相關文章!

陳述:
本文轉載於:Java后端技术全栈。如有侵權,請聯絡admin@php.cn刪除