【Docker 從入門到實戰全攻略(一):核心概念 + 命令詳解 + 部署案例】

1. 是什么

Docker 是一個用于開發、部署和運行應用程序的開源平臺,它使用 容器化技術 將應用及其依賴打包成獨立的容器,確保應用在不同環境中一致運行。

2. Docker與虛擬機

2.1 Docker(容器化)

容器化是一種輕量級的虛擬化技術,它將應用程序及其依賴項打包成獨立的容器,確保應用在不同環境中一致運行。與傳統虛擬機相比,容器共享宿主操作系統的內核,因此更輕量、更高效。

  • 核心技術:Linux 的 namespaces(隔離進程、網絡等)和 cgroups(限制資源使用)。
  • 工作方式:容器直接運行在宿主機的內核上,共享操作系統,僅封裝應用的用戶空間。
  • 優點:資源效率高、啟動快、部署簡單。
  • 缺點:隔離性較弱(共享內核),不適用于需要完全隔離內核的場景。

2.2 虛擬機(VM)

  • 核心技術:Hypervisor(如 VMware、VirtualBox、KVM)模擬硬件資源。
  • 工作方式:每個 VM 包含獨立的操作系統、驅動程序和應用,通過 Hypervisor 訪問物理硬件。
  • 優點:完全隔離,安全性高,適用于不同操作系統或需要隔離內核的場景。
  • 缺點:資源消耗大,啟動慢,管理復雜。
    暫時無法在飛書文檔外展示此內容

2.3 對比

對比項Docker(容器化)虛擬機(VM)
底層依賴共享宿主機的操作系統內核,僅封裝應用和依賴庫每個 VM 包含完整的操作系統(內核 + 應用)
隔離級別進程級隔離(輕量級)硬件級隔離(重量級)
資源利用率高(無需額外操作系統開銷)低(每個 VM 需要獨立的操作系統資源)
啟動速度秒級(直接啟動應用進程)分鐘級(需要啟動完整的操作系統)

3. 核心概念

[圖片]

3.1 鏡像(Image)

  • 只讀的模板,包含應用代碼、依賴庫、環境變量等,類似 “應用的快照”。類似于“菜譜”
  • 例如:cr2.fit2cloud.com/1panel/maxkb 就是一個鏡像

3.2 容器(Container)

  • 鏡像的運行實例,可被啟動、停止、刪除。類似于按菜譜做出的菜
  • 容器間相互隔離,共享宿主機的操作系統內核

3.3 倉庫(Repository)鏡像源

  • 存儲鏡像的地方,分為公有倉庫(如 Docker Hub)和私有倉庫(如 cr2.fit2cloud.com)。類似于菜譜分享平臺
    [圖片]

4 Docker常用命令

4.1 幫助命令

  • docker verision # 顯示版本信息
  • docker info # 顯示系統信息
  • docker 命令 --help # 幫助命令
    官方幫助文檔:https://docs.docker.com/reference/cli/docker/

4.2 鏡像命令

4.2.1 docker images 查看所有鏡像

docker images [選項] [鏡像名[:版本標簽TAG]]
在這里插入圖片描述

  • 常用選項
    -a, --all #列出所有鏡像
    -q,--quiet #只顯示鏡像的id

4.2.2 docker search 搜索鏡像

docker search [選項] TERM

4.2.3 docker pull 拉取鏡像

docker pull [選項] 鏡像名[:版本標簽|@DIGEST]

4.2.4 docker rmi 刪除鏡像

docker rmi [選項] IMAGE [IMAGE...]

  • docker rmi -f 鏡像id 鏡像id #刪除指定的鏡像
  • docker rmi -f $(docker images -aq) #刪除全部的鏡像

4.2.5 docker commit 保存鏡像

docker commit [選項] 容器ID或名稱 [新鏡像名[:標簽]]

  • 容器轉鏡像工具:將單個容器的當前狀態保存為新鏡像,
  • 常用選項
    -a, --author 指定鏡像作者信息 --author="John Doe <john@example.com>"
    -m, --message 添加提交信息 --message="Installed Apache"
    -p, --pause 提交時暫停容器(默認開啟) --pause=false(不暫停容器)
  • docker commit abc123 my-ubuntu-python:v1

4.3 容器命令

  • 有了鏡像才可以創建容器
    docker pull centos:7 #需指定下載版本,若直接pull centos ,CentOS 官方已 移除 latest 標簽,或鏡像源中未同步 latest 版本,會導致拉取失敗

4.3.1 docker run 新建容器并啟動

docker run [參數] image

  • 常用選項
    --name="Name" #為容器命名,用來區分容器
    -d #以后臺方式運行
    -it #使用交互方式運行,進入容器查看內容
    -p 主機端口:容器端口 #指定容器的端口
  • 示例:啟動并進入
    在這里插入圖片描述

4.3.2 exit 從容器退回到主機

exit # 停止容器并退回到主機
Ctrl +P + Q # 容器不停止退回到主機

4.3.3 docker ps 或 docker top查看服務器進程

docker ps [選項]

  • 常用選項
    (默認) # 列出當前正在運行的容器
    -a #列出當前正在運行以及歷史運行過的容器
    -n=1 #顯示最近1次創建的容器
    -q #只顯示容器編號

docker top 容器id

4.3.4 docker rm 刪除容器

docker rm [選項,] 容器id [容器id...]

  • docker rm 容器id #刪除指定容器,但無法刪除正在運行的容器
  • docker rm -f $(docker ps -aq) #刪除所有容器
  • docker ps -a -q | xargs docker rm #刪除所有容器
  • docker rm $(docker ps -a -q) #刪除所有停止的容器

4.3.5 啟動和停止容器

docker start 容器id #啟動容器
docker restart 容器id #重啟容器
docker stop 容器id #停止當前正在運行的容器
docker kill 容器id #停止當前正在運行的容器

4.4 常用其它命令

4.4.1 docker run -d 后臺啟動容器

docker run -d 鏡像名
在這里插入圖片描述

  • docker 容器使用后臺運行,必須要有一個前臺進程,若 docker 發現沒有應用,就會自動停止

4.4.2 docker logs 查看日志

docker logs [選項] 容器

  • 常用選項
    -tf #顯示帶時間戳的日志
    --tail 1 #顯示1條日志

#沒有日志可以自己編寫一段 shell 腳本
docker run -d centos /bin/sh -c "while true;do echo ronghaha;sleep 1;done" #每隔一秒輸出一次 ronghaha
#再進行日志的查看
在這里插入圖片描述

4.4.3 docker inspect查看源數據

docker inspect 容器id

[{"Id": "4d9c107c8975344c1188cd5d27351bbcca812f5ecf6600e9cc975dcfab805415","Created": "2025-05-23T10:03:37.047169586Z","Path": "/bin/sh","Args": ["-c","while true;do echo ronghaha;sleep 1;done"],-----------------------后續內容省略----------------------

4.4.4 docker exec 或 docker attach進入當前正在運行的容器

我們通常容器都是使用后臺方式運行的,需要進入容器,修改一些配置

  • 方式一:docker exec 進入容器后開啟一個新終端,可進行操作(常用)
    docker exec -it 容器id bash
  • 方式二:docker attach 進入容器正在執行的終端,不會啟動新的進程
    docker attach 容器id

4.4.5 docker cp從容器拷貝文件至主機

docker cp [選項] 容器id:文件路徑 拷貝文件路徑
在這里插入圖片描述

4.5 練習

4.5.1 部署nginx

  • Step1: docker search nginx或者直接去 dockerhub 上查找對應版本和使用手冊
  • Step2: 下拉鏡像:pull
    docker pull nginx:1.27
  • Step3: 運行測試
    docker run -d -p 3344:80 nginx:1.27 #-d后臺運行 -p宿主機端口:容器內部端口,將容器的 80 端口映射到主機的 3344 端口
    [圖片]
    curl localhost:3344 #測試本地網絡連接和服務可用性
 curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>

看到Welcome to nginx!證明測試成功

  • Step4: 進入容器
→~ docker exec -it df8d23b39485 /bin/bash`                    
root@df8d23b39485:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

4.5.2 部署tomcat

  • 官方的下載:--rm 一般用來測試,用完刪除
    docker run -it --rm tomcat:9.0

  • 下載再啟動
    docker pull tomcat:11.0 #拉取鏡像
    docker run -d -p 3355:8080 --name tomcat:11.0 tomcat:11.0

  • 測試訪問無問題
    在這里插入圖片描述

  • 進入容器
    docker exec -it tomcat /bin/bash

創作不易,點個贊支持一下ヾ(?゚▽゚)ノ

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

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

相關文章

Vue:axios(POST請求)

發送 POST 請求 基本用法 axios.post(/api/login, {username: lcyyyy,password: 123456 }) .then(response > {console.log(請求成功:, response.data); }) .catch(error > {console.error(請求失敗:, error); });在 Vue 組件中使用 export default {methods: {async …

一周學會Pandas2之Python數據處理與分析-數據重塑與透視-unstack() - 解堆 (行 -> 列)

鋒哥原創的Pandas2 Python數據處理與分析 視頻教程&#xff1a; 2025版 Pandas2 Python數據處理與分析 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili unstack() 是 pandas 中用于數據重塑的重要方法&#xff0c;它與 stack() 互為逆操作。unstack() 的主要功能是將行索…

基于大模型預測的FicatIII-IV期股骨頭壞死綜合治療研究報告

目錄 一、引言 1.1 研究背景與目的 1.2 國內外研究現狀 1.3 研究意義和創新點 二、FicatIII-IV 期股骨頭壞死概述 2.1 疾病定義與分期 2.2 病因與病理機制 2.3 臨床癥狀與診斷方法 三、大模型預測原理與方法 3.1 大模型簡介 3.2 數據收集與預處理 3.3 模型訓練與優…

C++?多態!!!

一、引言 眾所周知&#xff0c;C有三大特性&#xff0c;它們分別是封裝、繼承和多態&#xff0c;在之前的文章中已經詳細介紹過封裝和繼承了&#xff0c;今天我們將一起學習多態相關的知識&#xff0c;如果還想了解封裝、繼承相關的知識&#xff0c;可以跳轉到以下鏈接&#xf…

electron安裝報錯處理

electron安裝報錯 解決方法&#xff1a; 修改 C:\Users\用戶名.npmrc下配置文件 添加代碼 electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttps://npmmirror.com/mirrors/electron-builder-binaries/最后代碼 registryhtt…

Windows10下使用QEMU安裝Ubuntu20.04虛擬機,并啟用硬件加速

Windows10下使用QEMU安裝Ubuntu20.04虛擬機&#xff0c;并啟用硬件加速 作者將狼才鯨創建日期2025-05-30 CSDN閱讀地址&#xff1a;Windows10下使用QEMU安裝Ubuntu20.04虛擬機&#xff0c;并啟用硬件加速 本文檔源碼地址&#xff1a;Windows10下使用QEMU安裝Ubuntu20.04虛擬機…

頂刊SCS | 基于視覺語言大模型推理分割的建筑足跡尺度功能分類, 樣本數據和代碼已開源!

論文介紹 題目&#xff1a;Visual-language reasoning segmentation (LARSE) of function-level building footprint across Yangtze River Economic Belt of China 期刊&#xff1a;Sustainable cities and society&#xff08;中科院一區TOP&#xff0c;IF10.5&#xff09;…

【軟件】navicat 官方免費版

Navicat Premium Lite https://www.navicat.com.cn/download/navicat-premium-lite

每個路由器接口,都必須分配所屬網絡內的 IP 地址,用于轉發數據包

在IP網絡中&#xff0c;主機&#xff08;Host&#xff09;和路由器接口&#xff08;Router Interface&#xff09;都需要分配網絡地址&#xff08;IP地址&#xff09;。 1. 主機&#xff08;Host&#xff09;的IP地址分配 (1) 作用 主機的IP地址用于唯一標識該設備&#xff0…

鴻蒙OSUniApp頁面切換動效實戰:打造流暢精致的轉場體驗#三方框架 #Uniapp

UniApp頁面切換動效實戰&#xff1a;打造流暢精致的轉場體驗 引言 在移動應用開發中&#xff0c;頁面切換動效不僅能提升用戶體驗&#xff0c;還能傳達應用的品質感。隨著HarmonyOS的普及&#xff0c;用戶對應用的動效體驗要求越來越高。本文將深入探討如何在UniApp中實現流暢…

Tesseract OCR 安裝與中文+英文識別實現

一、下載 https://digi.bib.uni-mannheim.de/tesseract/ 下載&#xff0c;盡量選擇時間靠前的&#xff08;識別更好些&#xff09;。符合你的運行機&#xff08;我的是windows64&#xff09; 持續點擊下一步安裝&#xff0c;安裝你認可的路徑即可&#xff0c;沒必要配置環境變…

Visual Studio 2022 發布獨立的 exe 文件

我們在用 Visual Studio 2022 寫好一個 exe 程序之后&#xff0c;如果想把這個拿到其他地方運行&#xff0c;需要把 exe 所在的文件夾一起拿過去。 編譯出來的 exe 文件需要其他幾個文件一同放在同一目錄才能運行&#xff0c;原因在于默認情況下&#xff0c;Visual Studio 是把…

Kotlin-特殊類型

文章目錄 數據類型枚舉類型匿名類和伴生對象單例類伴生對象 數據類型 聲明一個數據類非常簡單: //在class前面添加data關鍵字表示為一個數據類 data class Student(var name: String, var age: Int)數據類聲明后,編譯器會根據主構造函數中聲明的所有屬性自動為其生成以下函數…

在線博客系統【測試報告】

&#x1f552; 一. 項目背景 由于紙質筆記容易丟失&#xff0c;攜帶不變&#xff0c;為了方便自己學習的過程中記錄筆記&#xff0c;特開發了這個博客系統。這個系統后端采用 SpringBoot MyBatis SpringMVC &#xff1b;前端使用Html CSS JS&#xff1b;數據庫使用的是Mysq…

每日刷題c++

快速冪 #include <iostream> using namespace std; #define int long long int power(int a, int b, int p) {int ans 1;while (b){if (b % 2){ans * a;ans % p; // 隨時取模}a * a;a % p; // 隨時取模b / 2;}return ans; } signed main() {int a, b, p;cin >> a …

Python中的變量、賦值及函數的參數傳遞概要

Python中的變量、賦值及函數的參數傳遞概要 python中的變量、賦值 python中的變量不是盒子。 python中的變量無法用“變量是盒子”做解釋。圖說明了在 Python 中為什么不能使用盒子比喻&#xff0c;而便利貼則指出了變量的正確工作方式。 如果把變量想象為盒子&#xff0c;那…

KVM 安裝 Ubuntu 22

在 KVM 中安裝 Ubuntu 22 虛擬機。 首先創建硬盤文件 sudo qemu-img create -f qcow2 /app/vms/ubuntu22.qcow2 100G安裝Ubuntu 22 sudo virt-install \--name ubuntu22 \--ram 4096 \--vcpus 2 \--disk path/app/vms/ubuntu22.qcow2,formatqcow2 \--os-type linux \--os-va…

基于生產-消費模式,使用Channel進行文件傳輸(Tcp方式)

Client端&#xff1a; #region 多文件傳輸 public class FileMetadata {public string FileName { get; set; }public long FileSize { get; set; } }class Program {const int PORT 8888;const int BUFFER_SIZE 60 * 1024 * 1024;//15s-50 25s-64 33s-32 27s-50 31s-40 25…

【后端高階面經:Elasticsearch篇】39、Elasticsearch 查詢性能優化:分頁、冷熱分離與 JVM 調優

一、索引設計優化:構建高效查詢的基石 (一)分片與副本的黃金配置 1. 分片數量計算模型 # 分片數計算公式(單分片建議30-50GB) def calculate_shards(total_data_gb, single_shard_gb=30):return max

學習路之PHP--easyswoole3.3安裝入門

學習路之PHP--easyswoole安裝入門 一、安裝swoole擴展二、安裝easyswoole三、指定PHP版本安裝四、啟動swoole五、EasySwoole的入門學習如果報&#xff1a;not controller class match 六、學習推薦&#xff1a; 0、centos 7、php7.2.33、easyswoole 3.3 一、安裝swoole擴展 二、…