自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從0到1實(shí)現(xiàn)項(xiàng)目Docker編排部署

開源
通過本文,我們深入探討了 Docker 的核心概念及其編排技術(shù)的重要性。從 Docker 的輕量級(jí)容器架構(gòu)到其在現(xiàn)代 DevOps 環(huán)境中的應(yīng)用,Docker 不僅提高了開發(fā)和部署的效率,還使得多容器管理變得更加高效。

在深入討論 Docker 編排之前,首先讓我們了解一下 Docker 技術(shù)本身。Docker 是一個(gè)開源平臺(tái),旨在幫助開發(fā)者自動(dòng)化應(yīng)用程序的部署、擴(kuò)展和管理。自 2013 年推出以來,Docker 迅速發(fā)展成為現(xiàn)代軟件開發(fā)和運(yùn)維領(lǐng)域不可或缺的重要工具。

Docker 采用容器技術(shù),將應(yīng)用程序及其所有依賴項(xiàng)封裝在一起,從而確保它們能夠在不同環(huán)境中一致地運(yùn)行。與傳統(tǒng)的虛擬化技術(shù)(如虛擬機(jī))相比,Docker 的容器更輕量級(jí),啟動(dòng)時(shí)間也顯著縮短。這一優(yōu)勢(shì)使得開發(fā)者能夠更高效地進(jìn)行應(yīng)用程序開發(fā)和測(cè)試,尤其是在快速迭代和頻繁發(fā)布的場(chǎng)景中。

隨著 DevOps 思潮的興起,開發(fā)與運(yùn)維之間的界限變得日益模糊,Docker 在這一轉(zhuǎn)變中提供了強(qiáng)有力的技術(shù)支持。然而,隨著項(xiàng)目規(guī)模的擴(kuò)大和復(fù)雜性的增加,Docker 容器的數(shù)量也隨之增長(zhǎng),這就引發(fā)了對(duì) Docker 編排的需求。

Docker 編排(Orchestration)指的是管理和協(xié)調(diào)多個(gè) Docker 容器的工具和技術(shù),其主要目的是簡(jiǎn)化容器的部署、擴(kuò)展和管理流程。通過編排,用戶可以更輕松地管理復(fù)雜的應(yīng)用程序架構(gòu),確保各個(gè)組件能夠高效協(xié)同工作。

因此,本文將為讀者提供一份從零開始部署 Docker 編排項(xiàng)目的實(shí)用指南,幫助您掌握這一關(guān)鍵技術(shù),提升應(yīng)用程序管理的效率和靈活性。

項(xiàng)目準(zhǔn)備

在本節(jié)中,我們將以 Java 項(xiàng)目為例,假設(shè)您已經(jīng)擁有一個(gè)微服務(wù)架構(gòu)的項(xiàng)目。整體項(xiàng)目結(jié)構(gòu)可能會(huì)如下所示:

圖片圖片

接下來,我們將逐步開始構(gòu)建 Docker 容器,并按照一系列系統(tǒng)化的步驟來實(shí)現(xiàn)這一過程。

核心概念

我們首先將對(duì)一些基本概念進(jìn)行詳細(xì)解釋,包括 Dockerfile、Docker 構(gòu)建命令以及 docker-compose.yml 文件的基本概念介紹。理解這些概念后,我們將進(jìn)入實(shí)際操作環(huán)節(jié),通過實(shí)踐加深對(duì)這些工具的掌握。

Dockerfile

Dockerfile 是一個(gè)文本文件,它包含了一系列構(gòu)建 Docker 鏡像所需的指令。這些指令不僅定義了鏡像的基礎(chǔ)環(huán)境,還詳細(xì)描述了應(yīng)用程序的安裝步驟、所需的依賴關(guān)系、配置的環(huán)境變量,以及其他必要的設(shè)置。例如:

# 使用一個(gè)基礎(chǔ)鏡像
FROM maven:3.8.3-openjdk-17 AS builder

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制 pom.xml 和源代碼
COPY pom.xml .
COPY src ./src

# 構(gòu)建項(xiàng)目
RUN mvn clean package

# 使用一個(gè)輕量級(jí)的基礎(chǔ)鏡像運(yùn)行應(yīng)用
FROM openjdk:17-jdk-slim

# 設(shè)置工作目錄
WORKDIR /app

# 從構(gòu)建階段復(fù)制 JAR 文件
COPY --from=builder /app/target/demo-0.0.1-SNAPSHOT.jar ./myapp.jar

# 設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令
ENTRYPOINT ["java", "-jar", "myapp.jar"]

接下來,我們需要將這個(gè)配置應(yīng)用到我們的項(xiàng)目中。為了演示的方便,我們使用了自定義的文件名稱來啟動(dòng)項(xiàng)目,這樣可以更清晰地展示每個(gè)步驟的具體過程。當(dāng)然,你也可以選擇使用默認(rèn)的文件名,這樣操作會(huì)更加簡(jiǎn)單直接。無(wú)論你選擇哪種方式,最終的效果都是一樣的。如下圖所示:

圖片圖片

構(gòu)建命令

docker build 是構(gòu)建 Docker 鏡像的核心命令,它用于將 Dockerfile 中定義的指令轉(zhuǎn)換為可執(zhí)行的鏡像。在執(zhí)行這個(gè)命令時(shí),你可以使用一系列可選參數(shù),以便更好地定制構(gòu)建過程。

docker build [OPTIONS] PATH | URL | -

PATH:指定包含 Dockerfile 的上下文路徑。通常是當(dāng)前目錄(.)或具體的目錄路徑。

URL:可以是 Git 倉(cāng)庫(kù)的 URL,Docker 會(huì)從該地址獲取 Dockerfile。

-:表示從標(biāo)準(zhǔn)輸入讀取 Dockerfile。

常用選項(xiàng)有以下這些:

  • -t, --tag:為鏡像指定一個(gè)名稱和標(biāo)簽。例如:-t myapp:latest。
  • -f, --file:指定 Dockerfile 的路徑。
  • --no-cache:在構(gòu)建時(shí)不使用緩存,確保每個(gè)步驟都從頭開始運(yùn)行。
  • --target:如果 Dockerfile 中定義了多階段構(gòu)建,可以通過這個(gè)選項(xiàng)指定要構(gòu)建的目標(biāo)階段。

docker-compose.yml 文件

docker-compose.yml 文件是用于定義和運(yùn)行多個(gè) Docker 容器的配置文件,它使得管理應(yīng)用程序的服務(wù)、網(wǎng)絡(luò)和數(shù)據(jù)卷變得更加簡(jiǎn)便和高效。通過這個(gè)簡(jiǎn)單的 YAML 文件,你可以在一個(gè)統(tǒng)一的配置中描述整個(gè)應(yīng)用的架構(gòu),使得容器的啟動(dòng)、停止和管理變得一目了然。在我們的示例程序中,我們包含了 MySQL 服務(wù)。

盡管我們本地已經(jīng)有一個(gè)獨(dú)立的 MySQL 實(shí)例,但為了更好地演示如何同時(shí)運(yùn)行多個(gè) Docker 容器,我們選擇將 MySQL 作為一個(gè) Docker 容器來啟動(dòng)。此外,值得一提的是,MySQL 已經(jīng)有官方提供的預(yù)構(gòu)建鏡像,這意味著我們無(wú)需花費(fèi)額外的精力去構(gòu)建和配置數(shù)據(jù)庫(kù),直接使用現(xiàn)成的鏡像即可。

現(xiàn)在,讓我們開始這一過程吧!

version: '3.8'

services:
  app:
    image: ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest  # 替換為你的 Java 應(yīng)用鏡像
    ports:
      - "18080:18080"  # 映射端口
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:13306/agent?useSSL=false&serverTimeznotallow=UTC&useUnicode=true&characterEncoding=utf-8
      SPRING_DATASOURCE_USERNAME: user
      SPRING_DATASOURCE_PASSWORD: password

  db:
    image: mysql:5.7  # 使用 MySQL 5.7
    environment:
      MYSQL_ROOT_PASSWORD: root_password  # 設(shè)置 root 用戶密碼
      MYSQL_DATABASE: agent  # 創(chuàng)建數(shù)據(jù)庫(kù)
      MYSQL_USER: user  # 創(chuàng)建新用戶
      MYSQL_PASSWORD: password  # 新用戶密碼
    ports:
      - "13306:13306"  # 映射 MySQL 端口
    volumes:
      - db_data:/var/lib/mysql  # 數(shù)據(jù)持久化

volumes:
  db_data:  # 定義一個(gè)數(shù)據(jù)卷

你可以通過運(yùn)行 docker-compose up 命令來啟動(dòng)所有在 docker-compose.yml 文件中定義的服務(wù)。

開始構(gòu)建

假設(shè)我們已經(jīng)將代碼項(xiàng)目成功從倉(cāng)庫(kù)部署到了服務(wù)器上,接下來,我們就可以直接在服務(wù)器上進(jìn)行操作了。如果你還沒有安裝過 Docker,可以先自行安裝,過程并不復(fù)雜。

完成安裝后,只需進(jìn)入項(xiàng)目根目錄,并執(zhí)行相應(yīng)的命令即可開始使用。

docker build -t my-java-app -f demo.dockerfile .

構(gòu)建過程的具體步驟和流程如圖所示:

圖片圖片

我們可以耐心等待接下來的步驟完成,因?yàn)榇藭r(shí)的過程與生產(chǎn)環(huán)境已經(jīng)非常相似。接下來,我們只需將最終構(gòu)建的鏡像推送到我們的私有倉(cāng)庫(kù)中,以便進(jìn)行后續(xù)的部署和管理。

鏡像倉(cāng)庫(kù)

當(dāng)然,公司的私有倉(cāng)庫(kù)地址是必不可少的。在這里,我們以騰訊云的容器鏡像服務(wù)為例,來展示如何進(jìn)行鏡像的存儲(chǔ)和管理。

推送私庫(kù)

之前我們已經(jīng)詳細(xì)講解過如何創(chuàng)建私有倉(cāng)庫(kù)的步驟,因此在此不再贅述。現(xiàn)在,我們可以直接將構(gòu)建好的鏡像推送到倉(cāng)庫(kù)中,以便進(jìn)行后續(xù)的使用和管理。

圖片圖片

接下來,我們將對(duì)我們的鏡像進(jìn)行標(biāo)簽操作,完成標(biāo)簽操作后,我們將鏡像推送到私有倉(cāng)庫(kù)中,以便于后續(xù)的部署和使用。

sudo docker tag my-java-app:latest ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest

sudo docker push ccr.ccs.tencentyun.com/studiousxiaoyu/my-java-app:latest

最后推送成功如下:

圖片圖片

圖片圖片

容器編排

接下來,我們將使用編排文件來定義和管理所需的服務(wù)。為了實(shí)現(xiàn)這一目標(biāo),我們需要在指定的目錄下創(chuàng)建一個(gè)名為 docker-compose.yaml 的文件。該文件的內(nèi)容將與我們之前展示的配置保持一致。

創(chuàng)建完文件后,我們將直接執(zhí)行啟動(dòng)命令,來驗(yàn)證我們的配置是否正確,并觀察各個(gè)服務(wù)是否能順利啟動(dòng)。

docker-compose -f spring-ai.yaml up -d

圖片圖片

最后看下日志,我們成功啟動(dòng):

圖片圖片

總結(jié)

通過本文,我們深入探討了 Docker 的核心概念及其編排技術(shù)的重要性。從 Docker 的輕量級(jí)容器架構(gòu)到其在現(xiàn)代 DevOps 環(huán)境中的應(yīng)用,Docker 不僅提高了開發(fā)和部署的效率,還使得多容器管理變得更加高效。我們逐步介紹了 Dockerfile、構(gòu)建命令及 docker-compose.yml 文件的使用,幫助讀者掌握如何構(gòu)建和管理微服務(wù)架構(gòu)。

在具體操作中,我們以 Java 項(xiàng)目為例,通過實(shí)用的示范引導(dǎo),展示了如何在本地環(huán)境中構(gòu)建和部署 Docker 容器。隨著項(xiàng)目規(guī)模的擴(kuò)大,掌握 Docker 編排將顯得尤為重要,它不僅簡(jiǎn)化了容器管理流程,還增強(qiáng)了應(yīng)用的靈活性和可擴(kuò)展性。希望本文所提供的指南對(duì)你有所幫助。

責(zé)任編輯:武曉燕 來源: 靈墨AI探索室
相關(guān)推薦

2024-05-30 10:30:39

2016-11-28 16:23:23

戴爾

2022-05-09 08:35:43

面試產(chǎn)品互聯(lián)網(wǎng)

2024-06-21 09:17:09

2022-02-09 20:50:46

短鏈系統(tǒng)場(chǎng)景

2021-01-08 08:19:36

數(shù)據(jù)庫(kù)TiDB集群

2021-07-01 07:03:32

開發(fā)Webpack代碼

2021-03-10 09:21:00

Spring開源框架Spring基礎(chǔ)知識(shí)

2023-03-06 11:35:55

經(jīng)營(yíng)分析體系

2023-08-14 07:10:38

Docker部署項(xiàng)目

2022-11-03 11:31:43

結(jié)構(gòu)分析法監(jiān)測(cè)

2022-03-15 11:51:00

決策分析模型

2023-03-19 17:36:38

2019-07-31 10:18:17

Web 開發(fā)Python

2022-04-07 10:02:58

前端檢測(cè)工具

2017-05-27 09:23:10

IOS框架APP框架代碼

2018-01-16 12:31:33

Python爬蟲數(shù)據(jù)

2022-06-13 07:02:02

Zadig平臺(tái)自動(dòng)化

2023-03-22 11:41:56

2022-06-10 14:52:46

開源項(xiàng)目字節(jié)跳動(dòng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)