上位機知識篇---Docker

Docker 詳細介紹

一、Docker 是什么

Docker 是一個開源的容器化平臺,它允許開發者將應用程序及其依賴項打包到一個標準化的單元(稱為容器)中,確保應用在任何環境中都能以相同的方式運行

簡單來說,Docker 解決了 "在我的機器上能運行,在你的機器上卻不能運行" 的問題。它通過容器化技術,將應用與底層基礎設施隔離開來,實現了 "一次構建,到處運行" 的目標。

二、常見使用場景

1. 應用開發與測試

  • 開發者可以在本地創建一致的開發環境,避免因環境差異導致的問題
  • 測試人員可以快速部署相同的測試環境,確保測試結果的準確性
  • 前后端開發者可以在各自的容器中工作,互不干擾

2. 持續集成 / 持續部署 (CI/CD)

  • 在 CI 流程中,使用 Docker 構建應用并運行自動化測試
  • 在 CD 流程中,通過 Docker 容器實現應用的快速、一致部署
  • 支持藍綠部署、金絲雀發布等高級部署策略

3. 微服務架構部署

  • 每個微服務可以打包為獨立的 Docker 容器
  • 便于單獨擴展、更新和管理各個服務
  • 簡化微服務之間的通信和依賴管理

4. 云原生應用開發

  • 與 Kubernetes 等容器編排平臺緊密集成
  • 適合開發彈性伸縮、高可用的云原生應用
  • 支持服務網格、配置管理等云原生技術

5. 大數據與 AI 應用部署

  • 快速搭建分布式計算環境
  • 簡化機器學習模型的訓練和部署流程
  • 便于在不同環境間遷移數據處理工作流

6. 隔離性環境需求

  • 為不同應用創建隔離的運行環境
  • 安全測試和惡意軟件分析
  • 臨時環境搭建和資源隔離

三、使用優勢與劣勢

優勢

  1. 環境一致性:容器包含應用所需的所有依賴,確保在任何環境中行為一致
  2. 輕量級:容器共享主機操作系統內核,比虛擬機更節省資源
  3. 快速啟動:容器啟動通常只需幾秒,遠快于虛擬機
  4. 可移植性:可以在任何支持 Docker 的環境中運行,包括物理機、虛擬機、云服務等
  5. 資源高效利用:能夠更有效地利用系統資源,提高服務器利用率
  6. 版本控制:支持容器鏡像的版本管理,便于回滾和追蹤
  7. 易于擴展:可以快速復制容器實現水平擴展
  8. 隔離性:提供一定程度的應用隔離,增強安全性

劣勢

  1. 安全性限制:容器共享主機內核,隔離性不如虛擬機徹底
  2. 學習曲線:需要學習 Docker 特定概念和命令
  3. 存儲管理復雜:容器的臨時存儲特性可能導致數據管理復雜
  4. 網絡配置復雜:容器間網絡配置相對復雜,特別是在大規模部署時
  5. Windows 支持有限:雖然支持 Windows,但體驗和功能不如 Linux 完善
  6. 狀態管理挑戰:無狀態應用更適合容器化,有狀態應用需要額外的狀態管理策略

四、Docker 使用詳細步驟

1. 安裝 Docker

在 Ubuntu 上安裝
# 更新 apt 包索引
sudo apt-get update# 安裝必要的依賴包
sudo apt-get install ca-certificates curl gnupg lsb-release# 添加 Docker 官方 GPG 密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 設置 Docker 穩定版倉庫
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安裝 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 驗證安裝是否成功
sudo docker run hello-world
在 CentOS 上安裝
# 安裝必要的依賴包
sudo yum install -y yum-utils# 設置 Docker 倉庫
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# 安裝 Docker 引擎
sudo yum install docker-ce docker-ce-cli containerd.io# 啟動 Docker
sudo systemctl start docker# 設置 Docker 開機自啟
sudo systemctl enable docker# 驗證安裝是否成功
sudo docker run hello-world
在 Windows 或 Mac 上安裝
  • 下載并安裝?Docker Desktop
  • 安裝完成后,啟動 Docker Desktop 應用

2. 基本 Docker 命令

鏡像操作
# 搜索鏡像
docker search <鏡像名稱># 拉取鏡像
docker pull <鏡像名稱>:<標簽>  # 標簽默認為latest# 查看本地鏡像
docker images# 刪除鏡像
docker rmi <鏡像ID或名稱># 構建鏡像
docker build -t <鏡像名稱>:<標簽> <Dockerfile路徑>
容器操作
# 運行容器
docker run [選項] <鏡像名稱> [命令]# 常用選項:
# -d: 后臺運行
# -p: 端口映射,格式為 主機端口:容器端口
# -v: 掛載卷,格式為主機路徑:容器路徑
# -e: 設置環境變量
# --name: 指定容器名稱
# -it: 交互式運行# 示例: 運行一個nginx容器
docker run -d -p 80:80 --name mynginx nginx# 查看運行中的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 啟動容器
docker start <容器ID或名稱># 停止容器
docker stop <容器ID或名稱># 重啟容器
docker restart <容器ID或名稱># 刪除容器
docker rm <容器ID或名稱># 進入容器
docker exec -it <容器ID或名稱> /bin/bash# 查看容器日志
docker logs <容器ID或名稱># 查看容器詳細信息
docker inspect <容器ID或名稱>

3. 創建自定義 Docker 鏡像

  1. 創建 Dockerfile

    在項目根目錄創建一個名為?Dockerfile?的文件,例如:

    # 使用官方Python鏡像作為基礎鏡像
    FROM python:3.9-slim# 設置工作目錄
    WORKDIR /app# 復制當前目錄下的所有文件到容器的/app目錄
    COPY . .# 安裝依賴
    RUN pip install --no-cache-dir -r requirements.txt# 暴露端口
    EXPOSE 5000# 容器啟動時執行的命令
    CMD ["python", "app.py"]
    
  2. 構建鏡像

    docker build -t my-python-app:1.0 .
    
  3. 運行自定義鏡像

    docker run -d -p 5000:5000 --name myapp my-python-app:1.0
    

4. Docker Compose 管理多容器應用

當應用需要多個容器協同工作時(如前端、后端、數據庫),可以使用 Docker Compose 簡化管理。

  1. 安裝 Docker Compose

    對于安裝了 Docker Desktop 的用戶,Compose 已經包含在內。Linux 用戶需要單獨安裝:

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
    
  2. 創建 docker-compose.yml 文件

    version: '3'services:web:build: .ports:- "5000:5000"depends_on:- dbdb:image: postgres:13environment:- POSTGRES_USER=postgres- POSTGRES_PASSWORD=postgres- POSTGRES_DB=mydbvolumes:- postgres_data:/var/lib/postgresql/datavolumes:postgres_data:
    
  3. 使用 Docker Compose 啟動應用

    # 啟動所有服務
    docker-compose up -d# 查看服務狀態
    docker-compose ps# 查看日志
    docker-compose logs# 停止服務
    docker-compose down# 停止服務并刪除數據卷
    docker-compose down -v
    

5. 數據持久化

Docker 容器默認是臨時的,為了持久化數據,需要使用數據卷:

# 創建數據卷
docker volume create mydata# 查看數據卷
docker volume ls# 查看數據卷詳情
docker volume inspect mydata# 使用數據卷運行容器
docker run -d -v mydata:/app/data --name myapp myimage# 掛載主機目錄到容器
docker run -d -v /host/path:/container/path --name myapp myimage

五、總結

Docker 作為容器化技術的代表,已經成為現代軟件開發和部署的重要工具。它通過容器化解決了環境一致性問題,簡化了應用的部署和擴展流程。

雖然 Docker 有一定的學習曲線和局限性,但其優勢在大多數場景下遠大于劣勢,特別是在微服務、云原生和 DevOps 實踐中表現突出。

掌握 Docker 的基本使用是現代開發者的重要技能,通過本文介紹的步驟,你可以開始使用 Docker 并逐步深入探索其更多高級特性。

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

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

相關文章

藍橋杯第十六屆(2025)真題深度解析:思路復盤與代碼實戰

> 省一選手的血淚經驗:**避免這些坑,你也能沖進國賽!** 2025年藍橋杯省賽已落下帷幕,作為近年來**難度最高的一屆競賽**,不少選手在考場上遭遇了“滑鐵盧”。本文將以C++ B組真題為例,逐題解析解題思路,并提供**優化后的AC代碼與詳細注釋**。筆者最終排名省一前40%,…

使用gdal讀取shp及filegdb文件

一、使用qgis開源工具構建兩個文件&#xff0c;分別是filegdb和shp&#xff0c;每個文件包含一個圖層&#xff0c;圖層內容只包含一個字段&#xff1a;id&#xff0c;有兩個數據行&#xff0c;圖層幾何為多邊形&#xff0c;圖層都是如下的效果。二、使用rust讀取上述文件 rust依…

從0開始學習R語言--Day44--LR檢驗

之前我們提到用LM檢驗的方式&#xff0c;來判斷數據在空間上是否受到鄰近數據及其殘差的影響&#xff0c;但是LM檢驗是采用直接計算的方式&#xff0c;只關注了數據的殘差平方和&#xff0c;沒有數據關于依賴項的考慮&#xff0c;容易被結果誤導。而LR檢驗雖然在結果上有時候跟…

openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程目標

目錄 openEuler 24.03 (LTS-SP1) 下私有鏡像倉庫部署與自簽 SSL 全流程 1 創建根 CA 與服務器證書&#xff08;修正版&#xff1a;SAN 寫法兼容所有 OpenSSL&#xff09; 2 配置 Docker Compose 文件 3 客戶端節點信任 CA 3.1 Docker 3.2 containerd 4 推送 / 拉取測試 …

mysql的LIMIT 用法

常見用法1. 限制返回行數-- 返回前5條記錄 SELECT * FROM products LIMIT 5;2. 分頁查詢&#xff08;帶偏移量&#xff09;-- 跳過前10條&#xff0c;返回接下來的5條記錄&#xff08;第11-15條&#xff09; SELECT * FROM products LIMIT 10, 5;-- MySQL 8.0 也支持這種語法 S…

maven 發布到中央倉庫之持續集成-03

maven 系列 maven-01-發布到中央倉庫概覽 maven-02-發布到中央倉庫常用腳本 maven-03-發布到中央倉庫之持續集成 maven-04-發布到中央倉庫之 Ignore Licence maven-05-maven 配置進階學習 maven-06-maven 中央倉庫 OSSRH 停止服務&#xff0c;Central Publishing Portal …

(補充)RS422

RS4221. 基本定義與定位 官方名稱&#xff1a; EIA/TIA-422&#xff08;電子工業協會/電信工業協會標準422&#xff09;。類型&#xff1a; 一種定義了電氣特性的 平衡式差分 串行通信標準。目的&#xff1a; 克服 RS-232 在傳輸距離、速率和抗干擾能力上的嚴重局限性。核心思想…

自建ELK vs 云商日志服務:成本對比分析

在當今數據驅動的時代&#xff0c;日志管理已成為企業IT基礎設施中不可或缺的一部分。面對日益增長的日志數據&#xff0c;許多團隊都在糾結&#xff1a;是自建ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;堆棧&#xff0c;還是直接使用云服務商提供的日志服務…

Eigen 幾何模塊深拆:Isometry3d vs Affine3d + 變換矩陣本質詳解

文章目錄0 寫在前面1 數學背景對比2 Eigen 實現差異3 Isometry3d 是不是 4 4 矩陣&#xff1f;4 核心 API 速查5 實戰示例5.1 SLAM 位姿鏈&#xff1a;相機點 → 世界點5.2 體素濾波&#xff1a;各向異性縮放&#xff08;X/Y → 5 cm&#xff0c;Z → 10 cm&#xff09;5.3 把…

python的病例管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 隨著醫療…

博客系統開發全流程解析(前端+后端+數據庫)與 AI 協作初體驗

一、前言&#xff1a;為什么選擇博客系統作為全棧入門&#xff1f; 對于初入編程世界的開發者來說&#xff0c;“全棧” 似乎是一個龐大而遙遠的概念。前端、后端、數據庫、部署運維… 知識體系繁雜&#xff0c;令人望而生畏。選擇一個目標明確、功能完整且貼近實際應用的項目…

Xavier公式的原理

數學原理&#xff1a; (1) 前向傳播的方差一致性 假設輸入 x 的均值為 0&#xff0c;方差為 σx2σ_x^2σx2?&#xff0c;權重 W的均值為 0&#xff0c;方差為 σW2σ_W^2σW2?&#xff0c;則輸出 zWxzWxzWx的方差為&#xff1a; Var(z)nin?Var(W)?Var(x) Var(z)n_{in}?Va…

pytorch學習筆記(二)-- pytorch模型開發步驟詳解

簡介&#xff1a; 本章主要是針對Pytorch神經網絡的開發步驟做一個詳細的總結&#xff0c;對每一步的前世今生做一個了解&#xff0c;下面先列一下開發需要的步驟有哪些&#xff1a; 模型構建&#xff0c;主要是前向傳遞函數的確認確認損失函數以及學習步頻&#xff08;learni…

consul 的安裝與服務發現

1. helm 安裝 consul 到 k8s 安裝放在這里了&#xff1a;https://github.com/lianan2/installation/tree/master/consul-helm consul 的常用命令&#xff1a; # 查看集群狀態 kubectl -n consul exec -it consul-server-0 -- consul operator raft list-peers kubectl -n con…

ros topic和service的使用

在做ldiar slam的時候&#xff0c;最常用的當屬topic&#xff0c;偶爾也會用一下service&#xff0c;action則很少使用。現在一塊來看一下topic的使用。一、topic的使用topic的消息訂閱和發布#include<ros/ros.h> #include<rosbag/bag.h> #include<rosbag/view.…

【TCP/IP】18. 因特網服務質量

18. 因特網服務質量18. 因特網服務質量18.1 服務質量&#xff08;QoS&#xff09;18.2 實時傳輸協議&#xff08;RTP&#xff09;18.3 實時傳輸控制協議&#xff08;RTCP&#xff09;18.4 集成業務&#xff08;IntServ&#xff09;18.5 區分業務&#xff08;DiffServ&#xff0…

數據集相關類代碼回顧理解 | StratifiedShuffleSplit\transforms.ToTensor\Counter

【PyTorch】圖像多分類項目 目錄 StratifiedShuffleSplit transforms.ToTensor Counter StratifiedShuffleSplit sss StratifiedShuffleSplit(n_splits1, test_size0.2, random_state0) 創建StratifiedShuffleSplit對象&#xff0c;用于將數據集劃分為訓練集和測試集。 …

【環境配置】KAG - Windows 安裝部署

前言 本博客將介紹如何在 Windows 系統上 部署運行 KAG 項目&#xff0c;將使用 WSL 和 Docker 和 Vscode 幫助我們之后利用 KAG 開發個人知識庫問答項目。 KAG&#xff08;Knowledge-Augmented Generation&#xff09;知識增強生成系統 是一個融合知識圖譜與大語言模型能力的…

《探索電腦麥克風聲音采集多窗口實時可視化技術》

引言在當今數字化信息飛速發展的時代&#xff0c;聲音作為一種重要的信息載體&#xff0c;其處理和分析技術日益受到廣泛關注。聲音可視化技術&#xff0c;作為聲音處理領域的關鍵技術之一&#xff0c;具有極為重要的價值。它能夠將抽象的聲音信號轉化為直觀的視覺圖像&#xf…

加工進化論:SPL 一鍵加速日志轉指標

作者&#xff1a;勞貴泓&#xff08;泓逸&#xff09; 1. 背景 日志服務的 SPL&#xff08;Search Processing Language&#xff09;自推出以來&#xff0c;憑借其強大的數據處理能力&#xff0c;已經成為眾多開發者和企業實現高效數據分析的首選工具。隨著業務場景的不斷拓展…