Docker Compose 小記 | Ignorance Notebook

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 文件都是放在了一個目錄下的 wordpressdb_data 中的,這樣對於遷移來說就非常方便了,當然,具體生產環境大家是怎麼用的,我不知道,不過 It works.