docker_1

来源:https://www.cnblogs.com/NingYaFelix/archive/2023/08/11/17622798.html
-Advertisement-
Play Games

# Docker概述 ## Docker為何要出現 由於傳統的方式,不能打包環境,而環境的配置也及其繁瑣,及其耗費時間,而docker就可以非常有效的解決這個問題 **docker的思想來源於集裝箱,docker的核心思想!打包裝箱,也就是說每個箱子都是隔開的,docker通過這種機制可以吧伺服器利 ...


Docker概述

Docker為何要出現

由於傳統的方式,不能打包環境,而環境的配置也及其繁瑣,及其耗費時間,而docker就可以非常有效的解決這個問題

docker的思想來源於集裝箱,docker的核心思想!打包裝箱,也就是說每個箱子都是隔開的,docker通過這種機制可以吧伺服器利用到極致

docker為什麼這麼多人喜歡用

在類似docker這種技術出現之前,我們用的都是虛擬機,而虛擬機和docker都稱為虛擬化技術,不同的則是:

  • 虛擬機安裝和啟動相當於一個全新的操作系統,體積十分的大
  • docker則是直接運行在宿主機的,而且每個容器是相互隔離的,每個容器都有屬於自己的文件系統,而每個容器相同的東西是共用的,互不影響,也十分的小巧

docker是基於go語言開發的,是一個開源項目

docker官網:https://www.docker.com/

docker的官方文檔:https://docs.docker.com/

docker的鏡像倉庫:https://hub.docker.com/

  • 應用更快熟的交付和部署
  • 更便利的升級的擴展,刪減
  • 更簡單的系統運維
  • 更高效的電腦資源利用

Docker安裝

參考官方文檔和百度以及Google

Docker的基本組成

  • 鏡像(images)

    可以通過鏡像來創建多個容器

  • 容器(container)

    利用容器化技術,獨立運行應用,通過鏡像來創建,目前可以理解為一個簡易的linux

  • 倉庫(repository)

    存放鏡像的地方,分為私有和公有,國內結合阿裡雲的容器的鏡像加速服務使用

Docker的常用命令

幫助命令

docker version  # 查看docker的版本信息
docker info # 查看docker的系統信息,包含鏡像和容器的數量
docker 命令 --help #幫助命令,幫助文檔:https://docs.docker.com/engine/reference/commandline/build/

鏡像命令

docker images # 查看本地主機上的所有鏡像,也可以用docker image ls
# 解釋 
#REPOSITORY # 鏡像的倉庫源
#TAG # 鏡像的標簽 
#IMAGE ID # 鏡像的id
#CREATED # 鏡像的創建時間 
#SIZE # 鏡像的大小
docker search # 搜索鏡像
docker pull #下載鏡像
docker rmi # 刪除鏡像

docker pull下載鏡像

#下載鏡像 docker pull 鏡像名[:tag]
❯ docker pull gcc
Using default tag: latest
latest: Pulling from library/gcc #不寫tag預設就是latest
b9a857cbf04d: Already exists # 分層下載 docker images的核心,聯和文件系統
d557ee20540b: Already exists
3b9ca4f00c2e: Already exists
667fd949ed93: Already exists
4ad46e8a18e5: Already exists
6b12d912e8a1: Pull complete
469a7950a2b4: Pull complete
b0ef12232a36: Pull complete
c261ba6eb26c: Pull complete
Digest: sha256:f418921b872c4831dfc9bc33aaec2a8480d37e46190da766c3497cd8d5fedb75 # 防偽簽名
Status: Downloaded newer image for gcc:latest
docker.io/library/gcc:latest # 真實地址

docker rmi刪除鏡像

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

容器命令

docker run 鏡像id # 新建容器並啟動 
docker ps # 列出所有運行的容器 docker container list
docker rm 容器id # 刪除指定容器
docker start 容器id # 啟動容器 
docker restart 容器id # 重啟容器 
docker stop 容器id # 停止當前正在運行的容器 
docker kill 容器id # 強制停止當前容器

註:我們有了鏡像才可以創建容器,linux

> docker container

Usage:  docker container COMMAND

Manage containers

Commands:
  attach      Attach local standard input, output, and error streams to a running container # 當前shell下 attach連接指定運行的鏡像
  commit      Create a new image from a container's changes # 提交當前容器為新的鏡像
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker container COMMAND --help' for more information on a command.

新建容器並啟動

docker run [可選參數] images | docker container run [可選參數] image
#參數說明書
--name="Name" # 容器名字 tomcat01 tomcat02 用來區分容器 
-d # 後臺方式運行
-it # 使用交互方式運行,進入容器查看內容
-p # 指定容器的埠 -p 8080(宿主機):8080(容器)
	-p ip:主機埠:容器埠 
	-p 主機埠:容器埠(常用) 
	-p 容器埠
-P(大寫) 隨機指定埠
# 測試
❯ docker run -it centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
7a0437f04f83: Already exists
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
i[root@8f62df7602af /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@8f62df7602af /]# exit # 退出容器到主機
exit

查看當前正在運行的容器

❯ docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
565c3e0b43ca   centos    "/bin/bash"   12 seconds ago   Up 11 seconds
  practical_hermann

退出容器

exit # 直接退出容器
ctrl+p+Q # 容器不停止退出

刪除容器

docker rm 容器id # 刪除指定容器,不能刪除正在運行的容器,可以使用rm -rf強行刪除
docker rm -f $(docker ps -aq) # 刪除指定的容器
docker ps -a -q|xargs docker rm #刪除所有的容器

啟動和停止容器的操作

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

常用的其它命令

後臺啟動命令

# docker run -d 鏡像
❯ docker run -d centos
0a739d000eafcb8e190e890ed06832de1b7ee2f1544d59fcd60390699f1612fe
❯ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
# 常見的坑,docker容器使用後臺運行,就必須要有一個前端進程,docker發現沒有應用,就會自動停止

查看日誌

# 顯示日誌 
-tf # 顯示日誌信息(一直更新)
--tail number # 需要顯示日誌條數 
docker logs -t --tail n 容器id # 查看n行日誌 
docker logs -ft 容器id # 跟著日誌

查看鏡像的元數據

❯ docker inspect centos #centos為容器id或名稱
[
    {
        "Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        ..........
    }
]

進入當前正在運行的容器

docker exec -it 容器id bashshell # 進入當前容器重開一個終端,可以在裡面操作
docker attach 容器id # 進入當前容器正在執行的終端

從容器拷貝到主機上

docker cp 容器id:容器內路徑 主機

Docker鏡像講解

鏡像是什麼

鏡像其實就是一種輕量級,可執行的獨立軟體包,用來打包軟體運行環境和基於運行環境開發的軟體,它包含運行某個軟體所需的所有內容,將所有的應用和環境打包成docker鏡像,即可直接運行

Docker鏡像載入原理

  • UnionFs(聯合文件系統)

    我們下載的時候看見的一層層的就是這個

    也就是一種分層,輕量級並且高性能的文件系統,支持對文件系統修改作為一次提交來一層層疊加,同時可以將不同的目錄掛載在同一個虛擬文件系統下,是docker鏡像的基礎,鏡像可以分層繼承

    特性:可以一次載入多個文件系統,但總體就一個文件系統,聯和載入會把各層文件系統疊加起來,最終的文件系統就會包含底層的所有文件和目錄

分層

最大的好處就是資源共用,查看鏡像分層的方式可以通過docker images inspect來查看

理解

所有的docker都起始於一個基礎的鏡像層,當進行修改的或者新加內容時,就會在當前的鏡像層之上新建鏡像層,類似於游戲打補丁

Docker通過存儲引擎(新版本採用快照機制)的方式來實現鏡像層堆棧,並保證多鏡像層對外展示為統 一的文件系統

Linux上可用的存儲引撃有AUFS、 Overlay2、 Device Mapper、Btrfs以及ZFS。顧名思義,每種存儲引擎都基於 Linux中對應的文件系統或者塊設備技術,井且每種存儲引擎都有其獨有的性能特點

Docker在 Windows上僅支持 windowsfilter 一種存儲引擎,該引擎基於NTFS文件系統之上實現了分層 和CoW

docker鏡像都是只讀的,當容器啟動的時候,一個新的可寫層載入到鏡像的頂部,這一層就是我們常說的容器層,容器之下的都叫鏡像

commit鏡像

# 和git的原理類似
docker commit -m="描述" -a="作者" 容器id 目標鏡像名[:TAG]


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 來源:juejin.cn/post/7139202066362138654 昨天線上容器突然cpu飆升,也是第一次排查這種問題所以記錄一下~ ## 前言 首先問題是這樣的,周五正在寫文檔,突然收到了線上報警,發現cpu占用達到了90多,上平臺監控系統查看容器,在jvm監控中發現有一個pod在兩個小時 ...
  • 在.NET中,理解對象的記憶體佈局是非常重要的,這將幫助我們更好地理解.NET的運行機制和優化代碼,本文將介紹.NET中的對象記憶體佈局。 .NET中的數據類型主要分為兩類,值類型和引用類型。值類型包括了基本類型(如int、bool、double、char等)、枚舉類型(enum)、結構體類型(stru ...
  • 在開發`winfrom`應用時,經常遇到異常:`System.InvalidOperationException:“線程間操作無效: 從不是創建控制項“xxxx”的線程訪問它。`出現這個異常的原因是創建這個UI的線程,和當前訪問這個UI的線程不會是同一個。Winform為了防止線程不安全,因此對這個跨... ...
  • # Unity AssetPostprocessor模型相關函數詳解 在Unity中,AssetPostprocessor是一個非常有用的工具,它可以在導入資源時自動執行一些操作。在本文中,我們將重點介紹AssetPostprocessor中與模型相關的函數,並提供多個使用例子。 ## OnPost ...
  • OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的電腦視覺庫。OpenCV是由英特爾公司發起並參與開發,以BSD許可證授權發行,可以在商業和研究領域中免費使用。OpenCV可用於開發實時的圖像處理電腦視覺以及模式識別程式。該程式庫也可以使用 ...
  • 本篇文章將帶你認識C#的新語法、創建項目、發佈運行、讀取的相關操作、MVC開發、擴展、各種容易的使用,許可權等.NET的相關知識。帶你從零到精通,全面掌握.NET5的開發技能。 ...
  • DrawingBrush 背景圖 Background上畫,線條(LineGeometry)、幾何圖形(RectangleGeometry)、橢圓(EllipseGeometry)、弧線(ArcSegment )等。 屬性 說明 描述 <GeometryDrawing Brush="Orange"> ...
  • 前面講了Centos如何安裝telnet遠程,這次分享Ubuntu系統如何安裝遠程telnet,作為咱們運維備用遠程途徑 一、下載和安裝 查看系統版本:Ubuntu 22.04.1 LTS 線上安裝: apt install telnet telnetd openbsd-inetd 離線安裝: 離線 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...