Docker:容器化技術

引言

傳統部署環境逐漸不適應現在的企業開發,為了追求更加輕量,更加容易管理項目,引入了docker容器化技術去實現更加高效的部署環境。

一.docker風光下的內核功能和常用命令

1.docker容器和虛擬機的區別

我們在底層和應用層之間引入了一層docker engine 代替了 guest os ,同時Hypervisor會對硬 件資源進行虛擬化,docker直接使用硬件資源,所以資源利用率相對docker

?2.docker 的整體架構圖

1. 鏡像(Image Docker 鏡像是用于創建 Docker 容器的模板,比如 Ubuntu 系統
2. 容器(Container :容器是獨立運行的一個或一組應用,是鏡像運行時的實體
3. 客戶端(client Docker 客戶端通過命令行或者其他工具使用 Docker SDK
( https://docs.docker.com/develop/sdk/) ) Docker 的守護進程通信
4. 主機(host :一個物理或者虛擬的機器用于執行 Docker 守護進程和容器
5. 注冊中心(Registry Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。 Docker
Hub( https://hub.docker.com) ) 提供了龐大的鏡像集合供使用。
6. Docker MachineDocker Machine 是一個簡化 Docker 安裝的命令行工具,通過一個簡單的命令
行即可在相應的平臺上安裝 Docker
?3.容器之間的隔離性

Docker 容器之間的隔離性體現在以下幾個方面:

進程隔離:
每個容器內部運行的進程只屬于該容器,容器之間的進程互不可見,互不影響。

文件系統隔離:
每個容器有獨立的文件系統,默認情況下,容器之間無法直接訪問對方的文件和數據。

網絡隔離:
容器有獨立的網絡命名空間,IP、端口等互不沖突。容器之間默認不能直接通信,除非通過 Docker 網絡(如 bridge、overlay)進行連接。

資源隔離:
可以為每個容器分配 CPU、內存等資源限制,防止資源爭搶。

用戶隔離:
容器內的用戶和主機或其他容器的用戶相互獨立。

總結:
Docker 利用 Linux 的命名空間(namespace)和控制組(cgroup)技術,實現了進程、文件、網絡、資源等多方面的隔離,保證了容器之間的安全和獨立運行。

4 docker常用基礎命令
systemctl start docker //啟動docker
docker --help //查看docker幫助文檔
docker pull 鏡像名字 //拉取鏡像到本地
docker images  //顯示docker pull的鏡像資源
docker info  //顯示 Docker 系統信息,包括鏡像和容器數。
docker version   //顯示 Docker 版本信息。
docker events   //從服務器獲取實時事件
docker logs  //獲取容器的日志
docker history   //查看指定鏡像的創建歷史。
docker create  //創建一個新的容器但不啟動它
docker run :創建一個新的容器并運行一個命令
 docker run -it -d -p 81:80 --name nginx01 nginx //啟動一個nginx服務#  -it    以互動方式啟動#  -d     以后臺方式啟動#  --name 命名#  -p   端口號映射 本機端口號81隱射nginx服務端口號80
docker start 容器ID或者容器名字 //啟動容器
docker restart 容器ID或容器名字 //重啟容器
docker stop 容器ID或容器名字  //停止容器運行
docker kill 容器ID或容器名字 //強制殺死該容器
docker rm 容器ID或容器名字  //刪除容器
docker logs 容器ID或容器名字 //查看容器日志信息
docker top 容器ID或容器名字 //查看容器運行的進程信息
docker inspect 容器ID或容器名字 //查看容器內部細節信息
//進入容器并交互
docker exec -it 容器ID或容器名字 bash 
docker attach 容器ID或容器名字

二.docker 鏡像操作和容器管理

1.鏡像是什么,鏡像的原理是什么?為什么會有鏡像?

鏡像就好比一個類,容器就好比一個對象,鏡像是構建容器的基礎。

?鏡像擁有一個最底層,我們可以在最底層上面構造一層又一層的方法對它進行增加服務內容

?2.鏡像管理命令
docker build    //命令用于使用 Dockerfile 創建鏡像。
docker rmi  // 刪除本地一個或多個鏡像。
docker commit //從容器創建一個新的鏡像。
3.dockerfile

dockerfile是構建鏡像的文本文件,是一條條命令和參數所寫的腳本

?構建的三個步驟

①編寫dockerfile文件

②docker build 命令構建鏡像

③docker run 鏡像運行容器實例

dockerfile的基礎知識

①每條保留字指令都必須為大寫字母且后面要跟隨至少一個參數

②指令執行順序從上到下,順序執行

③#表示注釋

④每條指令都會創建一個新的鏡像并對鏡像提交

關鍵字

FROM :? ? ? ? ? ? 設置鏡像使用的基礎鏡像
MAINTAINER:? 設置鏡像的作者? //已被棄用 用label代替
RUN:? ? ? ? ? ? ? ?? 編譯鏡像時運行的腳步
CMD :? ? ? ? ? ? ?? 設置容器的啟動命令
LABEL :? ? ? ? ?? 設置鏡像標簽
EXPOSE?:? ? ? ? 設置鏡像暴露的端口
ENV :? ? ? ? ? ? ?? 設置容器的環境變量
ADD :? ? ? ? ? ? ??? 編譯鏡像時復制上下文中文件到鏡像中
COPY :? ? ? ? ? ?? 編譯鏡像時復制上下文中文件到鏡像中
ENTRYPOINT : 設置容器的入口程序
VOLUME :? ? ? ?? 設置容器的掛載卷
USER :? ? ? ? ? ? ? 設置運行 RUN CMD ENTRYPOINT 的用戶名
WORKDIR :? ? ? 設置 RUN CMD ENTRYPOINT COPY ADD 指令的工作目錄
ARG?:? ? ? ? ? ? ? ? 設置編譯鏡像時加入的參數
ONBUILD:? ? ? ?? 設置鏡像的 ONBUILD 指令
STOPSIGNAL:? 設置容器的退出信號量

?寫一個簡單的dockerfile例子

FROM  ubuntu
LABEL name="lion" RUN apt-get update && apt-get install -y vim
RUN echo "hello World" > /hello.txt
RUN mkdir /app
CMD [ "bin/bash" ]ENV MY_VAR=helloEXPOSE 8080
WORKDIR /appVOLUME [ "/data1","/data2" ]
docker build -t ubuntu01 -f dockerfile .

?4.docker數據卷

數據據的命令介紹


docker volume create  //創建數據卷docker volume inspect //查看數據卷的信息docker volume ls      //展示所有的數據卷docker volume prune   //刪除容器未使用的數據卷docker volume rm      //刪除指定的數據據

映射案例 在宿主機的文件修改會映射到容器內的文件?

?三.docker網絡

1,docker 網絡是什么,有什么作用?,解決了什么問題?

Docker 網絡是容器間及與外部通信的虛擬網絡。作用是讓容器能互訪、連外網、安全隔離。解決了容器間通信難、跨主機組網、動態分配 IP、流量隔離及負載均衡等問題,簡化微服務網絡管理。

2.docker網絡的常用命令
//連接一個容器到一個網絡
docker network connect   //Connect a container to a network
//創建一個網絡
docker network create   //Create a network
//將容器從一個網絡中斷開
docker network disconnect //Disconnect a container from a network
//查看網絡的詳細信息
docker network inspect //Display detailed information on one or more networks
//查看網絡列表
docker network ls //List networks
//移除所有未使用的網絡
docker network prune //Remove all unused networks
//移除一個或多個網絡
docker network rm //Remove one or more networks

容器之間通信方式一

通過docker 自帶的網橋

?

通過容器的ip地址可以ping通

但是通過容器名則不行

?

容器之間通信方式二

通過自己創立的network

?

?

通過容器的ip地址和容器名都可以ping通

四.docker容器編排?

1.什么是docker容器編排

容器編排通俗來說一堆容器一起配合工作并且互不干擾

build :? 構建或重新構建服務的鏡像
config 解析、解析并呈現規范格式的 compose 文件,即檢查配置文件
cp :? ? ?? 在服務容器和本地文件系統之間復制文件 / 文件夾
create 為服務創建容器
down :? 停止并移除容器、網絡
events 從容器接收實時事件
exec :? ? 在正在運行的容器中執行命令
images? ? 列出創建的容器使用的鏡像
kill :? ? ?? 強制停止服務容器
logs :? ? 查看容器的輸出
ls :? ? ? ? 列出正在運行的 compose 項目
pause:? 暫停服務
port :??? 打印端口綁定的公共端口
ps? ? ?:? 列出容器
pull :? ? 拉取服務鏡像
push :? 推送服務鏡像
restart :? 重啟服務容器
rm? :?? 刪除已停止的服務容器
run :?? 對服務運行一次性命令
start :? 啟動服務
stop :? 停止服務
top :? ? 顯示運行的進程
unpause 取消暫停
up :?? 創建并啟動容器
version 顯示 docker compose 版本信息
?2.dockercompose案例演示

dockerfile文件編寫

FROM gcc:latest
WORKDIR /app
COPY main.cc .
RUN g++ main.cc -o server
EXPOSE 8080
CMD [ "./server" ]

docker-compose.yml文件編寫

version: '3.8'
services:cpp-server:build: .ports:- "8080:8080"openresty:image: openresty/openresty:alpineports:- "8081:80"volumes:- ./nginx:/etc/nginx/conf.d

openresty_conf文件編寫

server {listen 80;server_name localhost;location / {default_type text/html;content_by_lua_block {ngx.say("Hello from OpenResty!")}}
}

通過docker compose up --build命令執行

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84332.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84332.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84332.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ping命令常用參數以及traceout命令

在網絡故障排查和性能分析中,ping和 traceroute(Windows中通常稱為 tracert)是兩個極為重要的工具。它們幫助診斷網絡連接問題,了解數據在網絡中的傳輸路徑。下面將詳細介紹這兩個命令的常用參數及其應用。 ping命令 ping命令用…

SpringBoot開發——Spring Boot異常處理全攻略:五大方案實戰對比

文章目錄 一、血淚教訓:異常處理的代價二、五大異常處理方案詳解2.1 全局異常處理(推薦方案)2.2 控制器級處理2.3 HTTP狀態碼注解2.4 ResponseEntity精細控制2.5 自定義異常體系(企業級方案)三、五大方案對比決策表四、四大避坑指南4.1 異常吞噬陷阱4.2 循環依賴問題4.3 異…

CodeBuddy 實現圖片轉素描手繪工具

本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 最近在社交媒體上,各種素描風格的圖片火得一塌糊涂,身邊不少朋友都在分享自己的 “素描照”,看著那些黑白線條勾勒出的獨特韻味&a…

2025.05.21華為暑期實習機考真題解析第二題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 02. 災區物資調度路徑規劃 問題描述 在一次嚴重的自然災害后,LYA負責協調救援物資的配送工作。救援區域包含多個受災鄉鎮和一個物資集結點,各個地點之間的道路狀況各異,有些甚至…

Gartner《Optimize GenAI Strategy for 4 Key ConsumerMindsets》學習心得

一、引言 在當今數字化營銷浪潮中,生成式人工智能(GenAI)正以前所未有的速度重塑著市場格局。GenAI 既是一場充滿機遇的變革,也是一場潛在風險的挑戰。一方面,絕大多數 B2C 營銷領導者對 GenAI 賦能營銷抱有極高期待,他們看到了 GenAI 在提升時間與成本效率方面的巨大潛…

探索鏈表的奇妙世界:從基礎到高級應用

鏈表是計算機科學中一種基礎且重要的數據結構,它如同一條由珠子串成的項鏈,每個珠子(節點)都包含著數據和指向下一個珠子的線索。 與數組相比,鏈表在插入和刪除操作上更加靈活,無需預先分配固定大小的內存…

黑馬點評雙攔截器和Threadlocal實現原理

文章目錄 雙攔截器ThreadLocal實現原理 雙攔截器 實現登錄狀態刷新的原因: ? 防止用戶會話過期:通過動態刷新Token有效期,確保活躍用戶不會因固定過期時間而被強制登出 ? 提升用戶體驗:用戶無需頻繁重新登錄,只要…

Windows 中動態庫.dll 的 .lib 文件有什么作用?

在 Windows 平臺開發中, 動態鏈接庫(Dynamic Link Library, DLL)。與之相關的還有一個常讓人困惑的文件——.lib 文件。那么,這個 .lib 文件到底有什么作用呢? 一、什么是 .lib 文件? .lib 文件是 靜態導入庫(Import Library) 文件,它通常與動態鏈接庫(DLL)一起生成…

細說STM32單片機FreeRTOS消息緩沖區及其應用實例

目錄 一、消息緩沖區功能概述 二、消息緩沖區操作相關函數 1、相關函數概述 2、部分函數詳解 (1)創建消息緩沖區 (2)寫入消息 (3)讀取消息 (4)消息緩沖區狀態查詢 三、消息…

【緩存】JAVA本地緩存推薦Caffeine和Guava

🌟 引言 在軟件開發過程中,緩存是提升系統性能的常用手段。對于基礎場景,直接使用 Java集合框架(如Map/Set/List)即可滿足需求。然而,當面對更復雜的緩存場景時: 需要支持多種過期策略&#x…

IDA插件 MIPSROP的安裝和使用方法

前言 筆者的IDA版本為9.0,剛開始根據一些博客描述以為將mipsrop.py拷貝到IDA的plugins目錄即可,可操作后發現事情好像沒這么簡單,復制進去后就發現沒有博客中所說的 MIPS ROP Finder ,筆者在網上搜索了很多博客后在 https://bbs.…

(1)轉置后,行列式的值不變 (2)將行列式的任意兩行互換位置后,行列式改變符號

以下是對原始內容在不改變內容本身的前提下進行的格式優化,以提升可讀性和邏輯清晰度: ? 行列式的幾何意義 行列式(determinant)是線性代數中一個非常重要的概念,它的幾何含義可以從以下幾個方面理解: &a…

最大似然估計(Maximum Likelihood Estimation, MLE)詳解

一、定義 最大似然估計 是一種參數估計方法,其核心思想是: 選擇能使觀測數據出現概率最大的參數值作為估計值。 具體來說,假設數據 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1?,x2?,…,xn?獨立且服從某個概率分布 P ( x ∣ θ ) P(…

用go從零構建寫一個RPC(3)--異步調用+多路復用實現

在前兩個版本中,我們實現了基礎的客戶端-服務端通信、連接池、序列化等關鍵模塊。為了進一步提升吞吐量和并發性能,本版本新增了 異步發送機制 和 多路復用支持,旨在減少資源消耗、提升連接利用率。 代碼地址:https://github.com/…

FFmpeg 安裝包全攻略:gpl、lgpl、shared、master 區別詳解

這些 FFmpeg 安裝包有很多版本和變種,主要區別在于以下幾個方面: ? 一、從名稱中看出的關鍵參數: 1. 版本號 master:開發版,最新功能,但可能不穩定。n6.1 / n7.1:正式版本,更穩定…

深度學習實戰:從圖像分類到文本生成的完整案例解析

1 圖像分類案例 1.1 CIFAR10數據集介紹 cifar數據是torchvision第三方包提供的數據集 訓練集5w 測試集1w y標簽 10個類別 10分類問題 一張圖形狀 (32, 32, 3) import torch import torch.nn as nn from torchvision.datasets import CIFAR10 from torchvision.transforms i…

Android 添加系統服務的完整流程

[應用程序] (應用進程)│↓ 調用簡單API [SoundManager] │ ├─ 代理模式門面模式(應用進程)│ ├─ 緩存數據 ←─ 裝飾器模式(應用進程)│ └─ 轉換異常 ←─ 適配器模式(應用進程)│↓ 通過Bind…

wan2.1代碼筆記

GPU內存不夠,可以先運行umt5,然后再運行wanpipeline,參考FLUX.1代碼筆記,或者使用ComfyUI。 下面使用隨機數代替umt5 embedding。 import torch from diffusers.utils import export_to_video from diffusers import Autoencoder…

環境搭建與工具配置

3.1 本地環境搭建 3.1.1 WAMP環境搭建漏洞靶場(一、二) WAMP(Windows Apache MySQL PHP)是搭建本地Web漏洞靶場的基礎環境。 安裝步驟: Apache:下載并安裝最新版Apache HTTP Server,配置監…

STM32F446主時鐘失效時DAC輸出異常現象解析與解決方案

—### 現象概述 在STM32F446微控制器應用中,若主時鐘(HSE)的晶體信號對地短路,但DAC(數模轉換器)仍能輸出變化信號,這一現象看似矛盾,實則與系統時鐘切換機制密切相關。本文將從硬件…