文章目錄
- 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 基本步驟
-
創建 Dockerfile:在項目根目錄下創建一個名為
Dockerfile
的文件,并編寫指令來定義環境。例如,指定基礎鏡像、安裝必要的軟件包、設置工作目錄等。 -
構建 Docker 鏡像:在包含 Dockerfile 的目錄下,運行
docker build
命令來構建 Docker 鏡像。例如:docker build -t your-image-name:tag .
其中
-t
參數用于指定鏡像的標簽,.
表示使用當前目錄下的 Dockerfile 進行構建。 -
運行 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 構建的鏡像。 |
pypy3 | Python 解釋器:PyPy 3.x 版本(比 CPython 更快)。 |
bots_battle.py | 執行的腳本:運行麻將機器人對戰的主程序。 |
-g 1 | 腳本參數:指定對戰局數為 1 局(-g 即 --games )。 |
--logs | 啟用詳細日志:記錄 Bot 的決策過程(生成 debug_logs 文件夾)。 |
運行結果
- 查看日志