0%

Let Wordpress into an Docker image

Holding applications with Docker
Docker 是現在不可或缺的工具之一,容器化能有效更方便快速佈署
撇除掉 CICD 環節,光基本操作就能省事很多

以下會以 WordPress 的案例進行簡單的示範

流程

  1. 將 WordPress 放進 Docker 之中
  2. 針對 Database 進行備份

將 WordPress 放進 Docker 之中

這邊可以使用 Docker Composer 來直接建立一個 WordPress
這邊參考 WordPres Docker compose example1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
services:
db:
image: mariadb:10.6.4-focal
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- ./db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
volumes:
- ./themes:/var/www/html/wp-content/themes
- ./plugins:/var/www/html/wp-content/plugins
- ./uploads:/var/www/html/wp-content/uploads
- ./languages:/var/www/html/wp-content/languages
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress

這邊額外添加了 themes plugins languages 等的設定,
以便於往後 themes 與 plugins 的設定

而 db_data 與 uploads 則是因為常駐儲存檔案

1
docker-compose up -d

自動進行 DB 備份,但是針對 Docker 去作

自動備份的部分,通常本地會透過 Cronjob 的方式來進行
參考 stackoverflow2 的範例

1
0 4 1,8,15,21,28 * * DATE=`date +%y-%m-%d`; mysqldump -u [USER] -p[PASSWORD] test_db | gzip > dbname-$DATE.sql.gz

不過,因為我們這邊要改用 Docker 的方式進行
故可以改用這種方式進行備份,有人也有範例3 怎麼透過 Docker 匯出 SQL

1
0 4 1,8,15,21,28 * * DATE=`date +%y-%m-%d`; docker exec [CONTAINER] //usr/bin/mysqldump -u [USER] -p[PASSWORD] --routines --triggers test_db | gzip > dbname-$DATE.sql.gz

除此之外,我們可以改用 Shell Script 的方式進行
新增一個 Script 叫作 backup.sh

1
2
3
4
5
6
7
8
#!/bin/bash
BACKUP_NAME="backup"
BACKUP_FILES="./db_data ./uploads"
if [[ ! -f "${BACKUP_FILE}" ]]; then
tar -g snapshot -zcf "${BACKUP_NAME}.tar.gz" $BACKUP_FILES
else
tar -g snapshot -zcf "${BACKUP_NAME}-$(date +%Y-%m-%d).tar.gz" $BACKUP_FILES
fi
1
chmod +x backup.sh
1
0 4 1,8,15,21,28 * * /usr/bin/bash /opt/scripts/backup.sh

參考