Setting Up Docker on Ubuntu
Docker is based on Linux, so we simply install the Docker engine on Ubuntu, and then we can use Docker on Ubuntu.
失くすものさえない今が強くなるチャンスよ
Docker is based on Linux, so we simply install the Docker engine on Ubuntu, and then we can use Docker on Ubuntu.
If we want to use Microservice architecture, we will build Nginx, Express, PostgreSQL images first, and then use Docker Compose to run Nginx, Express, PostgreSQL at once.
If we can run Express by Docker on the local machine, we can run Express by Docker on AWS EC2.
If we can run Vue by Docker on the local machine, we can run Vue by Docker on AWS EC2.
As long as we install Docker and Docker Compose on AWS EC2, we can run Node by Docker on AWS EC2.
Default Linux on AWS EC2 doesn’t provide Docker and Docker Compose. We have to install them manually.
若要使用 Microservice 架構,則會各自將 Vue 與 Express 包成 Docker Image,然後使用 Docker Compose 一次啟動 Vue 與 Express,此時 Express 會包在 Docker 內部網路,Vue 需使用 Nginx 的 Reverse Proxy 才能連上 Express。
若要使用 Microservice 架構,則會各自將 Vue 與 Express 包成 Docker Image,然後使用 Docker Compose 一次啟動 Vue 與 Express,此時 Express 會包在 Docker 內部網路,Vue 所需的 HTTP Service 與 Reverse Proxy 也使用 Express 提供。
在 Microservice 架構下,理論上 Nginx 與 Node 應該各自放在不同 Container 下,但有時 API 就是要控制 Nginx 或其他執行檔如 FFmpeg,此時將 Node 與 Nginx 包在同一個 Image 會更方便。
Nginx + FFmpeg 雖然能在 Ubuntu 下實現將 RSTP 轉成 HLS,若能包成 Docker Image,則其他電腦也能輕易使用此 Server,或者 Deploy 到 K8S。
GraphQL 本質只能算是 Middleware,因此也能如 Node + Express 般包進 Docker,本文將介紹使用 Babel 後 Apollo GraphQL 如何打包成 Docker Image。
Docker image 一般都沒處理 Time Zone,因此都維持 UTC 時間,若有特殊需求要手動調整 Time Zone。
Vue CLI 提供 yarn build
將 HTML / CSS / JS 編譯到 dist
目錄下,我們可再利用 Node + Express 當 Web Server,自行擴充 NPM Script,最後只要下 yarn docker
就可一鍵建立 Docker Image。
Node 本身已提供 HTTP 服務,可用來開發 API,可自行擴充 NPM Script,最後只要下 yarn docker
就可一鍵建立 Docker Image。
實務上 Vue 不見得都放在 Domain 的 Root-path,而是放在 Sub-path,在 Vue CLI、Nginx 與 docker-compose.yml
都必須特別設定。
yarn serve
只能測試 src
目錄下的 Vue,可使用 docker compose
配合 Nginx 快速測試 dist
目錄下的 Vue。
若只將 Vue Deploy 到單一 Domain 則比較單純,但若是 Domain 的 Sub-Path,則 Vue CLI 與 Nginx 都需要加上其他設定。
實務上會遇到有些 API 並沒有開放 CORS,或希望所有 API 統一由 Web Server 出去,此時可利用 Nginx 提供 Reverse Proxy,並自行擴充 NPM Script,最後只要下 yarn docker
就可一鍵建立 Docker Image。
Vue CLI 提供 yarn build
將 HTML / CSS / JS 編譯到 dist
目錄下,我們可利用 Nginx 當 Web Server,並自行擴充 NPM Script,最後只要下 yarn docker
就可一鍵建立 Docker Image。
要開發 Vue 最少要安裝 NVM、Node、Yarn、Vue CLI 四種工具,對於初學者可能是種負擔,可將這些工具打包成 Docker,只要啟動 Container 後,就可立即開發 Vue。
以前在 macOS 安裝 Ubuntu 都要先安裝 Parallel Desktop,然後再將 Ubuntu 安裝在 Parallel Desktop 上,安裝了 Docker Desktop for macOS 後,只要下載 Ubuntu 的 Docker Image,Ubuntu 就能以 Container 形式跑在 Docker 上。
Dockerfile 與 Docker Compose 是 Docker 兩個最重要的概念,也是初學者最容易卡關的地方,本文以 使用需求
為觀點解釋這兩者的差異。
由於 Docker for Windows 底層用的是 Hyper-V,這必須在 Windows 10 Professional 才提供,因為 Hyper-V 無法安裝在 Windows 10 Home,因此必須改走 Docker Toolbox 這條路。
由於 Docker 在本質上仍是 Linux,只是多個 Container 跑在同一個 Linux 上,因此若要將 Docker 跑在 Windows,仍然需要一個 VM 在背景跑 Linux。Docker Desktop for Windws 內建支援 Windows 的 Hyper-V,只會在 Hyper-V 內跑一個極小的 Linux,如此其他 Container 就能跑在 Docker 上。
Docker 算是近年來 Developer 與 DevOps 圈的大事,它改變了 Developer 的開發方式,也改變了 DevOps 佈署方式。
由於 Docker 在本質上仍是 Linux,只是多個 Container 跑在同一個 Linux 上,因此若要將 Docker 跑在 macOS,仍然需要一個 VM 在背景跑 Linux。Docker Desktop for Mac 讓我們不用安裝其他 VM,就可以將 Container 跑在 Docker 上。
若要在 macOS 使用 MongoDB,最簡單的方式就是使用 Docker。只要在 docker-compose.yml
描述好 MongoDB 設定, docker compose up -d
即可快速啟動。
實務上常在 docker-compose.yml
設定環境變數給 Container,Node 該如何讀取這些環境變數呢 ?
若要在 macOS 使用 MySQL,不需使用 Homebrew 安裝 macOS 版 MySQL 或安裝 MAMP,直接使用 Docker 執行 MySQL 即可。
若要在 macOS 使用 PostgreSQL,最簡單的方式就是使用 Docker。只要在 docker-compose.yml
描述好 PostgreSQL 設定, docker compose up -d
即可快速啟動。
雖然可以在 Cypress 的 Test 對 API 加以 Mock,但也可以使用 MSW 負責 Mock,Cypress 則完全負責 Test。
雖然可以在 Cypress 的 Test 對 API 加以 Mock,但也可以使用 MSW 負責 Mock,Cypress 則完全負責 Test。
若要在 CI 以 Cypress 測試 Vue,勢必面對 Cypress Dependency 與 Web Server 執行 Vue 問題,我們可透過 docker compose
同時執行 Cypress 與 Nginx 兩個 Container 進行測試。
Cypress 基於 Node 生態系,若使用 Express 後端或 Vue 前端,則使用 Yarn 安裝 Cypress 則易如反掌,但若不使用 JavaScript 開發,則可使用 Docker 版本的 Cypress 版本。
若想在 macOS 提供 RTSP Service 供開發測試用,可使用 Docker 安裝 LIVE555 Media Server 。
Node 的一大特色就是需依賴大量的 Package,但有些 Package 只是開發或編譯使用,如 Babel、Nodemon 只會安裝在 devDependencies
,像這類 Package 就不須安裝在發布的 Docker Image 內,可大幅降低 Image Size。
Redis 為常用的 In-Memory Key Value Database,適合用來當 Cache 輔助 Database,傳統會使用 Homebrew 安裝 macOS 版 Redis,本文介紹使用 Docker 執行 Redis。
若要使用 Microservice 架構,則會各自將 Vue 與 Node 包成 Docker Image,然後使用 Docker Compose 一次啟動 Vue 與 Node,此時 Node 會包在 Docker 內部網路,Vue 所需的 HTTP Service 與 Reverse Proxy 也能繼續由 Node 提供。
若要使用 Microservice 架構,則會各自將 Vue 與 Node 包成 Docker Image,然後使用 Docker Compose 一次啟動 Vue 與 Node,此時 Node 會包在 Docker 內部網路,Vue 需使用 Nginx 的 Reverse Proxy 才能連上 Node。