当前位置: 首页 > news >正文

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

一、使用Compose部署WordPress

1、定义Compose项目

  • 创建一个空的项目目录
mkdir mywordpress
  • 在该目录文件下创建并编辑compose.yaml文件
services:db:# 使用支持多架构(AMD64/ARM64)的MariaDB镜像(官方10.6版本默认支持多架构)image: mariadb:10.6command: --default-authentication-plugin=mysql_native_password  # 修正拼写错误(nysql→mysql,移除多余空格)volumes:- db_data:/var/lib/mysql  # 数据持久化卷restart: alwaysenvironment:- 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: alwaysenvironment:- 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应用程序

  • 拉取所需镜像
docker compose up -d

在这里插入图片描述

  • 查看正在运行的容器
docker ps

在这里插入图片描述
可见上图中显示,docker compose up -d命令启动了两个容器。分别名为mywordpress-wordpress-1和mywordpress-db-1

  • 查看当前容器网络
docker network ls

在这里插入图片描述
自动创建了名为mywordpress_default的桥接网络

  • 查看当前卷
docker volume ls

在这里插入图片描述
自动创建了两个相应的卷

3、在Web浏览器中访问WordPress应用程序

  • 查看docker主机ip地址
ip addr

在这里插入图片描述
可见,我的主机ip地址为192.168.58.131

  • 在浏览器上访问该主机ip地址

http://主机ip地址

即可进入以下界面:
在这里插入图片描述
语言选择“简体中文”,之后点击继续。
进入以下界面之后,完成填写点击安装即可。
在这里插入图片描述
安装完成
在这里插入图片描述
登录:
在这里插入图片描述

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

在这里插入图片描述

二、编写定义Compose文件

(1)编写定义单个服务的Compose文件

  • 编写一个compose.yaml文件,并使用Compose部署MySQL8.0服务器,文件内容:
services:mysql:  # 与services保持2个空格缩进(子项)image: mysql:8  # 与mysql保持2个空格缩进(孙项,共4个空格)container_name: mysql8ports:- "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=1environment:- MYSQL_ROOT_PASSWORD=rootvolumes:- /etc/localtime:/etc/localtime:ro- mysql8-data:/var/lib/mysqlvolumes:  volumes.mysql8-data: null
  • 解析配置文件
docker compose config
  • 启动该服务
docker compose up -d
  • 停止并清理服务
docker compose down --volumes

(2)编写定义多个服务的Compose文件

1、定义项目组件

  • 创建一个空的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文件
vi requirements.txt
Django>=3.0,<4.0
psycopg2>=2.8
  • 创建并编辑compose.yaml文件
vi compose.yaml
services:db:# 使用PostgreSQL官方镜像(适配Web应用的数据库需求)image: postgres:14container_name: postgres_dbvolumes:- 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项目
docker compose run web django-admin startproject myexample .

在这里插入图片描述

  • 查看项目目录
ls -l

在这里插入图片描述

3、为Django设置数据库连接

  • 编辑项目目录中的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

在这里插入图片描述

4、停止并清理服务

三、谢谢观看!

http://www.dtcms.com/a/597086.html

相关文章:

  • 蓝桥java数组切割
  • 高级编程培训 | 提升编程能力,助力职业发展的全方位学习路径
  • 【大模型训练】RL中权重更新 学习 reduce_tensor
  • 做网站优化有什么途径公司的企业邮箱怎么查询
  • ComfyUI+RX5700XT+Ubuntu25.04运行配置
  • 【Windows Docker】docker挂载解决IO速度慢的问题
  • 小练11.11
  • 怎么让网站无法自适应可信网站查询
  • 《国内可训练的主流大模型及相关平台》
  • MCP-stdio通信
  • 电商专业培训网站建设网页设计工作岗位及薪资
  • 全球文献智能引擎,突破知网局限
  • 邮件接码API实战教程与代码解析
  • 项目分享|告别枯燥命令行,构建终端用户界面的 TypeScript 库
  • [PowerShell 入门教程]第2天课后作业答案
  • Django中QuerySet 的惰性加载
  • 会议平台网站建设汇通网做期货的网站做期货的网站
  • 【计网】基于三层交换机和 RIP 协议的局域网组建
  • 【系统架构设计】用例技术:需求分析的实用工具
  • 网站设计需要什么软件python基础教程ppt
  • ffmpeg7.1.2-官方示例demo预览
  • 自己怎么优化我网站关键词潍坊尚呈网站建设公司
  • 数据科学每日总结--Day16--数据库
  • 从“高门槛”到“零门槛”:ArcGIS 和 GISBox如何破解中小用户GIS工具使用难题?
  • 152.当数据写入速度远大于读取时速度时控制信息的处理方法
  • 【MQ】集群部署和可靠性攻略
  • 数字上变频DUC与数字下变频DDC的介绍
  • 网站换代理wordpress首页链接哪里设置
  • 【Git】请帮忙解释一下“git reset”
  • Linux 二进制兼容性的糟糕现状(以及如何解决)