製作自己的Docker鏡像

来源:https://www.cnblogs.com/lxy0/archive/2020/04/16/12713382.html
-Advertisement-
Play Games

製作鏡像有2種方式,一種是容器轉換成鏡像,另一種是使用dockerfile創建鏡像,一般後者更常用。 容器轉為鏡像 使用 命令將容器轉換成鏡像 需要轉移鏡像時,將該鏡像打成一個包 在另一臺電腦載入這個鏡像時,載入這個包 使用dockerfile創建鏡像(推薦) dockerfile是一個文本文件,包 ...


製作鏡像有2種方式,一種是容器轉換成鏡像,另一種是使用dockerfile創建鏡像,一般後者更常用。

容器轉為鏡像

  • 使用docker commit命令將容器轉換成鏡像
docker commit 容器id 鏡像名稱:版本號
  • 需要轉移鏡像時,將該鏡像打成一個包
docker save -o 壓縮文件名稱 鏡像名稱:版本號
  • 在另一臺電腦載入這個鏡像時,載入這個包
docker load –i 壓縮文件名稱

使用dockerfile創建鏡像(推薦)

dockerfile是一個文本文件,包含了一條條指令,每條指令構建一層,基於基礎鏡像,最終構建出一個新的鏡像。

dockerfile用到的關鍵字

關鍵字 作用 備註
FROM 指定父鏡像 指定dockerfile基於那個image構建
MAINTAINER 作者信息 用來標明這個dockerfile誰寫的
LABEL 標簽 用來標明dockerfile的標簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看
RUN 執行命令 執行一段命令 預設是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD 容器啟動命令 提供啟動容器時候的預設命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT 入口 一般在製作一些執行就關閉的容器中會使用
COPY 複製文件 build的時候複製文件到image中
ADD 添加文件 build的時候添加文件到image中 不僅僅局限於當前build上下文 可以來源於遠程服務
ENV 環境變數 指定build時候的環境變數 可以在啟動的容器的時候 通過-e覆蓋 格式ENV name=value
ARG 構建參數 構建參數 只在構建的時候使用的參數 如果有ENV 那麼ENV的相同名字的值始終覆蓋arg的參數
VOLUME 定義外部可以掛載的數據捲 指定build的image那些目錄可以啟動的時候掛載到文件系統中 啟動容器的時候使用 -v 綁定 格式 VOLUME ["目錄"]
EXPOSE 暴露埠 定義容器運行的時候監聽的埠 啟動容器的使用-p來綁定暴露埠 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目錄 指定容器內部的工作目錄 如果沒有創建則自動創建 如果指定/ 使用的是絕對地址 如果不是/開頭那麼是在上一條workdir的路徑的相對路徑
USER 指定執行用戶 指定build或者啟動的時候 用戶 在RUN CMD ENTRYPONT執行的時候的用戶
HEALTHCHECK 健康檢查 指定監測當前容器的健康監測的命令 基本上沒用 因為很多時候 應用本身有健康監測機制
ONBUILD 觸發器 當存在ONBUILD關鍵字的鏡像作為基礎鏡像的時候 當執行FROM完成之後 會執行 ONBUILD的命令 但是不影響當前鏡像 用處也不怎麼大
STOPSIGNAL 發送信號量到宿主機 該STOPSIGNAL指令設置將發送到容器的系統調用信號以退出。
SHELL 指定執行腳本的shell 指定RUN CMD ENTRYPOINT 執行命令的時候 使用的shell

dockerfile案例

自定義centos鏡像

要求:

  • 預設登錄路徑為/usr
  • 可以使用vim

實現步驟:

  1. vi centos_dockerfile 在文件中輸入以下內容保存並退出:
FROM centos:7	# 定義父鏡像

MAINTAINER itheima<[email protected]>	# 定義作者信息

RUN yum install -y vim	# 執行安裝vim命令

WORKDIR /usr	# 定義預設的工作目錄

CMD /bin/bash	# 定義容器啟動執行的命令
  1. 通過centos_dockerfile構建鏡像:
docker bulid –f ./centos_dockerfile –t 鏡像名稱:版本 .

(註意最後還有個點,表示指定鏡像構建過程中的上下文環境的目錄) ,由於網路的原因安裝vim過程可能會失敗,多執行幾次該命令就好了。

部署Spring boot項目

需求:

  • 定義dockerfile發佈Spring boot項目

實現:

  1. 新建springboot_dockerfile文件,jar包和dockerfile文件需要在同一個目錄下
FROM java:8

MAINTAINER itheima<[email protected]>

ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar # 把springboot項目的jar包添加到鏡像中並換個簡短的名字app.jar

CMD java -jar app.jar # 運行jar包
  1. 通過springboot_dockerfile構建鏡像
docker build -f ./springboot_dockerfile -t app . # 新的鏡像名稱為app

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

-Advertisement-
Play Games
更多相關文章
  • 1、ThreadPool與Task? 線程池的優點:① 降低資源消耗。通過重覆利用已創建的線程降低線程創建和銷毀造成的消耗。 ② 提高響應速度。當任務到達時,任務可以不需要等到線程創建就能立即執行。 ③ 提高線程的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗系統資源,還會降低系統的穩定性, ...
  • WPF的BUG!彈出框的 自定義控制項里有Popup, Popup裡面放一個ListBox 在ListBox中的SelectionChange事件觸發關閉彈出框後,主窗體存在一定概率卡死(但點擊標題又能用的BUG) 步驟一: 新建個自定義WPF控制項UserControl Xaml代碼: <UserCo ...
  • 第一部分主要介紹了什麼是WebApi,以及它是乾什麼的,怎麼去調用後臺數據等等。。。 今天就繼續來學習一個新的知識。在上一篇文章中主要是介紹了一下如何根據根據Ajax去調用後臺增刪改查的數據。 那麼,難道我們只能針對一個表的數據進行增刪改查的數據嗎?比如我們要進行一個登陸操作,上傳照片等等。。。改怎 ...
  • 早期的版本一直用的是EF,但是EF一直有個讓人很不爽的東西需要mapping 實體對象;如果沒有映射的情況下連查詢都沒辦法; 所以後來開始使用dapper 但是dapper都是直接用的是sql,這個對查詢來說還好,但是新增,更新就很麻煩。 基於以上的原因就打算對dapper進行擴展,實現傳入實體對象 ...
  • 本文主要是試驗在順序進入等待 SemaphoreSlim 的任務是否會按照順序經過鎖執行 ...
  • Linux中的所有設備都必須掛載之後才能使用,即必須給它分配“盤符”(即掛載點,就是系統中的某個空目錄)給它才能使用,Windows系統中一般是自動分配盤符,所以掛載的概念在Windows中是沒有的,比如你插入了一個U盤,Windows就會自動給它一個盤符(名稱)來連接U盤,但是Linux中必須手動 ...
  • 幫助命令 man info help help man 英文原意:format and display the on line manual pages 功能:顯示聯機幫助手冊 語法:man 選項[ fk] 命令 info (和man命令不同的是,info命令的幫助信息是一套完整的資料) 語法:in ...
  • 編輯定時任務 */10 * * * * python /root/a.py >> /www/a.log 2>&1 # 每隔10分鐘,執行一次 30 * * * * python /root/a.py >> /www/a.log 2>&1 # 每小時, 第30分鐘執行 * 2 * * * * curl ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...