Docker核心概念與鏡像倉庫操作指南

文章目錄

  • 一、名詞概念
    • Docker鏡像
    • Docker鏡像倉庫
  • 二、Docker鏡像倉庫常用命令
  • 三、容器啟動相關指令
    • Nginx
    • docker run
    • docker ps
  • 四、綜合實例
    • 1.搭建Nginx服務
    • 2.Docker hub上創建私有倉庫

一、名詞概念

Docker鏡像

Docker 鏡像:是一個只讀的模板,它包含了創建并運行一個 Docker 容器所需的所有指令、文件系統和參數。
??可以把它想象成一個軟件的安裝包或模具。這個安裝包不僅包含了程序本身,還包含了它運行所需的所有依賴項(如庫、環境變量、配置文件等)。

一個生動的比喻:做蛋糕

  1. Dockerfile(食譜):這是一個文本文件,里面寫滿了做蛋糕的指令,比如“準備面粉”、“加入雞蛋”、“在 180°C 下烘烤 30 分鐘”。
  2. Docker 鏡像(蛋糕模具):你根據“食譜”(Dockerfile)的指令,準備好所有原材料(代碼、依賴庫),并烤好了一個完整的、但還沒切的蛋糕。這個蛋糕被做成了一個標準的“模具”(鏡像)。這個模具是只讀的,保證了每次用它做出來的蛋糕都是一模一樣的。
  3. Docker 容器(切下來的蛋糕):當你從“模具”(鏡像)里切下一塊蛋糕來吃時,這塊蛋糕就是一個容器。它是鏡像的一個運行實例,是可讀可寫的。你可以在這塊蛋糕上加上草莓(對容器進行修改),但這不會影響原來的模具(鏡像)。

Docker鏡像倉庫

Docker 鏡像倉庫:是一個集中存儲和分發 Docker 鏡像的服務,就像一個專門的應用商店(如 iOS 的 App Store)或代碼倉庫(如 GitHub),但它只管理 Docker 鏡像。

你可以把它想象成一個圖書館

  • = Docker 鏡像

  • 圖書館 = Docker 鏡像倉庫

  • 借書/還書 = 拉取鏡像/推送鏡像

docker官方架構圖:
在這里插入圖片描述
docker鏡像倉庫架構圖:
在這里插入圖片描述
docker官網:https://www.docker.com/

實際工作鏡像倉庫的使用
在這里插入圖片描述

  • 開發環境:開發人員使用的一套環境
  • 測試環境:需求開發完成后,發布到供測試人員進行測試的環境
  • 預發布環境:版本測試完成后,發布到和生產類似的環境,提前模擬生產發布
  • 生產環境:真正面向客戶的環境

二、Docker鏡像倉庫常用命令

docker命令學習
命令行:docker --help
官網學習:www.docker.com -> Developers -> Documentation -> Reference ->Docker CLI

docker login

功能:登陸到一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub

語法:

docker login [OPTIONS] [SERVER]

關鍵參數

  • -u: 登陸的用戶名
  • -p: 登陸的密碼
    示例:
docker login
docker login https://index.docker.io/vi/
docker login -u zhangsan

docker pull
功能:從鏡像倉庫中拉取或者更新指定鏡像到本地
語法:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

關鍵參數:

  • -a:拉取所有 tagged 鏡像
  • --disable-content-trust:忽略鏡像的校驗,默認開啟
    示例:
docker pull nginx:1.23.3

docker push
功能:將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
語法:

docker push [OPTIONS] NAME[:TAG]

別名:docker image push
關鍵參數:

  • -a:推送所有 tagged 鏡像
  • --disable-content-trust:忽略鏡像的校驗,默認開啟

在推送push前需要在官網創建自己的倉庫。push推送時需要用這個格式的標簽名:用戶名/倉庫名:標簽
使用tag命令將要推送的鏡像起一個標簽名:
比如:docker tag nginx:1.23.4 zhangsan/mybitnginx:v1.23.4
推送:

docker push zhangsan/mybitnginx:v1.23.4

docker search
功能:從 Docker Hub 查找鏡像
語法:

docker search [OPTIONS] TERM 

關鍵參數:

  • --no-trunc:顯示完整的鏡像描述
  • -f <過濾條件>:列出收藏數不小于指定值的鏡像
    示例:
docker search -f stars=10 nginx

docker logout
功能:登出一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub
語法:

docker logout [SERVER]	

docker images
功能:列出本地鏡像
語法:

docker images [OPTIONS] [REPOSITORY[:TAG]]  

別名:docker image ls, docker image list
關鍵參數:

  • -a:列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
  • --digests:顯示鏡像的摘要信息;
  • -f:顯示滿足條件的鏡像;
  • --format:指定返回值的模板文件;
  • --no-trunc:顯示完整的鏡像信息;
  • -q:只顯示鏡像 ID。

docker image
功能:查看鏡像詳細信息
語法:

docker image inspect [OPTIONS] IMAGE [IMAGE...]

示例:

docker image list
docker image inspect 0f8498f13f3a
docker image inspect nginx:1.22.1

docker tag
功能:標記本地鏡像,將其歸入某一倉庫
語法:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]  

別名:docker image tag
示例:

docker tag ubuntu:22.04 zhangsan/myubuntu:v1.22.1

三、容器啟動相關指令

Nginx

??Nginx是一款高性能的開源軟件,最初被設計為“網頁服務器”,但現在更廣泛地被用作“反向代理”、“負載均衡器”和“HTTP 緩存”。
??可以把它想象成一個高效的“交通樞紐”或“萬能前臺”,它負責接收所有進入網站的流量(請求),然后智能地將這些流量引導到正確的服務器(或服務)上,同時還能處理安全、加速等多項任務。

  • 正向代理:代理客戶端(如 VPN),替客戶端去訪問網站,隱藏客戶的身份。
  • 反向代理:代理服務器端,替服務器接收客戶端的請求。客戶端并不知道真正處理它請求的是后端的哪臺服務器。

反向代理

  • 隱藏后端架構:保護內部服務器(如 Node.js, Java, Python 應用服務器)的安全,不直接暴露在公網上。
  • 負載均衡:當你的網站訪問量很大時,一臺服務器會扛不住。你會擁有多臺完全一樣的服務器(形成一個服務器集群)。Nginx 作為反向代理,可以像一個大管家一樣,把收到的用戶請求“均勻地”分發給后端的多臺服務器。
    • 擴展性:通過添加更多服務器來輕松應對高流量。
    • 高可用性:如果其中一臺服務器宕機了,Nginx會自動停止將請求發往那臺壞掉的機器,保證服務不中斷。
    • 減輕單臺服務器壓力:每臺服務器都不會過載。

HTTP 緩存
Nginx 可以把后端服務器的響應(如網頁、圖片)臨時存儲(緩存)在自己這里。
??工作流程:當第一個用戶請求某個頁面時,Nginx 會去后端服務器獲取數據,然后返回給用戶,同時自己保存一份。當第二個用戶請求同一個頁面時,Nginx直接把自己緩存的內容返回給用戶,而不用再去麻煩后端服務器。

好處:

  • 極大加快響應速度:用戶感覺網站變得飛快。
  • 極大減輕后端服務器壓力:后端服務器只需要處理動態請求,靜態內容由 Nginx 緩存提供。

Nginx安裝

檢查是否已經安裝:ps -ef | grep nginx,如果有了就不用裝
下載安裝:

  • Ubuntu:sudo apt install nginx -y
  • CentOS:sudo yum install nginx -y
  • 啟動:systemctl restart nginx

查看效果:
打開瀏覽器輸入云服務器公網ip,會出現這樣的網頁:
在這里插入圖片描述

docker run

功能: 創建一個新的容器并運行一個命令
語法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

別名:docker container run

關鍵參數:

  • -d:后臺運行容器,并返回容器 ID
  • -i:以交互模式運行容器,通常與 -t 同時使用
  • -t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用
  • -P:隨機端口映射,容器內部端口隨機映射到主機的端口
  • -p:指定端口映射,格式為:主機(宿主)端口:容器端口
  • --name="nginx-lb":為容器指定一個名稱
  • -h "mars":指定容器的 hostname
  • -e username="ritchie":設置環境變量
  • --cpuset-cpus="0-2" or --cpuset-cpus="0,1,2":綁定容器到指定 CPU 運行
  • -m:設置容器使用內存最大值
  • --network="bridge":指定容器的網絡連接類型
  • --link=[]:添加鏈接到另一個容器
  • --volume, -v:綁定一個卷
  • -rm:shell 退出的時候自動刪除容器

示例:
到官網找到centos7
查看宿主機版本:cat /etc/*release*在這里插入圖片描述
將centos:7拉取到本地:docker pull centos:7
運行centos:7:docker run centos:7
在這里插入圖片描述
這里執行docker run 不帶任何選項看上去沒有任何效果,其實這個容器已經被打開了但因為沒交互所以退出了。
使用docker ps -a可以看到歷史執行過的容器

添加-it選項以交互形式運行容器,如下:
在這里插入圖片描述
注意:通常不會單獨使用-i或-t選項,需要兩個一起使用,即-it(常用于交互式容器)

接下來我們運行一個nginx:1.24.0容器,如果本地沒有會自動從服務器拉取。
在這里插入圖片描述
使用docker ps查看運行狀態

??當我們在瀏覽器中直接訪問服務器(宿主機)時,訪問的是宿主機本身的服務(如果有的話)。Docker容器擁有獨立的網絡命名空間,外網無法直接訪問容器內的Nginx服務。需要通過端口映射將宿主機的端口與容器的端口進行綁定。例如,將宿主機的7070端口映射到容器Nginx的80端口后,當訪問宿主機IP的7070端口時,流量會被自動轉發到容器內部的80端口,從而訪問到容器中的Nginx服務。
如下-p選項的使用:
在這里插入圖片描述
在這里插入圖片描述

-P是綁定隨機端口,后面不用帶任何信息,該選項很少使用,如:docker run -P -d nginx:1.24.0

--name選項改變容器名字,使用新起的容器名與其交互會變得很方便。
在這里插入圖片描述
-h:改變容器主機名
在這里插入圖片描述
-e:添加容器的環境變量
在這里插入圖片描述
-m:設置容器使用內存最大值,如下給限定容器內存使用500MB
docker run -d -m 500m --name mynginx3 nginx:1.24.0
docker stats mynginx3
在這里插入圖片描述

-rm選項:shell 退出的時候自動刪除容器,使用docker ps -a是查不到的。
如:docker run -it --name=mycentos4 -rm centos:7

docker ps

功能: 列出容器信息
語法:

docker ps [OPTIONS]

別名:docker container ls, docker container list, docker container ps

關鍵參數:

  • -a:顯示所有的容器,包括未運行的。
  • -f:根據條件過濾顯示的內容。
  • --format:指定返回值的模板文件。如 json 或者 table
  • -l:顯示 latest 的容器。
  • -n:列出最近創建的 n 個容器。
  • --no-trunc:不截斷輸出。
  • -q:靜默模式,只顯示容器編號。
  • -s:顯示總的文件大小。

四、綜合實例

1.搭建Nginx服務

查找nginx鏡像版本:
方法一:shell中執行docker search nginx如下:(不推薦)
在這里插入圖片描述
方法二:登陸官網查找:
在這里插入圖片描述

  1. 拉取鏡像:docker pull nginx:1.24.0
  2. 查看有沒有到本地:docker images nginx
  3. 看詳細信息:docker image inspect nginx:1.24.0
  4. 啟動Nginx容器:
  • 綁定宿主機7077端口
  • 將容器重命名為myweb
  • 將主機名命名為myweb.com
  • 添加環境變量myenv=test
  • 后端運行

即:

docker run -p 7077:80 --name=myweb -h myweb.com -e myenv=test -d nginx:1.24.0

假設我們要調整首頁:
添加選項-it,以前臺交互的形式啟動

docker run -p 7078:80 --name=myweb -h myweb.com -e myenv=test -it nginx:1.24.0 bash

此時nginx并沒有啟動,需要再命令行輸入nginx啟動nginx。
修改首頁:

  1. 進入目錄:cd /usr/share/nginx/html/
  2. 修改index.html中的內容如:
    在這里插入圖片描述
    效果如下:
    在這里插入圖片描述

2.Docker hub上創建私有倉庫

BusyBox介紹
??BusyBox 是一個集成了三百多個最常用 Linux 命令和工具的軟件。例如 ls、cat 和 echo 、grep、find、mount 以及 telnet等。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。而所有這一切功能卻只有區區 1M 左右的大小。因海外帶寬較小,我們拉取該鏡像推送到自己的倉庫。

CentOS安裝:

  1. 創建一個目錄:mkdir -p /data/myhou
  2. 進入目錄:cd /data/myhou
  3. 下載在該目錄下:wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate
  4. 重命名:mv busybox-x86_64 busybox(可不做)
  5. 授權:chmod +x busybox
  6. 測試:./busybox ls

Ubuntu安裝:

  • apt install busybox -y

到Docker官網創建倉庫:
在這里插入圖片描述
在這里插入圖片描述

  1. 拉取一個busybox:docker pull busybox:1.35.0
  2. 根據推送規則給busybox設置標簽:docker tag busybox:1.35.0 saal0/qsy_box:v1.0
  3. 登陸docker(如果沒有登陸):docker login
  4. 推送到倉庫:docker push saal0/qsy_box:v1.0

除此之外還可以推送到騰訊云,阿里云等。登陸騰訊云/阿里云官網,搜索容器鏡像服務,就可以搭建自己的倉庫,注意推送和拉取規則。這里就不演示。

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

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

相關文章

科技信息差(8.30)

&#x1f30d;DeepSeek V3.1 Base突襲上線&#xff01;擊敗Claude 4編程爆表&#xff0c;全網在蹲R2和V4&#x1f384;語音界Sora&#xff01;微軟剛開源新模型&#xff0c;一次生成90分鐘語音、3200倍壓縮率VibeVoice-1.5B開創了語音界多個重大技術突破&#xff1a;一次性可連…

【國內電子數據取證廠商龍信科技】ES 數據庫重建

我們公司在協助偵辦一起案件現場勘查遇到這樣一個案件&#xff0c;現場沒有 獲取到服務器數據庫密碼&#xff0c;且涉案服務器數據巨大&#xff0c;涉及到的數據庫并不 是 mysql 數據庫&#xff0c;而是 elasticsarch 數據庫&#xff0c;這給我們偵辦案件帶來了極 大的困難&…

【51單片機定時1秒中斷控制流水燈方向】2022-11-14

緣由C語言怎么編可中斷取反流水燈-編程語言-CSDN問答 用P1口做輸出口&#xff0c;接八只發光二極管。編寫程序&#xff0c;使發光二極管循環點亮&#xff0c;循環點亮時間間隔為1秒&#xff0c;該時間間隔用定時器中斷實現。/ INT0 接單次脈沖輸出&#xff0c;每當有外部中斷信…

Megatron-LM(模型并行)

Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism 1. 技術設計原則 Megatron-LM 提出輕量級層內模型并行&#xff0c;無需定制編譯器或修改框架&#xff0c;僅通過在 PyTorch 原生代碼中插入少量通信操作&#xff08;如all-reduce&…

C/C++:AddressSanitizer內存檢測工具

AddressSanitizer是gcc自帶的內存檢測工具&#xff0c;無需額外安裝 常見問題 #include <stdlib.h>// 越界訪問 void stack_buffer_overflow() {char buffer[1];int i 10;buffer[i] A; // 訪問越界 }// 野指針 void use_after_free() {char *text (char *)malloc(size…

【源碼】智慧工地系統:智能化施工現場的全新管理方案

智慧工地系統是一個綜合利用物聯網&#xff08;IoT&#xff09;、大數據、云計算、人工智能&#xff08;AI&#xff09;、移動互聯網和BIM&#xff08;建筑信息模型&#xff09;等新一代信息技術&#xff0c;對施工現場的“人、機、料、法、環”等關鍵要素進行實時、全面、智能…

網絡安全等級保護(等保2.0)

網絡安全等級保護&#xff08;等保2.0&#xff09;工作全流程指南 等級保護&#xff08;全稱“網絡安全等級保護”&#xff09;是我國網絡安全領域的核心制度&#xff0c;是《網絡安全法》規定的法定義務&#xff0c;等保2.0相關國家標準于2019年5月10日正式發布。2019年12月1日…

【Docker】Docker初識

目錄 容器技術發展史 Jail時代 1979年貝爾實驗室發明chroot 2000年FreeBSD 4.0發行FreeBSD Jail 2001年Linux VServer發行 2004年Solaris Containers發行 云時代 2006年google推出Process Containers 2008年LXC推出 2011年CloudFoundry推出Warden 2013年LMCTFY啟動 …

SNMPv3開發--snmptrapd

SNMPv3開發–snmptrapd REF:3min搞定snmpdtrap的配置與使用

機器學習時間序列算法進行隨機劃分數據是不合適的!

問題代碼&#xff1a;數據集劃分方式不適合時間序列&#xff0c;會導致評估結果不可靠。 代碼在整體流程上是合理的&#xff0c;但針對時間序列數據&#xff0c;存在一個關鍵問題&#xff1a;使用train_test_split進行隨機劃分是不合適的。時間序列的特殊性風速數據屬于時間序列…

逆向思維下,如何把基金投資做虧?

投資界常說“聰明的人學習別人賺錢的方式”&#xff0c;但如果我們刻意采用逆向思維&#xff0c;想要把基金投資做虧&#xff0c;其實也有科學依據。 今天&#xff0c;我們就從心理學和行為金融的角度&#xff0c;揭示那些真實的投資虧損方法。 ?? 1. 總想追熱點&#xff0c…

1-python 自定義模板導出文檔-基礎實現

使用 Python 根據自定義的 Word 模板和傳入的 JSON 數據生成 Word 報告&#xff0c;是自動化文檔生成的常見需求。最常用的方法是使用 python-docx 和 docxtpl 庫。其中&#xff0c;docxtpl 是基于 python-docx 的模板引擎&#xff0c;支持 Jinja2 模板語法&#xff0c;非常適合…

LeetCode算法日記 - Day 24: 顏色分類、排序數組

目錄 1. 顏色分類 1.1 題目分析 1.2 解法 1.3 代碼實現 2. 排序數組 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 顏色分類 75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; 給定一個包含紅色、白色和藍色、共 n 個元素的數組 nums &#xff0c;原地 對它們進行排序…

學習一下動調

[NSSCTF 2nd]MyBasedie查一下用ida64打開main函數里面沒有什么信息&#xff0c;接著追一下函數&#xff0c;內容在test函數里面函數會對我們輸入的內容進行base64加密&#xff0c;這段邏輯也很簡單&#xff0c;就是將加密后的字符串和目標字符串依次進行比較&#xff0c;一樣就…

Java試題-選擇題(22)

Java試題-選擇題&#xff08;22&#xff09; 題目以下對JDBC事務描述錯誤的是 &#xff1f; A) JDBC事務屬于JAVA事務的一種 B) JDBC事務屬于容器事務類型 C) JDBC事務可以保證操作的完整性和一致性 D) JDBC事務是由Connection發起的&#xff0c;并由Connection控制要通過可滾動…

藍牙5.3核心技術架構解析:從控制器到主機的無線通信設計

藍牙5.3核心技術架構解析&#xff1a;從控制器到主機的無線通信設計在無線通信領域&#xff0c;藍牙技術如何通過精巧的架構設計實現設備間的高效互操作&#xff1f;答案在于其分層架構與標準化的接口定義。藍牙5.3核心規范作為現代無線通信的重要標準&#xff0c;其系統架構設…

android View#performClick() 和 View#callOnClick() 的差異

文章目錄performClick()callOnClick()關鍵區別對比總結在 Android 中&#xff0c;View.performClick() 和 View.callOnClick() 都是用于觸發視圖點擊事件的方法&#xff0c;但它們的設計目的和執行邏輯存在細微差異&#xff0c;具體區別如下&#xff1a;performClick() 核心作…

PHP單獨使用phinx使用數據庫遷移

可以獨立使用的遷移包對比后&#xff0c;感覺phinx更接近PHP的使用習慣。 為什么要單獨用&#xff1f; 因為我不想數據庫的遷移文件依賴于某種框架。本來是可以在框架里直接安裝這個包的&#xff0c;但是發現這個包依賴cakephp&#xff0c;而cakephp的函數與thinkphp的env()函…

從零開始學習單片機18

使用STM32CubeMX創建工程選擇對應芯片后創建工程&#xff0c;首先設置時鐘源內部時鐘源包括LSI&#xff08;低速時鐘&#xff09;和HSI&#xff08;高速時鐘&#xff09;&#xff0c;使用內部時鐘源就需要將圖中的一二處勾選HCLK是芯片運行時的評率&#xff0c;雖然下面標的最大…

如何使用 DeepSeek 幫助自己的工作?

技術文章大綱&#xff1a;利用 DeepSeek 提升工作效率 了解 DeepSeek 的基本功能 DeepSeek 的核心能力&#xff1a;文本生成、代碼輔助、數據分析支持的平臺與訪問方式&#xff08;網頁端/API/集成工具&#xff09;適用場景&#xff1a;技術文檔撰寫、自動化流程設計、數據處理…