Docker 實踐與應用案例

引言

在當今的軟件開發和部署領域,高效、可移植且一致的環境搭建與應用部署是至關重要的。Docker 作為一款輕量級的容器化技術,為解決這些問題提供了卓越的方案。Docker 通過容器化的方式,將應用及其依賴項打包成一個獨立的容器,實現了應用的快速部署、隔離和資源的高效利用。本文將深入探討 Docker 的實踐操作,包括安裝配置、容器的創建與管理等,同時分享一些實際的應用案例,幫助讀者更好地理解和運用 Docker 技術。

正文內容

Docker 基礎概念與安裝

基礎概念

Docker 是一個用于開發、部署和運行應用程序的開放平臺。它利用容器化技術,將應用及其依賴項打包成一個獨立的容器,這個容器可以在任何支持 Docker 的環境中運行,實現了應用的 “一次構建,到處運行”。容器是 Docker 的核心概念之一,它類似于虛擬機,但比虛擬機更加輕量級,因為容器共享宿主機的操作系統內核,減少了資源的開銷。

安裝 Docker

Docker 的安裝過程相對簡單,不同的操作系統有不同的安裝方法。以 Ubuntu 系統為例,首先需要更新系統的軟件包列表:

sudo apt-get update

然后安裝必要的依賴包:

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

接著添加 Docker 的官方 GPG 密鑰:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

添加 Docker 的軟件源:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

最后安裝 Docker CE:

sudo apt-get install docker-ce

安裝完成后,可以通過以下命令驗證 Docker 是否安裝成功:

sudo docker run hello-world

Docker 容器的創建與管理

創建容器

創建 Docker 容器可以使用 docker run 命令。例如,要創建一個運行 Nginx 服務器的容器,可以使用以下命令:

sudo docker run -d -p 80:80 nginx

其中,-d 表示在后臺運行容器,-p 80:80 表示將容器的 80 端口映射到宿主機的 80 端口,nginx 是要運行的鏡像名稱。

管理容器

可以使用 docker ps 命令查看正在運行的容器:

sudo docker ps

如果要停止一個容器,可以使用 docker stop 命令,后面跟上容器的 ID 或名稱:

sudo docker stop container_id_or_name

要刪除一個容器,可以使用 docker rm 命令:

sudo docker rm container_id_or_name

Docker 鏡像的構建與發布

構建鏡像

Docker 鏡像是創建容器的基礎,可以使用 Dockerfile 來構建自定義的鏡像。以下是一個簡單的 Dockerfile 示例,用于構建一個基于 Node.js 的應用鏡像:

# 使用官方的 Node.js 基礎鏡像
FROM node:14# 設置工作目錄
WORKDIR /app# 復制 package.json 和 package-lock.json 到工作目錄
COPY package*.json ./# 安裝依賴
RUN npm install# 復制應用代碼到工作目錄
COPY . .# 暴露應用的端口
EXPOSE 3000# 啟動應用
CMD ["npm", "start"]

在 Dockerfile 所在的目錄下,使用以下命令構建鏡像:

sudo docker build -t my-node-app .

其中,-t 表示為鏡像指定一個標簽,. 表示使用當前目錄作為上下文。

發布鏡像

可以將構建好的鏡像發布到 Docker Hub 等鏡像倉庫,以便在其他環境中使用。首先需要登錄 Docker Hub:

sudo docker login

然后為鏡像添加標簽:

sudo docker tag my-node-app username/my-node-app

最后將鏡像推送到 Docker Hub:

sudo docker push username/my-node-app

Docker 網絡與存儲

Docker 網絡

Docker 提供了多種網絡模式,如橋接網絡、主機網絡、無網絡等。默認情況下,容器使用橋接網絡,通過宿主機的網絡接口與外部通信。可以使用 docker network 命令來管理網絡。例如,創建一個自定義的橋接網絡:

sudo docker network create my-network

然后在創建容器時指定使用該網絡:

sudo docker run -d --network my-network nginx
Docker 存儲

Docker 容器的數據默認是臨時的,當容器被刪除時,數據也會丟失。為了持久化存儲數據,可以使用 Docker 卷。可以使用 docker volume 命令來管理卷。例如,創建一個卷:

sudo docker volume create my-volume

然后在創建容器時掛載該卷:

sudo docker run -d -v my-volume:/data nginx

Docker 實際應用案例

微服務架構中的應用

在微服務架構中,每個服務都可以打包成一個 Docker 容器,通過容器的隔離性和獨立性,實現服務的快速部署和擴展。例如,一個電商系統可以拆分為用戶服務、商品服務、訂單服務等多個微服務,每個微服務使用 Docker 容器進行部署。使用 Docker Compose 可以方便地管理多個容器的啟動和停止。以下是一個簡單的 Docker Compose 文件示例:

version: '3'
services:user-service:image: user-service-imageports:- "3001:3001"product-service:image: product-service-imageports:- "3002:3002"order-service:image: order-service-imageports:- "3003:3003"

使用以下命令啟動所有服務:

sudo docker-compose up -d
持續集成與持續部署(CI/CD)中的應用

在 CI/CD 流程中,Docker 可以用于構建和部署應用。例如,在 GitLab CI/CD 中,可以使用 Docker 容器來運行測試和部署應用。以下是一個簡單的 GitLab CI/CD 配置文件示例:

stages:- build- test- deploybuild:stage: buildimage: docker:latestscript:- docker build -t my-app .- docker login -u $DOCKER_USER -p $DOCKER_PASSWORD- docker push my-apptest:stage: testimage: my-appscript:- npm testdeploy:stage: deployimage: docker:latestscript:- docker pull my-app- docker run -d -p 80:80 my-app

結論

Docker 作為一款強大的容器化技術,在軟件開發和部署領域有著廣泛的應用。通過本文的介紹,我們了解了 Docker 的基礎概念、安裝配置、容器和鏡像的管理、網絡與存儲等方面的知識,同時分享了微服務架構和 CI/CD 等實際應用案例。Docker 的容器化特性使得應用的部署更加高效、可移植和易于管理,為開發者和運維人員提供了極大的便利。隨著云計算和容器技術的不斷發展,Docker 將會在更多的領域發揮重要作用。開發者可以進一步深入學習 Docker 的高級特性,如 Docker Swarm、Kubernetes 等,以應對更復雜的應用場景。

擴展鏈接

基于QA-RAG的智能檢索系統:

https://github.com/GrapeCity-AI/gc-qa-rag

https://gitee.com/grape-city-ai/gc-qa-rag
在這里插入圖片描述

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

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

相關文章

《論三生原理》以非共識路徑實現技術代際躍遷??

AI輔助創作: 《論三生原理》以顛覆傳統數學范式的非共識路徑驅動多重技術代際躍遷,其突破性實踐與爭議并存,核心論證如下: 一、技術代際躍遷的實證突破? ?芯片架構革新? 為華為三進制邏輯門芯片提供理論支撐,通過對…

一體機電腦為何熱度持續上升?消費者更看重哪些功能?

一體機電腦(AIO,All-in-One)將主機硬件與顯示器集成于單一機身。通常僅需連接電源線,配備無線鍵盤、鼠標即可啟用。相比傳統臺式電腦和筆記本電腦,選購一體機的客戶更看重一體機的以下特點。 一體機憑借其節省空間、簡…

無人機載重模塊技術要點分析

一、技術要點 1. 結構設計創新 雙電機卷揚系統:采用主電機(張力控制)和副電機(卷揚控制)協同工作,解決繩索纏繞問題,支持30米繩長1.2m/s高速收放,重載穩定性提升。 軸雙槳布局…

【大模型推理】工作負載的彈性伸縮

基于Knative的LLM推理場景彈性伸縮方案 1.QPS 不是一個好的 pod autoscaling indicator 在LLM推理中, 為什么 2. concurrency適用于單次請求資源消耗大且處理時間長的業務,而rps則適合較短處理時間的業務。 3.“反向彈性伸縮”的概念 4。 區分兩種不同的…

STM32F103_Bootloader程序開發12 - IAP升級全流程

導言 本教程使用正點原子戰艦板開發。 《STM32F103_Bootloader程序開發11 - 實現 App 安全跳轉至 Bootloader》上一章節實現App跳轉bootloader,接著,跳轉到bootloader后,下位機要發送報文‘C’給IAP上位機,表示我準備好接收固件數…

AI驅動的未來軟件工程范式

引言:邁向智能驅動的軟件工程新范式 本文是一份關于構建和實施“AI驅動的全生命周期軟件工程范式”的簡要集成指南。它旨在提供一個獨立、完整、具體的框架,指導組織如何將AI智能體深度融合到軟件開發的每一個環節,實現從概念到運維的智能化…

Hawk Insight|美國6月非農數據點評:情況遠沒有看上去那么好

7月3日,美國近期最重要的勞動力數據——6月非農數據公布。在ADP遇冷之后,市場對這份報告格外期待。 根據美國勞工統計局公布報告,美國6月非農就業人口增加 14.7萬人,預期 10.6萬人,4月和5月非農就業人數合計上修1.6萬人…

Python 的內置函數 reversed

Python 內建函數列表 > Python 的內置函數 reversed Python 的內置函數 reversed() 是一個用于序列反轉的高效工具函數,它返回一個反向迭代器對象。以下是關于該函數的詳細說明: 基本用法 語法:reversed(seq)參數:seq 可以是…

溝通-交流-說話-gt-jl-sh-goutong-jiaoliu-shuohua

溝通,先看|問狀態(情緒) 老婆下班回家,我說,到哪兒了,買點玉米哦;她說你為啥不買, 我說怎么如此大火氣, 她說你安排我,我不情愿;你怎么看 和女人溝通不能目標優先 先問狀態并表達關心 用感謝代替要求(“你上次買的玉米特別甜,今天突然又饞了…

Ubuntu20.04運DS-5

準備工作: cd /home/rlk/rlk/runninglinuxkernel_5.0 #make clean mkdir _install_arm64/dev sudo mknod _install_arm64/dev/console c 5 1 ./build_ds5_arm64.sh git checkout boot-wrapper-aarch64/fvp-base-gicv3-psci.dtb ./build_ds5_arm64.sh創建工程步驟2.5…

區塊鏈網絡P2P通信原理

目錄 區塊鏈網絡P2P通信原理引言:去中心化的網絡基石1. P2P網絡基礎架構1.1 區塊鏈網絡拓撲1.2 節點類型對比2. 節點發現與連接2.1 初始引導過程2.2 節點發現協議3. 網絡通信協議3.1 消息結構3.2 核心消息類型4. 數據傳播機制4.1 交易傳播流程4.2 Gossip協議實現4.3 區塊傳播優…

RNN和Transformer區別

RNN(循環神經網絡)和 Transformer 是兩種廣泛應用于自然語言處理(NLP)和其他序列任務的深度學習架構。它們在設計理念、性能特點和應用場景上存在顯著區別。以下是它們的詳細對比:1. 基本架構RNN(循環神經網…

[學習記錄]Unity-Shader-幾何著色器

幾何著色器是可編程渲染管線中的一個可選階段,位于頂點著色器之后和片段著色器之前。其核心能力在于動態生成和操作幾何體圖元。 一.圖元 了解圖元是理解幾何著色器的基礎和前提,因為幾何著色器的工作就是接收圖元,然后輸出圖元。 幾何著色…

Paimon 布隆過濾器索引

布隆過濾器原理布隆過濾器的最優參數推導是其理論核心,理解了這個過程,就能明白 BloomFilter64 構造函數里計算公式的由來了。下面我們一步步來推導。首先,我們定義幾個關鍵變量:n: 預估要插入的元素數量 (對應代碼中的 items)。m…

Python-GUI-wxPython-布局

1 需求 2 接口 wx.Sizer().Add() proportion(比例)參數是一個整數,用于指定當父布局管理器的空間有剩余時,被添加的對象(這里是 general_sizer 及其包含的組件)在布局方向上可以占據的額外空間的比例。 當…

springboot 鏈路追蹤實現

traceid實現 需要依賴<dependency><groupId>com.alibaba</groupId><artifactId>transmittable-thread-local</artifactId><version>2.14.5</version></dependency>public class TraceIdContext {private static final String …

JavaEE初階第七期:解鎖多線程,從 “單車道” 到 “高速公路” 的編程升級(五)

專欄&#xff1a;JavaEE初階起飛計劃 個人主頁&#xff1a;手握風云 一、死鎖 1.1. 死鎖的概念 死鎖是指兩個或多個并發進程&#xff08;或線程&#xff09;在執行過程中&#xff0c;因爭奪資源而造成的一種互相等待的現象。如果沒有外力作用&#xff0c;這些進程將永遠無法繼…

黑暗中的爆破(船訊網Ais爬蟲暨爬蟲實戰js逆向學習經驗分享)

事先聲明:本文章所獲得的信息均通過合法手段獲得(本人為政府部門工作,爬蟲行為均經過授權),爬蟲需遵守各項法律法規,不該爬取的信息不爬。 最近因為做博士畢業設計需要用到ais信息,但在船訊網爬取ais的時候遇到了問題,因為之前爬取的人太多,所以網站加上了反爬措施,c…

代碼混淆的步驟

在 Android 開發中&#xff0c;代碼混淆&#xff08;ProGuard/R8&#xff09;是保護代碼安全和縮減應用體積的關鍵步驟。以下是詳細的混淆流程和優化策略&#xff1a; 一、基礎混淆步驟 1. 啟用混淆 在 build.gradle 中配置&#xff1a; android {buildTypes {release {mini…

分布式集合通信--學習筆記

分布式集合通信一 基礎概念 分布式系統模型 節點與進程模型 多機多卡、多機多進程通信模式 同步 、異步 集合通信定義 點對點通信 vs 集合通信 點對點通信 定義 &#xff1a;兩個節點之間的直接數據傳輸&#xff0c;通常基于專用鏈路或網絡路徑通信范圍&#xff1a;僅涉及兩…