Docker入門教程:在騰訊云輕量服務器上部署你的第一個容器化應用 (2025)

更多云服務器知識,盡在hostol.com

“在我電腦上明明是好的啊!”

這句話,是不是堪稱程序員“甩鍋”排行榜第一名的金句?當你辛辛苦苦開發完一個應用,把它交給同事或者部署到服務器上時,卻發現因為它依賴的某個函數庫版本不對、或者操作系統的配置有差異,程序壓根就跑不起來。那種挫敗感,足以摧毀一個美好的下午。

環境不一致,就是那個永遠潛伏在開發與運維之間、制造了無數麻煩的“幽靈”。

那么,有沒有一種方法,能把我的應用程序,連同它運行所需的所有環境(比如特定版本的Python、所有的依賴庫、所有的配置文件),像制作一個“愛心便當”一樣,完美地打包在一起?這個“便當盒”本身就是一個隔離的、干凈的迷你操作系統。無論我把這個“便當”帶到誰的電腦上,或者哪臺服務器上,只要對方安裝了“微波爐”(也就是Docker環境),就能一鍵“加熱”,百分之百地還原出和我電腦上一模一樣的、熱氣騰騰的飯菜(應用程序)。

有!這個神奇的“便當盒”制作技術,就是Docker。而Docker,就是那位來消滅“環境不一致”這個幽靈的“捉鬼天師”。

拆解“魔法便當盒”:Docker的三大核心概念

在動手之前,我們必須先花三分鐘,用大白話理解Docker的三個核心“零件”。

  1. 鏡像 (Image): 這就是制作“便當”的**“菜譜和配料清單”**。它是一個只讀的模板,詳細地記錄了制作某個特定便當(比如“宮保雞丁便當”)需要哪些米飯、哪些雞肉、哪些配菜(應用程序和依賴庫),以及制作的先后順序。
  2. 容器 (Container): 這就是根據菜譜,做出來的、那個熱氣騰騰的、可以吃的“便當”本身。鏡像是靜態的模板,而容器是動態的、正在運行的實例。你可以用同一份“宮保雞丁”菜譜(鏡像),做出無數份一模一樣的“宮保雞丁便當”(容器)。每個便當(容器)都是獨立、隔離的。
  3. 倉庫 (Repository): 這就是存放各種“菜譜”(鏡像)的**“巨型線上菜譜圖書館”**。其中最大、最官方的那個,叫Docker Hub。你可以從里面找到幾乎所有流行軟件的官方菜譜,比如Nginx、MySQL、Python等等。

理解了這三點,我們就可以開始制作我們的第一個“便當”了。

第一步:準備“廚房”——在騰訊云上請一位“自帶廚具”的大廚

我們首先需要一個裝好了全套“廚具”(Docker環境)的“廚房”(服務器)。而騰訊云的輕量應用服務器,為我們提供了一個極其方便的“作弊”選項。

  1. 登錄騰訊云,進入輕量應用服務器的購買頁面。
  2. 選擇地域和配置。 對于學習Docker來說,最便宜的2核4G配置,就已經綽綽有余。
  3. 關鍵一步:選擇鏡像! 在“鏡像”這一欄,不要選擇常規的操作系統(比如Ubuntu或CentOS)。請點擊**“應用鏡像”,然后在下方的列表或搜索框里,找到“Docker CE”**。
    • 這是什么意思? 這意味著,你下單購買的這臺服務器,騰訊云在把它交給你之前,就已經幫你把最新、最穩定的Docker環境,連同所有相關的工具,全都預裝好了。
    • 比喻一下: 這就像你買的不是一套毛坯房,而是一套已經通好了水電煤、并且配備了全套德國進口廚具的“精裝公寓”。你只需要拎包入住,直接開始“做菜”就行了。

選中Docker CE鏡像,完成支付。一兩分鐘后,你的“頂級廚房”就已經在云端準備就緒了。

第二步:“叮!微波爐加熱”——運行你的第一個Nginx容器

現在,我們已經有了一個裝好Docker的服務器。讓我們來小試牛刀,從“菜譜圖書館”(Docker Hub)里,拿一份最簡單的“Nginx官方菜譜”,來加熱一份“Nginx網站便當”。

1登錄你的服務器。 在騰訊云后臺找到你服務器的IP地址和密碼,通過SSH登錄進去。

2驗證Docker是否就位。 在命令行輸入:

Bash

docker --version

如果你看到一串版本號信息,說明你的“廚具”工作正常。

念出咒語,啟動Nginx! 在命令行里,輸入下面這行命令,然后回車:

Bash

docker run -d -p 8080:80 --name my-first-nginx nginx

別怕,我們來拆解一下這行“咒語”:

命令執行后,你會看到Docker開始下載鏡像,然后返回一長串字符,代表你的容器已經成功啟動了!

見證奇跡的時刻:

現在,打開你本地電腦的瀏覽器,在地址欄輸入:http://你的服務器IP地址:8080,然后回車。

如果你看到了那個經典的**“Welcome to nginx!”**頁面,那么,請為你自己鼓掌!你已經成功地啟動了你人生中第一個Docker容器。你已經掌握了“熱別人做好的便當”的技能。

第三步:成為“大廚”——親手打包一個屬于你自己的應用

熱別人的便當固然方便,但真正的樂趣,在于親手制作屬于自己的“獨家私房菜”。現在,我們就來把一個我們自己寫的、極簡的Python網站,打包成一個Docker鏡像,并運行起來。

1準備“食材”。 我們先創建一個項目目錄,并在里面創建兩個文件。

Bash

mkdir my-hello-app
cd my-hello-app

創建Python應用文件 app.py

Bash

nano app.py

在里面輸入以下內容:

Python

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker! 這是我親手打包的應用!'if __name__ == '__main__':app.run(debug=True, host='0.0.0.0')

創建依賴清單 requirements.txt

Bash

nano requirements.txt

在里面只寫一行:

Flask==2.0.1

2撰寫你的“獨家菜譜”——Dockerfile。my-hello-app目錄下,創建一個名為Dockerfile的文件(沒有后綴名!):

Bash

nano Dockerfile

在里面,輸入我們這份“私房菜”的制作步驟:

Dockerfile

# 步驟1:選擇一個帶有Python 3.9的基礎廚房
FROM python:3.9-slim# 步驟2:在廚房里,創建一個叫/app的操作臺
WORKDIR /app# 步驟3:把廚房外所有準備好的食材,都復制到操作臺上
COPY . .# 步驟4:根據食材清單,安裝所有配料
RUN pip install -r requirements.txt# 步驟5:告訴大家,這份便當的出餐口在5000
EXPOSE 5000# 步驟6:最后,規定加熱這份便當時,要執行的主菜制作命令
CMD ["python", "app.py"]

這份Dockerfile,是不是像一份注釋極其詳細的菜譜,清晰地記錄了每一步操作?

3讓Docker照著“菜譜”做“菜”——構建鏡像。my-hello-app目錄下,執行以下命令:

Bash

docker build -t my-python-app .

docker build:告訴Docker:“開始做菜!”

-t my-python-app:給做出來的這份“菜譜”(鏡像)起個名字。

告訴Docker,菜譜(Dockerfile)就在當前目錄下。 Docker會嚴格按照你的Dockerfile,一步一步地執行,最終生成一個屬于你自己的、獨一無二的鏡像。

4上菜!——運行你自己的容器。 現在,我們用自己的“菜譜”,做一份“便當”出來:

Bash

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

  1. 這次的端口映射是-p 5000:5000,因為我們的Flask應用,內部的出餐口是在5000。

最終的凱旋:

再次打開你本地的瀏覽器,這次,在地址欄輸入:http://你的服務器IP地址:5000

當你看到屏幕上顯示出**“Hello, Docker! 這是我親手打包的應用!”**這行你親手寫下的文字時,那種成就感,無與倫比。你不再只是一個“消費者”,你已經成了一個真正的“創造者”。

你的旅程,才剛剛開始

今天,你親手打包并啟動了你的第一個“魔法便當”。這個小小的“Hello, Docker!”,是你通往云原生、DevOps等廣闊世界的第一張門票。

你已經掌握了將任何應用,封裝成一個標準、可移植、處處運行的“集裝箱”的超能力。從此以后,“在我電腦上是好的”將不再是你的借口,而是你的自信宣言。因為你知道,你的應用,已經被裝進了那個標準、可靠、隨處可行的魔法盒子里。

去吧,去打包你的下一個偉大創意吧!

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

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

相關文章

DevOps平臺結合Gradle實現打包流水線

在現代軟件開發中,持續集成與持續交付(CI/CD)已成為團隊提速、降本增效的核心實踐。Gradle作為強大的自動化構建工具,常被用于Android與Java項目的構建打包任務。而將Gradle集成進企業的DevOps平臺中,不僅可以標準化構建過程,還能自動化打包、測試、發布的全流程,大幅提…

Node.js 操作 MySQL

目錄 一、什么是 MySQL? 二、MySQL 的功能概覽 三、MySQL 的安裝與啟動 安裝 MySQL 啟動服務 四、Node.js 如何連接 MySQL? 使用 mysql2 模塊(推薦) 建立連接 五、創建數據表和插入數據(SQL 初始化&#xff09…

解鎖高效敏捷:2025年Scrum項目管理工具的核心應用解析

一、為什么Scrum團隊需要專業項目管理工具?在敏捷開發實踐中,Scrum框架雖然提供了基礎的工作流程,但缺乏對任務細粒度管理的支持。傳統白板或簡單看板工具往往無法滿足現代敏捷團隊的需求,導致:沖刺規劃混亂&#xff1…

途游大數據面試題及參考答案

Java 的反射機制是什么?主要應用在哪些場景? Java的反射機制是指程序在運行時,能夠獲取自身類的信息(如類名、屬性、方法、構造器等),并動態操作這些信息的能力。正常情況下,Java代碼編譯時類型已確定,而反射打破了這種編譯期約束,讓程序在運行時靈活操作類和對象。 …

貪心+矩陣算法

貪心算法貪心的本質是:選擇每一階段的局部最優,從而達到全局最優做題的時候,只要想清楚 局部最優 是什么,如果推導出全局最優,其實就夠了。買賣股票的最佳實際思路:如果第i天賣出股票,則最大利潤…

STM32U5 周期性異常復位問題分析

關鍵字: Option Bytes, IDWG 1. 問題背景 客戶反饋使用 NUCLEO_STM32U575 進行評估時,發現板子燒錄完程序后,能看到指示程序運行的 LED 燈正常點亮,但是程序跑不起來。仔細觀察 LED 指示燈,并不是常亮而是出現周期性…

RedisBloom使用

安裝RedisBloom模塊,從git獲取對應的原碼,make生成.so文件,掛載.so文件,啟動redis docker run --name test-redis -v /iothub/test-redis/data:/data -v /iothub/test-redis/modules:/modules -p 6378:6379 -d redis:4.0.10 redis…

ADC、Flash、SPI、watchdog

ADCADC(Analog-to-Digital Converter), 即模擬信號 - 數字信號轉換器在STM32F103C8T6中, 同樣具有ADC功能.以我們的芯片為例, 也存在2個片上外設ADC, 即ADC1和ADC2, 這兩個ADC片上外設都掛載在APB2總線上.我們的ADC片上外設, 是一種具有12位逐次逼近型ADC,ADC轉換的本質是不斷的…

冷庫設備遠程監控物聯網+省電節能解決方案

隨著生鮮電商、醫藥冷鏈、跨境物流等行業的爆發式增長,我國冷庫容量激增,但傳統冷庫管理模式正面臨嚴峻挑戰。據統計,國內冷鏈運輸損耗率高達12%-15%,其中因溫度失控導致的貨損占比超60%。在某醫藥企業冷庫事故中,因制…

如何開發一個運行在windows系統服務器上的服務

第一步:vs2022創建一個windows服務項目第二步:從工具箱拖拽出一個timer第三步:按下圖所示進入,開始編輯業務邏輯下面給個例子using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; …

本地組策略編輯器無法打開(gpedit.msc命令異常)

一、本地組策略編輯器打開方式1、直接搜索打開(1)在搜索欄中直接輸入以下內容進行搜索本地組策略編輯器(2)搜索到后直接點擊打開即可(但是一部分同志無法搜索到,搜索到的內容基本都是網頁信息而非本地系統的…

kafka部署集群模式

Kafka部署(3.7) 生產環境推薦的kafka部署方式為operator方式部署,Strimzi是目前最主流的operator方案。集群數據量較小的話,可以采用NFS共享存儲,數據量較大的話可使用local pv存儲 部署operator operator部署方式為he…

C語言中級_動態內存分配、指針和常量、各種指針類型、指針和數組、函數指針

0、前言: 動態內存分配是一個重要概念,要和靜態數組對比著學習;指針和數組搭配在一起,讓指針理解的難度上了一個臺階,尤其是二維數組搭配指針,要獲取數組的值,什么時候“取地址”,什…

單變量單步時序預測:CNN-GRU卷積神經網絡結合門控循環單元

目錄預測效果1. **CNN-GRU的基本原理**2. **應用場景**3. **模型結構與實現**4. **優勢與挑戰**5. **相關研究與實現**6. **未來發展方向**結論代碼設計預測效果 CNN-GRU卷積神經網絡結合門控循環單元是一種結合了卷積神經網絡(CNN)和門控循環單元&#…

MonoFusion 與 Genie 3

卡內基梅隆大學的研究者發明了一種叫 MonoFusion 的新技術,它能用很少的普通相機(比如4個),就能拍出像電影特效一樣細膩流暢的動態3D場景(4D重建),比如彈鋼琴、修自行車這種復雜動作&#xff0c…

kubernets命令行創建Token并附加權限給dashboard控制臺登錄

1、創建登錄token kubectl create token default -n graph-node-test dgjeojrgopejgeropjgpsdjgerjglsdjfsjogjeojgeorjgortlfhj4yu493460uwperg3wef;lsj2y3r934tnrhifrlfe9t4h5tlhobdrmlgw485tw4yp653ut9ogogjerolj4w9erjgotj3fgjletyj49yr20o359truyo5u6908430jt5grjsdtgj49…

什么是SpringBoot

題目詳細答案Spring Boot 是由 Pivotal 團隊提供的一個基于 Spring 框架的項目,它旨在簡化 Spring 應用的開發和部署。Spring Boot 通過提供一系列的約定和開箱即用的功能,使得開發者可以更快地構建獨立的、生產級的 Spring 應用程序,而無需進…

從零開始設計一個分布式KV存儲:基于Raft的協程化實現

從零開始設計一個分布式KV存儲:基于Raft的協程化實現 本文將以一個最小可運行的分布式KV系統為例,帶你拆解如何用C、Raft算法和協程模型構建高可用的Key-Value存儲。 一、為什么需要分布式KV? 單機KV(如Redis)存在單點…

虛擬機或docker的ubuntu無界面安裝完成后鏡像源設置

ubuntu系統源 在裝好虛擬機或者docker鏡像后,直接使用apt update && apt upgrade是無法完更新的。 此時系統中也沒有vim工具,我們可以在清華源的網站中找到幫助文檔。mirrors.tuna.tsinghua.edu.cn/help/ubuntu/為了避免沖突,我們使用…

串口通信02 溫度傳感DS18B20 01 day49

九:串口通信 通信:無線和有線 ? 單工 半雙工 全雙工 并行:多個數據線 串行:一根數據線 同步:通信雙方使用同一個時鐘,SPI信息幀,有CLK引腳 異步:通信雙方使用不同時鐘,雙…