Docker 鏡像、容器、倉庫

来源:https://www.cnblogs.com/chy18883701161/archive/2020/05/03/12823163.html
-Advertisement-
Play Games

Docker的一些概念 docker image docker鏡像 即容器模板,操作系統+軟體運⾏環境+⽤戶程式 類似於安裝操作系統的windows鏡像、centos鏡像,只是一個模板 Docker container docker容器 容器是從鏡像運行的實例,比如用tomcat鏡像運行tomcat ...


 

Docker的一些概念

  • docker image   docker鏡像

即容器模板,操作系統+軟體運⾏環境+⽤戶程式

類似於安裝操作系統的windows鏡像、centos鏡像,只是一個模板

 

 

  • Docker container   docker容器

容器是從鏡像運行的實例,比如用tomcat鏡像運行tomcat,就得到一個tomcat容器

容器,是應用程式的容器,tomcat容器是運行tomcat的,mysql容器是運行mysql的,微服務的容器是運行某個微服務的

一個鏡像可運行多個容器(實例),好比一個類可以new多個對象,這個容器是相互隔離的,互不影響。

 

 

  • Docker registerie  docker倉庫

⽤於存儲鏡像,分為公有倉庫、私有倉庫,好⽐Maven的中央倉庫和本地倉庫。

docker的公有倉庫在國外,訪問速度慢,需要我們配置一下國內的鏡像,常用的鏡像加速器比如阿裡雲、網易的

 

 

配置阿裡雲的鏡像加速器

登錄阿裡雲,搜索容器鏡像服務 -> 找到鏡像加速器 -> centos,把那一串命令複製到centos上執行即可

每個人分配的加速器地址不同,需要登錄阿裡雲才會分配加速器地址。

 

 


 

 

啟動、停止Docker

啟動docker:systemctl start docker

停止docker:systemctl stop docker

 

重新載入docker的配置:systemctl daemon-reload

 

重啟docker:systemctl restart docker

 

 


 

 

image  鏡像常用命令

在公有倉庫中搜索鏡像:docker search tomcat

 

此處是搜索tomcat的鏡像,會列出相關的所有鏡像,包括官方的、組織機構、個人上傳的

 

 

只列出官方的鏡像:docker search --filter is-official=true tomcat

只列出star數>=10的鏡像:docker search --filter stars=10 tomcat

 

 

下載|拉取鏡像:docker pull tomcat:9

冒號後面指定版本,如果不指定,預設下載公有倉庫中的最新版latest,下載到本地倉庫

docker鏡像的體積很大,往往幾百兆、幾個G,因為鏡像不僅包含應用程式,還包含了所需的環境、依賴。

 

 

查看本地倉庫中的鏡像:docker images

第一列是鏡像名稱,第二列tag是鏡像的版本號,最新版不會顯示具體的版本號,會顯示為latest

 

 

刪除本地倉庫中的鏡像:docker rmi tomcat:9   #刪除tomcat:9這個鏡像,rmi即remove image

 

 

 


 

 

 

container  容器常用命令

從鏡像運行一個容器:docker run -itd --name=tomcat1 tomcat:9    

-it:都要有,以交互方式運行容器,分配命令行等交互資源

-d:以守護線程的方式在後臺運行,比如不使用-d,運行後當前標簽頁不可用,需重起一個標簽頁執行命令,如果關閉當前標簽頁或在當前標簽頁中Ctrl+C,都會終止該容器的運行。

--name:指定容器的name,如果不使用--name,會自動化分配一個name

如果不指定鏡像的版本號,預設使用最新版latest,如果本地倉庫沒有最新版,會自動從公有倉庫拉取

-d會返回容器id,很長,往往只取一部分。id、name都唯一標識一個容器

 

 

啟動容器:docker start id|name

停止:docker stop id|name

重啟:docker restart id|name

 

docker run是創建並運行容器,docker start是運行一個已存在的容器

有些容器在docker run創建運行時,需要設置參數,比如msyql就需要設置資料庫密碼,如果不設置參數,會創建但啟動失敗

容器的環境都是打包好的,環境沒有問題,如果使用docker run或docker start啟動失敗,說明沒有設置某些參數

 

 

查看正在運行的所有容器:docker ps    #第一列id就只列出了id的一部分,這一部分也可以唯一標識一個容器

查看所有容器:docker ps -a    #a即all,正在運行+停止

狀態一欄,Up表示該容器正在運行,Exited表示該容器處於停止狀態,時間是停止|啟動了多久

 

 

查看容器的詳細信息:docker inspect id|name

 

 

重命名容器:docker rename id|name  newName

 

 

刪除容器:docker rm id|name   #容器要是已停止的才能刪除。rm是刪除容器,rmi是刪除鏡像,i是images

強制刪除容器:docker rm -f id|name    #如果容器正在運行,也能刪除

 

 

進入容器:docker exec -it id|name /bin/bash

一個容器就是一個虛擬機,進入容器相當於進入一個Linux伺服器,照樣可以執行linux命令,可以修改容器配置、程式參數

該容器處於運行狀態才能進入

exit   #退出容器,只是退出該容器的命令行,該容器仍在運行

 

 

批量操作容器:

那些根據id|name操作單個容器的命令,都可以同時操作多個容器,

eg.  docker start id1|name1 id2|name2    #啟動多個容器,空格間隔

 

可以用 $(docker ps -aq) 表示所有容器的id|name(正在運行+已停止)

eg. docker start $(docker ps -aq)   #啟動所有容器

 

 


 

 

 

容器、宿主機之間的文件複製

從宿主機複製到容器:docker  cp  srcPath  id|name:distPath

從容器複製到宿主機:docker  cp  id|name:srcPath  distPath

 

eg. 假設容器的name是tomcat1

docker cp /root/1.txt  tomcat1:/usr/local/   #把宿主機上的/root/1.txt複製到tomcat1的/usr/local/下

docker cp tomcat1:/usr/local/1.txt  /root/2.txt   #把容器tomcat1中的/usr/local/1.txt複製到宿主機的/root/下,文件名使用2.txt

 

註意:

docker cp這個命令是在宿主機上執行的,宿主機安裝了docker,才可以執行docker命令

不是在docker exec進入容器執行的,容器沒有安裝docke,不能執行docker命令

 

宿主機上的文件路徑可以寫相對路徑或者絕對路徑,不知道當前路徑的可以用pwd命令查看

 

 


 

 

 

容器掛載

一個容器是運行在一個單獨的虛擬的Linux上,每個容器都對應一個單獨的Linux,

應用安裝在這個Linux的/usr/local/下,比如tomcat安裝位置是與之對應的Linux的/usr/local/tomcat

 

容器使用的文件系統是與之對應的Linux的文件系統,不是宿主機的文件系統,在宿主機上看不到容器對應的Linux上的文件。

宿主機、容器文件系統的隔離造成了一個問題:如果容器故障,容器的數據全部丟失

容器掛載是使用宿主機的某個文件夾作為容器文件系統的某個目錄,宿主機、容器都可以訪問、操作這個目錄,這個目錄在宿主機、容器中的狀態、數據是一致的

 

 

比如說把容器tomcat3掛載到宿主機的/usr/local/tomcat3:

mkdir  /usr/local/tomcat3   #在宿主機上新建一個目錄用於掛載容器

docker  run  -itd  -v  /usr/local/tomcat:/usr/local/tomcat/webapps  --name=tomcat3  tomcat:9     #前面是宿主機的path,後面是容器的path,會把宿主機的path映射為容器的指定path

 以後在tomcat上部署項目時,直接把項目放在宿主機的/usr/local/tomcat下即可,這個目錄就是容器的tomcat的webapps目錄

如果容器故障,這個目錄還在,重新掛載一個tomcat容器即可,不需要重新部署項目

 

 

容器掛載的優點

  • 操作簡便,不用進入容器操作文件、目錄,直接在宿主機就可以操作
  • 數據安全,可以映射為重要數據的存儲目錄,比如作為redis的數據存儲目錄,容器故障,目錄還在,數據還在,不會丟失

容器掛載十分常用

 

 


 

 

 

Docker鏡像層、容器層

鏡像是一個只讀模板,docker run創建容器時都是從鏡像中讀取數據,放到記憶體中,每個容器占據單獨的記憶體空間。

鏡像中的數據只讀,容器中的數據可讀可寫。

 


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

-Advertisement-
Play Games
更多相關文章
  • flask的基本使用 一 創建flask項目(避免與其他環境衝突) 1 創建虛擬環境 2 創建flask項目 + 在pycharm中創建Pure Python新項目 + 選擇創建的虛擬環境作為開發環境(使用虛擬環境後which python能看到環境目錄) + 新建.py文件 3 hello wor ...
  • 以下為整理的自己秋招遇到的面試題;主要是Java和大數據相關題型;根據印象整理了下,有些記不起來了。死鎖、樂觀鎖、悲觀鎖synchronized底層原理及膨脹機制ReetrantLock底層原理,源碼是如何實現公平和非公平的synchronized和lock的區別volitale理解?volital ...
  • 最近,我讀了一篇有趣的文章,文中介紹了一些未充分使用的Python特性的。在文章中,作者提到,從Python 3.2開始,標準庫附帶了一個內置的裝飾器functools.lru_cache。我發現這個裝飾器很令人興奮,有了它,我們有可能輕鬆地為許多應用程式加速。 你可能在想,這很好,但這個裝飾器究竟 ...
  • 0. 前言 這是一個新的系列,來源於工作中的一個需求,領導準備新開一個項目線路,要求使用Java,項目符合現有主流技術,並要求對併發量有一定的承受能力 ,支持擴展。我和公司的幾個小伙伴一起溝通了一下,這不就是標準的Spring Cloud微服務的系統架構嗎。 之前讀過小高之前發的文章的小伙伴也清楚我 ...
  • 直接進入主題 爬蟲功能:此項目和QQ空間爬蟲類似,主要爬取新浪微博用戶的個人信息、微博信息、粉絲和關註(詳細見此)。還要註意:不管你是為了Python就業還是興趣愛好,記住:項目開發經驗永遠是核心,如果你沒有2020最新python入門到高級實戰視頻教程,可以去小編的Python交流.裙 :七衣衣九 ...
  • 會話控制是指網站與用戶之間跨頁面數據交互的一種解決方案,主要有cookie和session兩種。 COOKIE 使用本地文件處理跨頁面傳值,用戶的基本信息加密後保存到本地 安全性相對不高 用戶可以禁止cookie 存儲數據有大小限制(<4k) 不同瀏覽器存儲不同的cookie SESSION 在服務 ...
  • 需求如下: 1、在一個頁面中顯示兩張圖片 2、進入頁面可以使用滑鼠拖動各自的圖片,相互不受影響 3、進入頁面後可以使用滑鼠滾輪放大或縮小圖片,相互不受影響,即滑鼠移動到圖片A上,可對圖片A進行放大或縮小,圖片B不受影響,反之亦然 4、拖動需求同3 實現代碼: 參考網址: 1.https://matp ...
  • 通俗理解spring源碼(五)—— 解析及註冊BeanDefinitions 上節講到瞭如何獲取document,當把文件轉換為document後,接下來的提取及註冊bean就是我們的重頭戲。 protected int doLoadBeanDefinitions(InputSource input ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...