docker

什麼?你還沒用過 K8s ?

隨著容器化(containeriziation)的盛行,也越來越多企業導入 Kubernetes (或稱 K8s ),將各種容器化的服務運行在 K8s 叢集內,除了能讓部署(de

Posted on  Mar 30, 2023  by  Amo Chen  ‐ 1 min read

優化 Python Docker Image Size - 從 multi-stage builds 到 distroless

Docker multi-stage builds 教學 一文介紹以 Golang 作為範例,示範如何用 Docker multi-stage builds 的功能,優化編譯 Docker image 的過程,以減少 Docker Image 的 size 。

Multi-stage builds 並不局限於 Golang 這類的編譯(compiled)語言才能使用,腳本(script)語言也能夠運用類似的技巧降低 Docker image size, 例如 Javascript, Python 等開發生態系也都能夠使用。

只是腳本語言需透過直譯器(interpreter)執行的天性,因此其 Docker image 終究難以像 Golang 這類編譯語言所產生的 image 來得小,但這並不代表 Python, Javascript 這類的 Docker image 並不值得使用 multi-stage builds, 優化 Docker image size 仍可以為部署(deployment)速度帶來優勢,同時也能減少網路傳輸所需付出的費用成本。

本文的 multi-stage builds 以 Python 範例出發,一路介紹到如何使用 Google 所提供 distroless 進一步優化 Docker image size 與安全性。

Posted on  Jan 6, 2023  in  Docker , Python 程式設計 - 高階  by  Amo Chen  ‐ 5 min read

Docker Redis 架設教學

Redis 幾乎是現今大型網路應用(Application)都會使用的 in-memory 資料庫(database),可應用在實作快取(cache), message broker 等功能,目前絕大多數都使用 Redis 作為快取後端(backend), 該服務也經常會與 memcached 相提並論,不過 Redis 支援的功能更加多元,例如 Redis 提供多種不同的 data types (set, lists, hashes 等)、支援 transaction 等用法,如果運用得當,不僅可以簡化程式邏輯,也能帶來系統效率提升。

本文記錄如何在本機(localhost)環境以 Docker 架設 Redis 以供開發使用。

Posted on  Sep 14, 2022  in  用 Docker 架設服務  by  Amo Chen  ‐ 2 min read

Docker volumes 教學 - 從不熟到略懂

談到 Docker 容器的資料儲存(storage)問題,基本直覺就是透過掛載 Volumes, 不過 Docker 的 Volumes 其實有 3 種不同類型(types):

  1. Bind mount
  2. Volume
  3. tmpfs mount

大家常用的 -v <Host 路徑>:<Container 路徑> 參數其實就是使用 bind mount, 例如以下指令:

$ docker run -it -v /home/user:/data debian /bin/bash

簡而言之,使用 bind mount 的 volume 其實就是透過 host machine 的檔案系統(filesystem)提供容器儲存的能力。

雖然不清楚 volume 的類型,並不會對日常使用上造成任何問題,不過理解其差異仍有其必要,因爲這些差異很可能會在 production 環境上產生重大影響。

Posted on  Apr 1, 2022  in  Docker  by  Amo Chen  ‐ 5 min read

Docker CMD 與 ENTRYPOINT 說明詳解

寫 Dockerfile 時,經常搞不清楚 CMDENTRYPOINT 的差異,雖然兩者用途相當雷同,但還是特別查閱了一下 Docker 的官方文件,了解兩者的用途以及差別,並且透過實際的範例驗證後,記錄成本文。

Posted on  Dec 28, 2021  in  Docker  by  Amo Chen  ‐ 5 min read

Docker multi-stage builds 教學

Docker 映像檔(image)大小在 production 環境中也是相當重要的一環。

如果 Docker 映像檔太大,不僅佔用傳輸頻寬,也會拉長部署(deployment)的時間,因此如何優化 Docker 映像檔案大小是一門重要課題。

優化 Docker 映像檔大小有若干種方法,其中一種為 multi-stage build, 不過 Docker 官方文件所提供的 multi-stage builds 範例卻無法正常運作,本篇將修正該範例並實際體驗 multi-stage builds 的效果。

Last updated on  Dec 30, 2022  in  Docker  by  Amo Chen  ‐ 3 min read

用 Docker 架設 Elasticsearch 實驗環境

Elasticsearch 已經是現今開發者欲實現搜尋功能的一條捷徑,其易用的框架以及便利的 API(Application Programming Interface) 都十分易於開發與整合,所以許多網頁或 APP 應用中的搜尋功能其實背後都使用 Elasticsearch 進行建構,因此學會如何使用 Elasticsearch 也是相當值回票價的一件事。

本文將利用 Docker 建立 Elasticsearch 的實驗環境,給予初學者一個進入 Elasticsearch 世界的方便之門。

Posted on  Feb 21, 2021  in  用 Docker 架設服務  by  Amo Chen  ‐ 5 min read

Docker MongoDB 初體驗

MongoDB 是知名的 NoSQL 資料庫,也是現今後端資料庫很常見的解決方案之一。而 MEAN/MERN 架構中的 M 也指的是 MongoDB, 可見其重要程度不言而喻。

p.s. MEAN (MongoDB, express.js, Angular, Node.js)

p.s. MERN (MongoDB, express.js, React, Node.js)

且隨著現代應用的演化,同時使用傳統關聯式資料庫以及 NoSQL 資料庫也十分常見,如果想體驗/練習 NoSQL 資料庫,不妨就透過 Docker 實際操作看看。

Posted on  Jan 10, 2021  in  用 Docker 架設服務  by  Amo Chen  ‐ 3 min read