【Docker】定义和运行多容器应用程序

一、使用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地址

http://主机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

4、停止并清理服务

三、谢谢观看!

相关推荐
北京耐用通信12 分钟前
三步打通数据壁垒:耐达讯自动化Ethernet/IP转CC-Link方案全解析。建议点赞收藏
运维·tcp/ip·自动化
羊村积极分子懒羊羊15 分钟前
nginx的https的搭建
运维·nginx·https
你的坚持终将美好,29 分钟前
Docker 中一起启动多个容器脚本
docker·容器
像风一样自由202031 分钟前
Docker 与 Docker Compose:从零开始的容器化之旅
运维·docker·容器
血小溅33 分钟前
Springboot项目Docker 多平台构建指南
后端·docker
家家小迷弟33 分钟前
docker容器内部安装python和numpy的方法
python·docker·numpy
北珣.35 分钟前
docker镜像操作
运维·docker·容器·镜像
Evan芙36 分钟前
用fping编写脚本扫描10.0.0.0/24网段在线主机
linux·运维·网络·excel
SongYuLong的博客1 小时前
ARM Linux 交叉编译工具链(toolchain)
linux·运维·arm开发
云计算老刘1 小时前
Shell三剑客 : 2. sed 使用手册
linux·运维·服务器