一、Compose

<1>Compose的应用程序模型

Compose依赖于YAML格式配置文件
Compose以单位管理应用程序的部署,分为一下3个步骤:项目,服务,容器

<2>Compose文件

默认的Compose文件时工作目录中的compose.yaml或compose.yml

二、任务

<1>5.1.1使用Compose部署Wordpress

  • 定义Compose项目
mkdir mywordpress
 cd mywordpress
 touch docker-compose.yaml
 vi docker-compoase.yaml

写入:

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:
      - "8080: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>5.1.2启动Compose应用程序

拉取所需镜像

docker-compose up -d

在这里插入图片描述

查看正在运行的容器

 docker ps

在这里插入图片描述

查看容器网络

docker network ls

在这里插入图片描述

查看当前卷

 docker volume ls

在这里插入图片描述

<3>在web浏览器中访问wordpress应用程序

  • 查看docker主机ip地址
ip addr
  • 在浏览器上访问该主机ip地址
http://主机ip地址:8080

在这里插入图片描述
在这里插入图片描述

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

<3>5.2.1 编写定义Compose文件

  • 编写一个compose.yaml文件,并使用Compose部署MySQL8.0服务器,文件内容:
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

  • 解析配置文件
docker compose config
  • 启动该服务
docker-compose up -d
  • 停止并清理该服务
docker compose down --volumes

<4>5.2.2 编写定义多个服务的Compose文件

  • 定义项目组件

创建Compose项目目录

mkdir django-pg && cd django-pg

在该目录下创建dockerfile并编辑

vi Dockerfile
# 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并编辑

touch requirements.txt
vi requirements.txt
Django>=3.0,<4.0
psycopg2>=2.8

在该目录下创建compose.yaml并编辑

touch compose.yaml
vi compose.yaml
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:

  • 创建Diango项目
    在django-pg目录下创建Django项目
docker compose run web django-admin startproject myexample .

  • 为Diango设置数据库连接
    编辑项目目录中的myexample/settings.py文件
    在文件开头新增import os
    并将其中的“DATABASES”定义修改如下:
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,
    }
}

  • 执行命令
docker compose up

三、谢谢观看

更多推荐