Docker Compose 小記 #
第一次接觸 Docker 就是從寫 docker-compose
開始的,因爲嫌每次開啓動手動 docker run xxx
太麻煩,所以就希望有一個一次 Write Once ,Crash Everywhere 的方法可以實現,所幸看到了 Compose ,就一直這麼用着了。
對於相關的程序的話,由於有了太多的手動維護服務器(然後各種刪庫跑路)的經驗,我對於一個正在運行的的 Web App 而言,希望的部署方式有如下:
- 直接部署在服務器上(類似部署 Wordpress 時手動安裝 Wordpress, PHP-FPM, MySQL 和 nginx),這樣的後果就是維護(尤其是遷移)起來非常費力,安裝起來非常費力,似乎唯一的好處(可能也是錯覺)就是在程序爆炸的時候似乎可以對於程序有一些更加多一點的控制。
- Docker 部署,然後暴露一個端口,前端由 nginx 來做反向代理,這樣的好處就是 Write Once,
docker-compose up -d
&& Crash Everywhere,對於遷移起來也非常方便,直接整個文件夾壓縮後 rsync 出去就好了。
出於上面的第二個需求,我寫的 Compose 文件中所有的持久化內容(數據庫,文件)都是放在同一個文件夾中的,以本博客正在使用的 Docker 的 docker-compose.yml
爲例:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
volumes:
- ./wordpress:/var/www/html
ports:
- 2400:80
environment:
WORDPRESS\_DB\_HOST: db
WORDPRESS\_DB\_USER: exampleuser
WORDPRESS\_DB\_PASSWORD: examplepass
WORDPRESS\_DB\_NAME: exampledb
db:
image: mysql:5.7
restart: always
volumes:
- ./db\_data:/var/lib/mysql
environment:
MYSQL\_DATABASE: exampledb
MYSQL\_USER: exampleuser
MYSQL\_PASSWORD: examplepass
MYSQL\_RANDOM\_ROOT\_PASSWORD: '1'
我們可以發現,數據庫和 Wordpress 文件都是放在了一個目錄下的 wordpress
和 db_data
中的,這樣對於遷移來說就非常方便了,當然,具體生產環境大家是怎麼用的,我不知道,不過 It works.