iT邦幫忙

2023 iThome 鐵人賽

0
Software Development

救救我啊我救我!CRUD 工程師的惡補日記系列 第 31

【Docker】基本介紹與安裝 Docker Desktop

  • 分享至 

  • xImage
  •  

先前筆者因完成鐵人賽,得到了參加 2023 年 MWC 的免費資格。其中特別喜歡 Docker 工作坊,因為這是自己不熟悉,但在業界卻是常見的工具。接下來的幾篇文章,是想整理出後續的學習結果來分享。

此篇亦轉載到個人部落格


一、Docker 介紹

讀者是否有安裝或運行軟體時,對於準備環境感到麻煩的經驗?例如前端程式可能需要 Node.js 環境;而後端的部份則需要 Java 環境。別忘了還有資料庫(如 MySQL、MongoDB、Redis),甚至有全文檢索引擎(如 Elasticsearch)等。

在電腦上逐一安裝軟體,不論是在工程師本地的 Windows / MacOS 電腦,還是開發中測試、正式測試或生產環境的 Linux 伺服器,總令人覺得麻煩。話雖如此,但這只是當有新同事報到、更換電腦,或是增設伺服器時,所做的一次性工作,並不是常常在處理的事情。

比較令人尷尬的,是真的在做時,遇到這些軟體在 A 電腦可以跑,在 B 電腦卻不順利的情形。更糟的情況是,工程師交付的程式碼,起初測試並無問題,卻在部署到生產環境才發生因環境而導致的錯誤,那就頭大了!

使用 Docker,能簡化從下載軟體到運行起來的過程,達到輕鬆部署的效果。且每個軟體皆有自己專屬的執行環境,因此就算換到另一台電腦,只要有裝 Docker,都能正常地運行。

二、映像檔與容器介紹

(一)概念

Docker 會將軟體程式以及運行時所需要的環境,打包在一個叫「映像檔」(image)的東西裡。軟體程式就像是前端 React 的網頁專案,或是後端 Spring Boot 的 JAR 檔。而對應的環境則為 Node.js 或 Java。讀者姑且可將映像檔想像成安裝程式。

使用映像檔,可建立出「容器」(container)。容器是軟體所運行的地方,且與原本的電腦環境是隔離的。舉例來說,假設我們在電腦上安裝了 Java 8,則在容器 A 中仍可運行要求 Java 11 的軟體。當然也能在容器 B 準備 Java 17 環境,並讓它們都在同一台電腦上跑。

看到這裡,讀者或許有個想法:「那一開始便在電腦上安裝 Java 17,這樣所有軟體不就能直接在電腦上運行了嗎?」關於這問題,請假想有軟體是使用低版本的 Java 8 語言所寫成,但有些用到的 library 到了較高版本的 Java 11 或 17,已經被棄用(deprecated)甚至移除了,那麼該軟體可能是無法運行。此為容器環境彼此隔離的好處!

(二)情境舉例

讓筆者以「露營車」為例子,來比喻映像檔與容器之間的關係。映像檔就像是露營車的設計圖(定義),裡面包含現有的床鋪、瓦斯爐、桌椅等設備。當我們做行前規劃時(製作映像檔),可能還會添加自己的寢具、廚具、食物等資源。

而容器就像露營車的實體,遊客則為運行的軟體。不論是在北部還是南部、平地還是山上的場地,只要設備與資源齊全,人就能很好地住在露營車裡。且 A 遊客的露營車環境,不會影響到 B 遊客。

若 Docker 容器和裡面的軟體能正常跑,則在其他電腦,理應也能好好地運行。這項特色被稱為「Build once, run anywhere」。

三、安裝 Docker Desktop

Docker 這項工具所採用的技術,是以 Linux 為基礎。因此使用 Windows / MacOS 電腦的我們,應該先安裝「Docker Desktop」,它也會額外在電腦上安裝 Linux 系統,而容器將在這個 Linux 上運行。

請在這裡下載 Docker Desktop:
https://www.docker.com/products/docker-desktop/

安裝後,可在命令提示字元執行 docker --version,確認是否偵測到 docker 指令,以及安裝的版本。

Docker version 24.0.6, build ed223bc

以下是 Docker Desktop 的映像檔清單,筆者曾經下載過數個映像檔,畫面供讀者參考。
docker-image-list-demo.png
https://ithelp.ithome.com.tw/upload/images/20231128/201311076pSYVu0udl.png

筆者的電腦是 Windows 系統,到這邊為止,就算是完成 Docker 的安裝。下一篇文章開始,會開始介紹映像檔與容器的操作。


今日文章到此結束!
最後推廣一下自己的部落格,我是「新手工程師的程式教室」的作者,請多指教/images/emoticon/emoticon41.gif


上一篇
【Elasticsearch】使用 Java API Client 完成簡易搜尋框架(下)+ 完賽小感言
下一篇
【Docker】映像檔與容器的操作
系列文
救救我啊我救我!CRUD 工程師的惡補日記50
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言