Docker 是一個廣泛應用於容器化應用程式的平台,它在當今的軟體開發和部署領域中變得極為流行。Docker 的主要優勢之一是它能夠輕鬆地建立、運行和管理容器,這些容器可以在不同的環境中具有一致性,並且可以隔離應用程式及其依賴項,從而實現更高的可移植性和可重複性。
而很多開源的 self-hosted 專案,都都提供了 Docker 容器的 image 來讓使用者方便架設,例如影音平台 jellyfin、放照片的 piwigo 等等,讓架設者能夠快速啟動這些應用程式,所以我認為這算是一個家用伺服器很常用的工具。
在這篇文章中,我們將簡要介紹 Docker,並提供一些基本的 Docker 指令和 Docker Compose 的示例,以幫助初學者了解 Docker 的基本使用方式,但不會深入。
Docker 本身的使用和原理相信有更多教學文有詳細的解說,所以這邊不會著墨太多,只會大概列出自己常用的幾個指令。
$ docker run -d [image-name]
這個指令會把指定的 image 變成 container 跑起來,並且跑在背景。
$ docker exec -it [container-name] bash
對指定的 container 執行 bash 指令,白話來說就是進入 container 並開一個 shell 的意思。
$ docker logs [container-name]
看指定 container 的 log,通常我還會加上 -f
參數,讓他可以持續更新。
比起 Docker 本身,我覺得 docker-compose 在架服務上面更有用。
它通過一個 YAML 文件中的設定來管理多個 container 的啟動、網路設定和儲存設定。對於需要多個 container 一起運作的專案,Docker Compose 可以更輕鬆地管理這些容器。
就算是單一 container,我也建議可以把他寫成檔案,然後用 docker-compose 來跑,這樣才能知道設定檔的樣子,而不是把全部的東西都寫在一行 docker run
指令裡面。
像是以下這個 jellyfin 的 docker-compose.yaml 就是一個很好的例子。
---
version: "2.1"
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional
volumes:
- /path/to/library:/config
- /path/to/tvseries:/data/tvshows
- /path/to/movies:/data/movies
ports:
- 8096:8096
- 8920:8920 #optional
- 7359:7359/udp #optional
- 1900:1900/udp #optional
restart: unless-stopped
這裡面有滿滿的參數,雖然只有一個 container,但寫成 docker run
指令會非常長,把它寫成 YAML,交給 docker-compose 去解析在管理上會更為輕鬆。
總之,Docker 是一個強大的容器化平台,用於簡化應用程式的部署和管理。Docker Compose 則進一步簡化了多容器應用程式的管理。無論是用於開發、測試還是生產環境,Docker 都是一個值得學習和使用的工具,它可以提高效率,確保應用程式的可移植性和一致性。