一、使用Compose部署WordPress
1、定义Compose项目
- 创建一个空的项目目录
powershell
mkdir mywordpress
- 在该目录文件下创建并编辑compose.yaml文件
powershell
services:
db:
# 使用支持多架构(AMD64/ARM64)的MariaDB镜像(官方10.6版本默认支持多架构)
image: mariadb:10.6
command: --default-authentication-plugin=mysql_native_password # 修正拼写错误(nysql→mysql,移除多余空格)
volumes:
- db_data:/var/lib/mysql # 数据持久化卷
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress # 根密码
- MYSQL_DATABASE=wordpress # 数据库名(修正变量名:MYSQL DATABASE→MYSQL_DATABASE)
- MYSQL_USER=wordpress # 数据库用户
- MYSQL_PASSWORD=wordpress # 数据库密码
expose:
- 3306 # 内部暴露MySQL端口
- 33060 # MySQL X协议端口
wordpress:
image: wordpress:latest # WordPress官方镜像默认支持多架构
volumes:
- wp_data:/var/www/html # WordPress数据卷
ports:
- "80:80" # 映射主机80端口到容器
restart: always
environment:
- WORDPRESS_DB_HOST=db # 数据库主机(关联db服务)
- WORDPRESS_DB_USER=wordpress # 数据库用户(修正变量名:WORDPRESS DB USER→WORDPRESS_DB_USER)
- WORDPRESS_DB_PASSWORD=wordpress # 数据库密码(修正变量名:WORDPRESS DB PASSWORD→WORDPRESS_DB_PASSWORD)
- WORDPRESS_DB_NAME=wordpress # 数据库名(修正变量名:WORDPRESS DB NAME→WORDPRESS
volumes:
db_data:
wp_data:
2、启动Compose应用程序
- 拉取所需镜像
powershell
docker compose up -d

- 查看正在运行的容器
powershell
docker ps

可见上图中显示,docker compose up -d命令启动了两个容器。分别名为mywordpress-wordpress-1和mywordpress-db-1
- 查看当前容器网络
powershell
docker network ls

自动创建了名为mywordpress_default的桥接网络
- 查看当前卷
powershell
docker volume ls

自动创建了两个相应的卷
3、在Web浏览器中访问WordPress应用程序
- 查看docker主机ip地址
powershell
ip addr

可见,我的主机ip地址为192.168.58.131
- 在浏览器上访问该主机ip地址
即可进入以下界面:

语言选择"简体中文",之后点击继续。
进入以下界面之后,完成填写点击安装即可。

安装完成

登录:

- 停止和清理Compose应用程序
powershell
docker compose down --volumes

二、编写定义Compose文件
(1)编写定义单个服务的Compose文件
- 编写一个compose.yaml文件,并使用Compose部署MySQL8.0服务器,文件内容:
powershell
services:
mysql: # 与services保持2个空格缩进(子项)
image: mysql:8 # 与mysql保持2个空格缩进(孙项,共4个空格)
container_name: mysql8
ports:
- "3306:3306" # 列表项与ports保持2个空格缩进(共6个空格)
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- /etc/localtime:/etc/localtime:ro
- mysql8-data:/var/lib/mysql
volumes:
volumes.mysql8-data: null
- 解析配置文件
powershell
docker compose config
- 启动该服务
powershell
docker compose up -d
- 停止并清理服务
powershell
docker compose down --volumes
(2)编写定义多个服务的Compose文件
1、定义项目组件
- 创建一个空的Compose项目文件
powershell
mkdir django-pg && cd django-pg
- 在该文件下创建并编辑Dockerfile
powershell
vi Dockerfile
powershell
# syntax=docker/dockerfile:1
# 从Python 3.10官方镜像开始构建(基于Debian,稳定且包含常用工具)
FROM python:3.10
# 设置环境变量:
# - 防止Python写入.pyc文件(减少镜像体积)
# - 确保Python输出实时打印到控制台(便于容器日志查看)
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 在镜像中指定工作目录(后续命令默认在此目录执行)
WORKDIR /code
# 先复制依赖清单(利用Docker层缓存,避免每次代码变动都重新安装依赖)
COPY requirements.txt /code/
# 安装Python依赖:
# - --no-cache-dir:不缓存安装包,减小镜像体积
# - 可选:添加国内镜像源加速安装(如阿里云:-i https://mirrors.aliyun.com/pypi/simple/)
RUN pip install --no-cache-dir -r requirements.txt
# 复制当前目录所有文件到工作目录
COPY . /code/
- 创建并编辑requirements.txt文件
powershell
vi requirements.txt
powershell
Django>=3.0,<4.0
psycopg2>=2.8
- 创建并编辑compose.yaml文件
powershell
vi compose.yaml
powershell
services:
db:
# 使用PostgreSQL官方镜像(适配Web应用的数据库需求)
image: postgres:14
container_name: postgres_db
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
# PostgreSQL环境变量(修正命名规范,替换乱码)
- POSTGRES_DB=postgres # 数据库名
- POSTGRES_USER=postgres # 用户名
- POSTGRES_PASSWORD=postgres # 密码(生产环境需修改为强密码)
restart: always # 容器异常时自动重启
web:
build: . # 从当前目录的Dockerfile构建Web应用镜像
command: python manage.py runserver 0.0.0.0:8000 # 启动Web服务(修正空格)
volumes:
- .:/code # 本地代码挂载到容器(开发时实时同步代码)
ports:
- "8000:8000" # 端口映射(主机:容器,修正列表格式)
environment:
# Web应用连接数据库的环境变量(需与db服务的配置一致)
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- DB_HOST=db # 数据库服务名(与db服务名一致)
depends_on:
- db # 确保db服务启动后再启动web(修正拼写:depends on→depends_on)
restart: always
# 定义持久化卷(存储数据库数据)
volumes:
postgres_data:

2、创建Django项目
- 在django-pg目录下创建Django项目
powershell
docker compose run web django-admin startproject myexample .

- 查看项目目录
powershell
ls -l

3、为Django设置数据库连接
- 编辑项目目录中的myexample/settings.py文件
在文件开头新增import os
并将其中的"DATABASES"定义修改如下:
powershell
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('POSTGRES_NAME'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': 'db',
'PORT': 5432,
}
}
- 执行命令
cpp
docker compose up
