Docker、Docker composer與Docker desktop

文章目錄

  • Docker、Docker composer與Docker desktop
  • 一、docker、docker composer、docker desktop
    • 1.1 Docker
    • 1.2 Docker Compose
    • 1.3 Docker Desktop
    • 1.4 三者之間的區別
  • 二、docker desktop的安裝和換源
    • 2.1 前期準備
      • WSL2
    • 2.1 Docker Desktop 安裝
      • 下載 Docker Desktop
      • 安裝 Docker Desktop
    • 2.2 鏡像源設置
  • 三、Opengauss數據庫的配置
    • 3.1 Opengauss簡介
    • 3.2 鏡像拉取
    • 3.3 創建容器
    • 3.4 進入數據庫
  • 四、通過vscode連接docker環境
    • 4.1 前提條件
    • 4.2 安裝 Docker 擴展
    • 4.3 驗證連接
  • 五、通過docker管理環境,封裝環境成為docker包
    • 5.1 基本步驟
    • 5.2 麻將機實例
      • 5.2.1項目下載
      • 5.2.2 封裝環境docker包
        • 創建Dockerfile
        • 構建 Docker 鏡像
        • 運行 Docker 容器
        • 運行結果

Docker、Docker composer與Docker desktop

一、docker、docker composer、docker desktop

1.1 Docker

  • 定義和功能 :Docker 是一個開源的應用容器引擎。你可以把它想象成一種“包裝”軟件的方式。在傳統的軟件部署環境中,軟件運行依賴于各種系統庫、配置文件等。如果不小心更改了系統環境,就可能影響軟件的正常運行。而 Docker 就像是給軟件打造了一個“小房間”,把這些軟件以及它需要的所有依賴(比如特定版本的庫、配置等)都裝在這個房間里。這個“房間”就是一個容器。例如,你有 一個 Python 應用程序,它需要特定版本的 Python 解釋器和一些第三方庫(如 Numpy、Pandas)。使用 Docker,你可以將這個 Python 應用連同它所需要的 Python 環境和庫打包成一個 Docker 鏡像。然后,無論是在你的本地開發機器、測試服務器還是生產服務器上,只要安裝了 Docker,就可以用這個鏡像來啟動一個容器,軟件就能在這個獨立的環境中穩定運行。
  • 優點
    • 隔離性 :每個容器都有自己獨立的運行環境,不會互相干擾。就像不同的箱子,里面的東西不會混在一起。
    • 一致性 :無論在什么操作系統(只要支持 Docker)上,容器內的軟件運行環境都是一致的。這解決了“在我的機器上可以運行”的問題,避免了因為環境差異導致的軟件部署難題。
    • 輕量級 :和虛擬機相比,Docker 容器不需要像虛擬機那樣虛擬整個操作系統。它共享宿主機的內核,所以容器啟動很快,資源占用也少。

1.2 Docker Compose

  • 定義和功能 :Docker Compose 是用于定義和運行多容器 Docker 應用程序的工具。當你的應用程序需要多個服務協同工作時,Docker Compose 就派上用場了。例如,你有一個基于微服務架構的電商系統,包括前端服務(處理用戶界面)、后端服務(處理業務邏輯,如訂單處理、用戶認證等)、數據庫服務(存儲用戶信息、商品信息等)。你可以使用 Docker Compose 來定義這些服務,通過一個 YAML 文件來描述每個服務的配置,包括鏡像名稱、端口映射、環境變量、掛載的卷等信息。然后,只需要一個命令(docker - compose up),就可以啟動所有這些相關聯的容器,并且 Docker Compose 會根據你定義的配置來正確地配置它們之間的網絡連接等關系。
  • 優點
    • 簡化配置 :通過一個文件來定義多個服務的配置,避免了逐個手動去配置和啟動容器的繁瑣過程。
    • 可復用性 :這個 YAML 文件可以被團隊成員共享,或者用于不同的環境(開發、測試、生產等),實現了配置的標準化和可復用性。

1.3 Docker Desktop

  • 定義和功能 :Docker Desktop 是 Docker 為開發者提供的本地開發環境。它是一個集成了 Docker Engine(用于運行容器)、Docker Compose(用于管理多容器應用)、Kubernetes(一個容器編排工具,用于管理大規模的容器集群,這里先簡單提一下,后續可能還會深入學習)等工具的軟件。它主要是方便開發者在本地機器上快速安裝和使用 Docker 相關技術。例如,如果你是一個 Windows 或 Mac 系統的開發者,想要在本地運行和測試基于 Docker 的應用,安裝 Docker Desktop 就可以輕松實現。它提供了圖形化界面來查看容器、鏡像的信息,還可以方便地管理容器的啟動、停止等操作。
  • 優點
    • 方便安裝和使用 :為不同操作系統的開發者提供了一個易于安裝和使用的 Docker 環境。
    • 功能集成 :把多種 Docker 相關工具集成在一起,方便開發者在一個統一的環境中完成開發和測試工作。

1.4 三者之間的區別

  • 功能側重點不同
    • Docker 是基礎,主要關注于容器的創建、運行和管理,它是一個核心的容器引擎。
    • Docker Compose 是在 Docker 基礎上,側重于多容器應用的編排和管理,把多個容器組合成一個完整應用的過程。
    • Docker Desktop 更側重于提供給開發者一個本地的、易用的 Docker 環境,它包含了 Docker 和 Docker Compose 等工具,方便開發者進行本地開發和測試。
  • 使用場景不同
    • Docker 可以單獨使用來運行單個容器。例如,你只需要運行一個簡單的 Nginx 服務器來測試網頁內容,就可以使用 Docker 來拉取 Nginx 鏡像并啟動容器。
    • Docker Compose 在需要運行多個相互關聯的容器來構成一個應用時使用。比如,在開發一個復雜的分布式系統,涉及多個微服務和數據庫等組件時,使用 Docker Compose 來定義和啟動這些組件是很方便的。
    • Docker Desktop 主要用于本地開發環境。當你在自己的電腦上進行應用開發,想要使用 Docker 技術來測試和調試應用時,它提供了一個簡潔的本地環境。
  • 部署方式不同
    • Docker 可以在服務器等環境中直接部署,用于生產環境的容器運行(當然,也可以在本地運行,但 Docker Desktop 更側重于本地場景)。
    • Docker Compose 通常是在開發和測試階段用于編排多容器應用,它依賴于 Docker 來運行容器。在生產環境中,可能還會有更復雜的編排工具,但它在開發階段是很實用的。
    • Docker Desktop 是安裝在本地開發機器上的軟件,主要是為了方便開發過程中的容器操作,它本身不是直接用于生產環境中的大規模應用部署。

二、docker desktop的安裝和換源

2.1 前期準備

WSL2

  • WSL2(Windows Subsystem for Linux 2)是微軟推出的一項功能,它允許用戶在 Windows 10 和 Windows 11 操作系統上運行 Linux 二進制可執行文件(ELF 文件)
  • 讓你能在 Windows 電腦上直接運行 Linux 程序

WSL是window的子系統,在本機上用命令直接安裝會很慢,所以我提供了安裝包,在zip中,下載安裝就行

2.1 Docker Desktop 安裝

下載 Docker Desktop

  • 訪問 Docker 官網:https://www.docker.com/。
  • 點擊頁面上的“Download for Windows - AMD64”按鈕,以下載適用于 Windows 系統的 Docker Desktop 安裝文件

安裝 Docker Desktop

Windows下安裝Docker Desktop到非C盤指南

C盤內存充足可以直接點擊 Docker Desktop Installer.exe 下載

  • 打開powershell 輸入以下指令(路徑先建好,再輸入指令)
& "D:\load\DockerDesktop\Docker Desktop Installer.exe" install --installation-dir="D:\Program Files\Docker"

D:\load\DockerDesktop\Docker Desktop Installer.exe對應Docker Desktop Installer.exe的保存路徑

D:\Program Files\Docker對應目的安裝路徑

2.2 鏡像源設置

在這里插入圖片描述

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.hpcloud.cloud","https://docker.m.daocloud.io","https://docker.unsee.tech","https://docker.1panel.live","http://mirrors.ustc.edu.cn","https://docker.chenby.cn","http://mirror.azure.cn","https://dockerpull.org","https://dockerhub.icu","https://hub.rat.dev"]
}

三、Opengauss數據庫的配置

3.1 Opengauss簡介

OpenGauss 是一款由華為發起并貢獻給開源社區的企業級開源關系型數據庫,旨在為全球用戶提供高性能、高可靠、高安全的數據庫服務。它基于 PostgreSQL 進行深度優化和擴展,融合了華為在數據庫領域多年的技術積累,支持多核架構、分布式部署、智能運維等特性,適用于金融、電信、政務、能源等對數據安全與業務連續性要求極高的行業場景。

3.2 鏡像拉取

高版本(5.x或以上)opengauss EE容器無法在macOS或Windows上正常啟動。此時議把鏡像換成lite版,將拉取指令切換成(docker pull enmotech/opengauss-lite)

  • 在PowerShell中運行
docker pull enmotech/opengauss-lite

3.3 創建容器

在C盤或者其他盤根目錄下創建一個文件夾為opengauss,確保其絕對路徑為C:\opengauss”或者D:\opengauss即可。然后在PowerShell中輸入如下代碼創建容器

docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Dwq@123456 -v D:\opengauss:/var/lib/opengauss -p 15432:5432 enmotech/opengauss-lite

? 其中name可以自己修改,PASSWORD后的密碼()也可以自己設計修改(要求包含大小寫字母、普通字符和數字,并且密碼長度不少于8位)接下來回到Docker主界面就可以看到新容器已經創建成功了
在這里插入圖片描述

3.4 進入數據庫

打開cmd 依次輸入以下指令

# 先打開docker里的opengause
docker exec -it opengauss bash# 切換用戶到omm(登錄到超級用戶omm)
su - omm# gsql工具通過默認端口5432連接到postgres數據庫
gsql -d postgres -p 5432#查看數據庫清單
\l  

在這里插入圖片描述

四、通過vscode連接docker環境

4.1 前提條件

已安裝 VSCode

4.2 安裝 Docker 擴展

在這里插入圖片描述

4.3 驗證連接

  • 新增了一個 圖標
  • 右側顯示了容器、鏡像
  • 顯示錯誤可能是因為沒有打開docker desktop

在這里插入圖片描述

啟動

在這里插入圖片描述

五、通過docker管理環境,封裝環境成為docker包

5.1 基本步驟

  1. 創建 Dockerfile:在項目根目錄下創建一個名為 Dockerfile 的文件,并編寫指令來定義環境。例如,指定基礎鏡像、安裝必要的軟件包、設置工作目錄等。

  2. 構建 Docker 鏡像:在包含 Dockerfile 的目錄下,運行 docker build 命令來構建 Docker 鏡像。例如:

    docker build -t your-image-name:tag .
    

    其中 -t 參數用于指定鏡像的標簽,. 表示使用當前目錄下的 Dockerfile 進行構建。

  3. 運行 Docker 容器:構建完成后,您可以使用 docker run 命令來啟動 Docker 容器。例如:

    docker run -it --name your-container-name your-image-name:tag
    

    -it 參數表示以交互式終端模式運行容器,--name 參數用于指定容器的名稱。

5.2 麻將機實例

5.2.1項目下載

1.進入網頁直接下載https://github.com/MahjongRepository/tenhou-python-bot?tab=readme-ov-file

2.或者用命令下載

  • 預先建好一個文件夾,我創建了一個文件夾maj位于D:\lab\maj

  • git 命令進行克隆,下載 tenhou-python-bot 項目的代碼

    進入文件夾D:\lab\maj后輸入以下命令

    git clone https://github.com/MahjongRepository/tenhou-python-bot.git
    
  • 克隆速度過慢或失敗,可以嘗試使用 GitHub 鏡像(如https://ghproxy.com/前綴)

    git clone https://ghproxy.com/https://github.com/MahjongRepository/tenhou-python-bot.git
    

在這里插入圖片描述

5.2.2 封裝環境docker包

創建Dockerfile

根目錄中已包含dockerfile文件,所以不需要自己編寫

FROM pypy:3.7-7.3.6-slim
//選擇基礎鏡像:使用 PyPy 3.7 版本(7.3.6 是 PyPy 版本號)的精簡版鏡像。RUN useradd -ms /bin/bash docker-user
//創建一個名為docker-user的用戶,并設置其默認shell為bash
//避免容器以 root 權限運行,提升安全性。WORKDIR /app/
//設置容器內的工作目錄為/app,后續操作(如復制文件)都在這個目錄下進行。RUN python3 -m pip install pip==21.3
//升級 pip(Python 包管理器)到 21.3 版本,確保安裝依賴時更穩定。COPY requirements /requirements
//將本地的requirements文件夾復制到容器的/requirements路徑下
//這里通常存放項目需要的依賴包列表RUN pip install --no-cache-dir -r /requirements/dev.txt
//安裝dev.txt文件中列出的所有依賴包。
//--no-cache-dir:不保存安裝包的緩存,減少鏡像體積;
//-r:指定從文件讀取依賴列表。COPY ./project .
//將本地的project文件夾內容復制到容器的當前工作目錄(/app)下
//這一步把項目代碼放進容器里,讓容器知道要運行什么程序USER docker-user
//切換到之前創建的docker-user用戶運行后續命令和程序
//確保容器不以管理員(root)權限運行,防止惡意操作或文件權限問題
構建 Docker 鏡像

在項目根目錄下(powershell),使用以下命令來構建 Docker 鏡像

docker build -t mahjong_bot .

如果報錯

在這里插入圖片描述

docker pull pypy:3.7-7.3.6-slim
docker build -t mahjong_bot .
運行 Docker 容器
docker run -it --rm `-v "${PWD}/project:/app" `mahjong_bot `pypy3 bots_battle.py -g 1 --logs

基礎參數

docker run -it --rm
參數作用
-i交互式模式(Interactive):保持標準輸入流(stdin)開放,允許與容器交互。
-t分配偽終端(TTY):為容器分配一個終端,使命令輸出更像在本地終端運行。
--rm自動刪除容器:容器退出時自動刪除,避免殘留無用容器(適合一次性任務)。

卷掛載參數

-v "${PWD}/project:/app"
參數作用
-v掛載卷(Volume):將宿主機(本地電腦)的目錄映射到容器內的目錄。
${PWD}/project宿主機路徑${PWD} 表示當前 PowerShell 工作目錄,project 是子目錄。
:/app容器內路徑:將宿主機的 project 目錄掛載到容器的 /app 目錄。

鏡像與命令參數

mahjong_bot pypy3 bots_battle.py -g 1 --logs
部分作用
mahjong_bot鏡像名稱:使用之前通過 docker build 構建的鏡像。
pypy3Python 解釋器:PyPy 3.x 版本(比 CPython 更快)。
bots_battle.py執行的腳本:運行麻將機器人對戰的主程序。
-g 1腳本參數:指定對戰局數為 1 局(-g--games)。
--logs啟用詳細日志:記錄 Bot 的決策過程(生成 debug_logs 文件夾)。
運行結果

在這里插入圖片描述

  • 查看日志

在這里插入圖片描述

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

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

相關文章

H5錄音、圖文視頻IndexDB儲存最佳實踐:用AI生成語音備忘錄

引言 早在大學的時候,我就期望做一款屬于自己的 APP,可惜那時不懂技術。現在有了技術,但卻沒有時間。好在 AI 的快速發展終于讓我完成了這個愿望。于是,我用半天的時間,用 AI 生成了一個純前端的 H5 程序:…

簡述C++ nlohmann/json 庫

目錄 JSON概述 nlohmann/json 庫的使用 創建json數組/對象 字符串解析(parse反序列化) 數據訪問 序列化 文件讀寫 JSON概述 JSON(JavaScrip Object Notation)是一種輕量級、跨語言的數據交換格式。它基于 ECMAScript 子集,以獨立于編程…

定制開發開源AI智能名片與S2B2C商城小程序的內容分發體系構建:基于“1+N“素材復用模型的創新實踐

摘要:在數字內容爆炸式增長的當下,本文針對內容分發效率低下的行業痛點,提出基于"定制開發開源AI智能名片S2B2C商城小程序"的一體化解決方案。通過構建"1篇長文10條長視頻20條短視頻10個平臺"的素材復用公式,…

c++26新功能—hive容器

一、容器的演進 科學進步的過程一般來說都是從先解決常用的、迫切的問題開始,然后再逐步解決一些少見不迫切的問題,直到最終解決到認知程度內的諸多問題。舉一個網上的例子,以前說咱們無法生產水筆的尖頭上的鋼球,其實這對于國內…

Kafka 源碼剖析:消息存儲與協議實現(二)

四、協議實現機制探秘 4.1 生產者協議 4.1.1 消息發送流程 Producer 在向 Kafka 集群發送消息時,首先會根據分區策略選擇目標分區 。常見的分區策略有輪詢、按消息鍵的哈希值分區以及自定義分區策略 。如果生產者在發送消息時指定了分區號,那么消息就…

Vue.js 與 TypeScript:最佳實踐

1. 引言 Vue.js 是一個漸進式、靈活的 JavaScript 框架,廣泛用于構建用戶界面和單頁應用(SPA)。而 TypeScript 是 JavaScript 的一個超集,添加了靜態類型和其他高級特性。將兩者結合使用,可以幫助開發者構建更具可維護…

webpack5 css-loader:從基礎到原理

webpack 處理樣式 webpack本身是不能識別樣式資源的,需要借助Loader來幫助webpack解析樣式資源,樣式資源包括但不限于css/less/sass/scss/styl 未使用樣式處理加載器前 運行webpack打包命令 bash npx webpack報錯信息如圖,提示無法識別css…

【GESP】C++三級練習 luogu-B2096 直方圖

GESP C三級練習,一維數組練習,難度★★☆☆☆。 題目題解詳見:【GESP】C三級練習 luogu-B2096 直方圖 | https://www.coderli.com/gesp-3-luogu-b2096/ 【GESP】C三級練習 luogu-B2096 直方圖 | OneCoderGESP C三級練習,一維數組…

【網站內容安全檢測】之2:從網站所有URL頁面中提取所有外部及內部域名信息

還沒寫成Go的,用Python吧,稍微慢一點 依賴內容(安裝命令pip install -r requirements.txt) requirements.txt aiohttp beautifulsoup44.12.2 tqdm4.66.1 redis5.2.1 motor3.3.1 pymongo4.6.0 chardet提取域名的程序 domain_extractor.py …

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰

【LLaMA-Factory 實戰系列】四、API 篇 - 部署推理服務與批量調用實戰 1. 引言2. 推理后端的選擇與對比3. 部署 API 推理服務3.1 創建 API 配置文件3.2 啟動 API 服務3.3 探索交互式 API 文檔 4. 編寫 Python 腳本進行批量調用4.1 準備工作4.2 批量調用腳本4.3 運行腳本并查看結…

C++工廠模式的作用(工廠方法、Factory Method、Factory Pattern)

文章目錄 代碼示例工廠的作用1. 對象創建的封裝 🏭2. 解耦客戶端和具體類 🔗3. 統一的創建入口 🚪4. 隱藏實現細節 🎭 在這個項目中的具體體現總結 代碼示例 https://gitee.com/arnold_s/my-learning-test/tree/master/20250610_…

9-C#修改任務管理的名稱

C#修改任務管理的名稱

Fisco Bcos學習 - 搭建第一個區塊鏈網絡

文章目錄 一、前言二、環境準備三、安裝依賴在 macOS 上安裝依賴在 Ubuntu 上安裝依賴在 CentOS 上安裝依賴 四、創建操作目錄并下載安裝腳本五、搭建單群組 4 節點聯盟鏈六、啟動 FISCO BCOS 鏈七、檢查進程八、檢查日志輸出 在數字化時代,區塊鏈技術正逐漸成為推動…

可視化圖解算法53:表達式求值

牛客網 面試筆試 TOP 101 1. 題目 描述 請寫一個整數計算器,支持加減乘三種運算和括號。 數據范圍:0≤∣s∣≤100,保證計算結果始終在整型范圍內 要求:空間復雜度: O(n),時間復雜度 O(n) 示例1 輸入…

小白成長之路-Nginx配置(二)

文章目錄 一、localtion配置1.匹配規則2.匹配優先級3.配置案例 二、rewrite1、 語法2、 可寫入字段3 配置案例4 if 指令5.sutoindex6. nginx配置中的常用變量 三、配置Nginx狀態統計1.下載vts模塊2.編譯nginx 提示:以下是本篇文章正文內容,下面案例可供參…

Qt的第一個程序

Qt的第一個程序 1.hello world2.使用圖形化拖拽方式3.使用C代碼的方式3.1.頭文件3.2.setText3.3.對象樹 4.設計MyLabel5.亂碼問題 🌟🌟hello,各位讀者大大們你們好呀🌟🌟 🚀🚀系列專欄&#xff…

圖書數據接口

基本說明: 接口地址:http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式:json請求方式:get請求示例:http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

MongoDB原理

目錄 一、概念 二、架構 2.1 邏輯結構 2.2 數據模型 2.3 存儲引擎:WiredTiger 三、事務 一、概念 MongoDB是文檔數據庫,基本存儲單元是 文檔(Document),以BSON格式(一種類json的二進制形式&#xff…

《解碼音頻:從基礎到未來的聽覺探索》

音頻:開啟聲音世界的大門 在生活的每一個角落,音頻如影隨形,編織出豐富多彩的聽覺體驗。清晨,第一縷陽光尚未完全照進房間,手機里溫柔的鬧鐘鈴聲,將我們從睡夢中輕輕喚醒,開啟活力滿滿的一天。通…

web安全之h2注入系統學習

起初是在N1 Junior 2025 上面碰到一題,考點是h2的sql注入。由于之前沒有見過,趁此機會系統學習一番 實驗代碼 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…