文章目录
- 优势 说明 环境一致 开发生产环境相同 快速部署 几分钟完成 易于迁移 打包整个环境 资源隔离 互不影响 版本控制 容器版本管理
-
- sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y sudo systemctl start docker sudo systemctl enable docker
- docker --version docker-compose --version sudo docker run hello-world
-
- mkdir wordpress-docker cd wordpress-docker mkdir -p mysql data html nginx ssl
- version: '3.8' services: mysql: image: mysql:8.0 container_name: wp_mysql restart: always environment: MYSQL_ROOT_PASSWORD: your_strong_password MYSQL_DATABASE: wordpress MYSQL_USER: wp_user MYSQL_PASSWORD: wp_password volumes: - ./mysql:/var/lib/mysql networks: - wp_network wordpress: image: wordpress:latest container_name: wp_wordpress depends_on: - mysql restart: always ports: - "8080:80" environment: WORDPRESS_DB_HOST: mysql:3306 WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: wp_password WORDPRESS_DB_NAME: wordpress volumes: - ./html:/var/www/html networks: - wp_network nginx: image: nginx:latest container_name: wp_nginx depends_on: - wordpress restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./html:/var/www/html - ./ssl:/etc/nginx/ssl networks: - wp_network networks: wp_network: driver: bridge
- 创建 nginx/conf.d/default.conf: server { listen 80; server_name example.com www.example.com; root /var/www/html; index index.php index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; client_max_body_size 100M; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass wordpress:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
- docker-compose up -d docker-compose ps docker-compose logs -f wordpress
-
- wp plugin list --format=json > plugins.json wp theme list --format=json > themes.json mysqldump -u root -p wordpress > wordpress.sql
- cp -r /var/www/html/* ./html/ docker exec -i wp_mysql mysql -u wp_user -p wp_password wordpress < wordpress.sql docker exec wp_wordpress chown -R www-data:www-data /var/www/html
- 问题 解决方案 权限错误 docker exec wp_wordpress chown -R www-data:www-data /var/www/html 连接失败 检查mysql容器网络 端口冲突 修改docker-compose.yml端口映射 通过Docker部署WordPress,环境配置简单,迁移方便,是现代化运维的最佳实践。
本文介绍使用Docker和Docker Compose容器化部署WordPress,实现快速迁移和环境一致的网站部署。
| 优势 | 说明 |
|---|---|
| 环境一致 | 开发生产环境相同 |
| 快速部署 | 几分钟完成 |
| 易于迁移 | 打包整个环境 |
| 资源隔离 | 互不影响 |
| 版本控制 | 容器版本管理 |
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
sudo systemctl start docker
sudo systemctl enable docker
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
sudo systemctl start docker
sudo systemctl enable docker
docker --version
docker-compose --version
sudo docker run hello-world
docker --version
docker-compose --version
sudo docker run hello-world
mkdir wordpress-docker
cd wordpress-docker
mkdir -p mysql data html nginx ssl
mkdir wordpress-docker
cd wordpress-docker
mkdir -p mysql data html nginx ssl
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: wp_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
volumes:
- ./mysql:/var/lib/mysql
networks:
- wp_network
wordpress:
image: wordpress:latest
container_name: wp_wordpress
depends_on:
- mysql
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./html:/var/www/html
networks:
- wp_network
nginx:
image: nginx:latest
container_name: wp_nginx
depends_on:
- wordpress
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/var/www/html
- ./ssl:/etc/nginx/ssl
networks:
- wp_network
networks:
wp_network:
driver: bridge
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: wp_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: wp_password
volumes:
- ./mysql:/var/lib/mysql
networks:
- wp_network
wordpress:
image: wordpress:latest
container_name: wp_wordpress
depends_on:
- mysql
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: wp_password
WORDPRESS_DB_NAME: wordpress
volumes:
- ./html:/var/www/html
networks:
- wp_network
nginx:
image: nginx:latest
container_name: wp_nginx
depends_on:
- wordpress
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./html:/var/www/html
- ./ssl:/etc/nginx/ssl
networks:
- wp_network
networks:
wp_network:
driver: bridge
创建 nginx/conf.d/default.conf:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/html;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 100M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
docker-compose up -d
docker-compose ps
docker-compose logs -f wordpress
docker-compose up -d
docker-compose ps
docker-compose logs -f wordpress
docker exec wp_mysql mysqldump -u wp_user -p wp_password wordpress > backup_$(date +%Y%m%d).sql
tar -czf html_backup_$(date +%Y%m%d).tar.gz html/
docker exec wp_mysql mysqldump -u wp_user -p wp_password wordpress > backup_$(date +%Y%m%d).sql
tar -czf html_backup_$(date +%Y%m%d).tar.gz html/
docker-compose pull
docker-compose up -d
docker-compose pull
docker-compose up -d
docker image prune -a
docker container prune
docker volume prune
docker image prune -a
docker container prune
docker volume prune
sudo apt install certbot python3-certbot-nginx
docker exec wp_nginx certbot --nginx -d example.com -d www.example.com
sudo apt install certbot python3-certbot-nginx
docker exec wp_nginx certbot --nginx -d example.com -d www.example.com
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ./ssl/key.pem \
-out ./ssl/cert.pem
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ./ssl/key.pem \
-out ./ssl/cert.pem
wp plugin list --format=json > plugins.json
wp theme list --format=json > themes.json
mysqldump -u root -p wordpress > wordpress.sql
wp plugin list --format=json > plugins.json
wp theme list --format=json > themes.json
mysqldump -u root -p wordpress > wordpress.sql
cp -r /var/www/html/* ./html/
docker exec -i wp_mysql mysql -u wp_user -p wp_password wordpress < wordpress.sql
docker exec wp_wordpress chown -R www-data:www-data /var/www/html
cp -r /var/www/html/* ./html/
docker exec -i wp_mysql mysql -u wp_user -p wp_password wordpress < wordpress.sql
docker exec wp_wordpress chown -R www-data:www-data /var/www/html
| 问题 | 解决方案 |
|---|---|
| 权限错误 | docker exec wp_wordpress chown -R www-data:www-data /var/www/html |
| 连接失败 | 检查mysql容器网络 |
| 端口冲突 | 修改docker-compose.yml端口映射 |
通过Docker部署WordPress,环境配置简单,迁移方便,是现代化运维的最佳实践。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)