主頁 > 後端開發 > docker(一):Develop faster. Run anywhere.

docker(一):Develop faster. Run anywhere.

2023-05-12 07:51:36 後端開發

前言

在進行微服務部署時,首先需要進行部署環境的搭建,目前,Docker 已經成為了微服務部署的主流解決方案之一,Docker 可以幫助我們更快地打包、測驗以及部署應用程式,從而縮短從撰寫到部署運行代碼的周期,

在本文中,我們將對 Docker 進行初步的講解,并介紹如何將映像生成并作為容器運行、使用 Docker Hub 共享映像,具體的功能點如下:

  1. 將映像生成并作為容器運行,
  2. 使用 Docker Hub 共享映像,
  3. 使用 Docker Compose 運行應用程式,

基本概念

Docker 是一個開源的應用容器引擎,可以讓開發者將應用程式打包成一個容器,并通過容器來部署、運行和管理應用程式,Docker 的核心概念包括容器和鏡像,

容器:容器是鏡像的可運行實體,可以通過 Docker API 或 CLI 來創建、啟動、停止、移動或洗掉容器,容器提供了一種輕量級、可移植的解決方案,使得應用程式可以在不同的環境中運行,

鏡像:鏡像是一個只讀模板,包含了創建 Docker 容器的說明,沒有鏡像,就無法創建容器,Docker 鏡像可以通過 Dockerfile 檔案來創建,也可以從公有倉庫中下載使用,公有倉庫中包含了大量的鏡像,可以供開發者快速使用,

docker架構:Docker 的架構包括 Docker 客戶端、Docker 服務器和 Docker 鏡像倉庫,Docker 客戶端是一個命令列工具,可以通過它來與 Docker 服務器進行通信,Docker 服務器是一個后臺行程,負責管理容器和鏡像,Docker 鏡像倉庫是一個中央存盤庫,可以用來存盤和分享 Docker 鏡像,

image

這里不在贅述基礎知識了,如果需要可以自行去docker官網進行查看;

安裝

windows:window安裝地址,直接按照安裝提示,一直下一步即可安裝成功,

linux:如果想要簡單快速直接安裝寶塔面板,命令列安裝有些復雜,需要根據不同情況安裝,這里是博主的安裝流程:

  1. 使用 root 權限登錄 Centos,確保 yum 包更新到最新,yum ‐y update
  2. 安裝需要的軟體包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的,yum install ‐y yum‐utils device‐mapper‐persistent‐data lvm2
  3. 設定yum源,并更新 yum 的包索引 yum‐config‐manager ‐‐add‐repo http://mirrors.aliyun.com/docker‐ce/linux/centos/docker‐ce.repo yum makecache fast
  4. 可以查看所有倉庫中所有docker版本,并選擇特定版本安裝 yum list docker‐ce ‐‐showduplicates | sort ‐r
  5. 安裝docker yum ‐y install docker‐ce‐18.03.1.ce # 這是指定版本安裝 yum ‐y install docker‐ce # 這是安裝最新穩定版
  6. 啟動并加入開機啟動 systemctl start docker systemctl enable docker
  7. 驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了) docker version
  8. 卸載docker yum ‐y remove docker‐engine

創建鏡像

公有鏡像

Docker Hub 是 Docker 官方提供的公有鏡像倉庫,包含大量的 Docker 鏡像,供開發者使用,與 Maven 倉庫類似,開發者可以在 Docker Hub 上搜索并下載需要的鏡像,從而快速搭建開發環境,以java為例,命令列模式:

  1. docker search java
  2. 執行完 docker pull 命令后,Docker 會從 Docker Hub 中的 Java 倉庫下載最新版本的 Java 鏡像,如果需要下載指定版本的鏡像,則可以在鏡像名后面加上冒號并指定版本號,例如: docker pull java:8
  3. docker images 列出鏡像
  4. docker rmi java 洗掉鏡像

本地鏡像

使用Dockerfile構建Docker鏡像,其中的 FROM、 RUN都是 Dockerfile的指令, FROM 指令用于指定基礎鏡像,即構建新鏡像所依賴的鏡像,基礎鏡像包含了作業系統、軟體環境等基本組件,通過 FROM 指令,可以使用已有的鏡像作為基礎鏡像,并在其之上添加新的軟體包或配置,RUN 指令用于在鏡像中執行命令,通過 RUN 指令,可以在基礎鏡像之上安裝軟體包、配置環境變數等,

FROM  java:8
# 復制生成的 jar 檔案到容器中
COPY --from=0 /app/bootstrap/target/*.jar /app/app.jar
# 設定作業目錄
WORKDIR /app
# 暴露埠
EXPOSE 3112
# 設定時區為 Asia/Shanghai
ENV TZ=Asia/Shanghai
ENV LANG=C.UTF-8

# 設定容器的時區
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update
RUN apt-get install -y fontconfig

# 定義啟動命令
ENTRYPOINT ["sh","-c","java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -jar app.jar"]

然后在Dockerfile所在路徑執行以下命令構建鏡像:-t指定鏡像名字,命令最后的點(.)表示Dockerfile檔案所在路徑

docker build ‐t app .

共享鏡像

Docker Hub 是 Docker 官方提供的公共鏡像倉庫,提供了大量的公共鏡像供開發者使用,此外,Docker 還提供了一個私有鏡像倉庫,稱為 Docker Registry,可以用于存盤和分享私有鏡像,

如果開發者需要在自己的專案中使用 Docker 鏡像,可以將自己的鏡像上傳到 Docker Registry 上,然后在其他機器或環境中使用 Docker 命令來下載和運行,

請注意,Docker Hub 只提供一個免費的私有倉庫,如果需要使用多個私有倉庫,則需要購買額外的訂閱服務,

docker倉庫地址:hub.docker先在網頁端注冊,并記住賬號密碼

image

然后再本地使用docker login命令進行登錄,這樣我們的服務器也會進行登錄到私有庫,否則你將push失敗,

登錄成功后,就可以將本地的鏡像上傳到 Docker Registry 中,可以使用 docker tag 命令來為鏡像打上標簽,然后使用 docker push 命令來上傳鏡像,例如:

docker tag app 【你的賬號名】/app

修改tag成功后即可推送image到遠程倉庫:docker push 【你的賬號名】/app

運行鏡像

使用以下docker run命令即可新建并啟動一個容器,該命令是最常用的命令,它有很多選項,下面將列舉一些常用的選項,

  1. -d選項:表示后臺運行
  2. -P選項:隨機埠映射
  3. -p選項:指定埠映射,有以下四種格式:-- ip:hostPort:containerPort、-- ip::containerPort、-- hostPort:containerPort、-- containerPort
  4. --net選項:指定網路模式,該選項有以下可選引數:--net=bridge:默認選項,表示連接到默認的網橋、--net=host:容器使用宿主機的網路、--net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網路配置、--net=none:不配置該容器的網路,用戶可自定義網路配置,

docker run ‐d ‐p 3112:3112 app這樣就能啟動一個容器,需要注意的是,使用 docker run命令創建容器時,會先檢查本地是否存在指定鏡像,如果本地不存在該名稱的鏡像, Docker就會自動從 Docker Hub下載鏡像并啟動一個 Docker容器,

結語

通過使用 Docker,開發者可以實作快速、可重復的應用程式部署和管理,提高應用程式的可移植性和可擴展性,Docker 的優勢在于它可以將應用程式和依賴項打包成一個容器,從而避免了因環境差異而導致的應用程式無法運行的問題,此外,Docker 還提供了一套完整的工具鏈,包括 Docker Compose、Docker Swarm 等,可以幫助開發者更方便地管理多個容器和多個主機,

Docker Compose 是一個用于定義和運行多個容器的工具,可以將多個容器組合為一個應用程式,并通過一個組態檔來管理這些容器,在使用 Docker Compose 之前,需要先撰寫一個 docker-compose.yml 檔案,該檔案包含了所需的容器和配置資訊,然后,可以使用 docker-compose 命令來創建、啟動、停止和洗掉多個容器,下一節我們將詳細介紹 Docker Compose 技術的原理和使用方法,

公眾號 ps:以上內容,純屬個人見解,有任何問題下方評論!關注博主公眾號,原始碼專題、面試精選、AI最新擴展等你來看!原創撰寫不易,轉載請說明出處!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/552186.html

標籤:Java

上一篇:實作高并發秒殺的 7 種方式,寫的太好了,建議收藏!!

下一篇:返回列表

標籤雲
其他(158833) Python(38125) JavaScript(25413) Java(18030) C(15226) 區塊鏈(8264) C#(7972) AI(7469) 爪哇(7425) MySQL(7177) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5338) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4570) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1972) 功能(1967) Web開發(1951) HtmlCss(1935) python-3.x(1918) C++(1915) 弹簧靴(1913) xml(1889) PostgreSQL(1875) .NETCore(1860) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • docker(一):Develop faster. Run anywhere.

    Docker 是一個開源的應用容器引擎,可以讓開發者將應用程式打包成一個容器,并通過容器來部署、運行和管理應用程式。Docker 的核心概念包括容器和鏡像。容器是鏡像的可運行實體,可以通過 Docker API 或 CLI 來創建、啟動、停止、移動或洗掉容器。鏡像是一個只讀模板,包含了創建 Dock... ......

    uj5u.com 2023-05-12 07:51:36 more
  • 實作高并發秒殺的 7 種方式,寫的太好了,建議收藏!!

    1.引言 高并發場景在現場的日常作業中很常見,特別是在互聯網公司中,這篇文章就來通過秒殺商品來模擬高并發的場景。文章末尾會附上文章的所有代碼、腳本和測驗用例。 本文環境: SpringBoot 2.5.7 + MySQL 8.0 X + MybatisPlus + Swagger2.9.2 模擬工具 ......

    uj5u.com 2023-05-12 07:40:17 more
  • JScrollPane

    JScrollPane 組件() 功能介紹: 當容器的顯示區域不足以同時顯示所有組件的時候,滾動面版JScrollPane(后省略為JS)可以通過滾動的方式將組件的內容展示出來。 使用方法: JS通過將一些組件先添加到JPanel中,再將JPanel添加到JS上,而JTextArea、JList、J ......

    uj5u.com 2023-05-12 07:30:02 more
  • 6000+字講透ElasticSearch 索引設計

    ElasticSearch 索引設計 在MySQL中資料庫設計非常重要,同樣在ES中資料庫設計也是非常重要的 概述 我們創建索引就像創建表結構一樣,必須非常慎重的,索引如果創建不好后面會出現各種各樣的問題 索引設計的重要性 索引創建后,索引的分片只能通過_split和_shrink介面對其進行成倍的 ......

    uj5u.com 2023-05-12 07:29:48 more
  • spring-transaction原始碼分析(3)Transactional事務失效原因

    問題概述 在Transactional方法中使用this方式呼叫另一個Transactional方法時,攔截器無法攔截到被呼叫方法,嚴重時會使事務失效。 類似以下代碼: @Transactional public void insertBlogList(List<Blog> blogList) { ......

    uj5u.com 2023-05-12 07:29:33 more
  • 用go設計開發一個自己的輕量級登錄庫/框架吧(專案維護篇)

    用go設計開發一個自己的輕量級登錄庫/框架吧(專案維護篇) 本篇將開始講講開發庫/框架的最開始階段,也就是搭建一個專案 原始碼:weloe/token-go: a light login library (github.com) 專案結構 專案結構,不是上一篇所說的代碼架構,而是分包,明確的分包更有助 ......

    uj5u.com 2023-05-12 07:29:13 more
  • Go語言(Golang)資料庫編程

    Go 資料庫編程 一、連接資料庫 準備連接到資料庫 要想連接到 SQL 資料庫,首先需要加載目標資料庫的驅動,驅動里面包含著于該資料庫互動的邏輯。 sql.Open() 資料庫驅動的名稱 資料源名稱 得到一個指向 sql.DB 這個 struct 的指標 sql.DB 是用來操作資料庫的,它代表了0 ......

    uj5u.com 2023-05-12 07:29:07 more
  • openAI發布v0.2.0了

    時隔20天,OpenAI從v0.0.1升級到了v0.2.0。與v0.0.1版相比,v0.2.0版主要做了以下改動: 把cmd目錄下微信公眾號的相關服務遷移到了這里 完善了cmd下的測驗服務,針對openAI庫里實作的各個介面都提供了回應的呼叫介面,服務運行后可以通過postman進行測驗 完成了Fi ......

    uj5u.com 2023-05-12 07:29:01 more
  • Linux網路編程:socket實作client/server通信

    一、問題引入 閱讀UNIX網路編程 卷1:套接字聯網API 第3版的前4個章節,覺得有必要對書籍上的原始碼案例進行復現,并推敲TCP的C/S通信程序。 二、解決程序 2-1 server #include <sys/types.h> #include <sys/socket.h> #include < ......

    uj5u.com 2023-05-12 07:23:18 more
  • 高效c語言2物件、函式和型別

    本章中,你將學習物件、函式和型別。我們將研究如何宣告變數(有識別符號的物件)和函式,獲取物件的地址,并對這些物件指標的解參考。你已經看到了C語言程式員可用的一些型別, C語言中的型別不是物件就是函式。 物件、函式、型別和指標 物件是你可以表示數值的存盤。準確地說,C標準(ISO/IEC 9899:20 ......

    uj5u.com 2023-05-12 07:23:01 more