ubuntu中使用使用Docker-Compose管理MySQL、Apache、PHP容器

在Ubuntu中管理由Docker运行的MySQL、Apache、PHP是一项常见任务。核心管理原则是不直接管理Docker镜像,而是管理由这些镜像创建的容器,并通过Docker-Compose统一编排。 本文较详细的介绍了安装、配置基于MySQL、Apache、PHP的LAMP栈的方法与步骤。

一、安装Docker与docker-compose

1、安装docker

  • ubuntu中docker的安装方法在半壶清水的另一篇文章中有较详细的介绍:

ubuntu中安装docker详细说明

  • 或者你可以使用以下命令安装docker:

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io

2、安装docker-compose

  • 下载docker-compose,注意这里的版本号v2.5.0,在下载时可以更换成你当时最新的版本。

    sudo curl -L "https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

  • 授执行权限

    sudo chmod +x /usr/local/bin/docker-compose

  • 查看docker与docker-compose安装情况:

    sudo docker --version
    sudo docker-compose --version

二、创建与编辑配置文件

1、创建编辑docker-compose.yml文件

  • 进入你的项目主目录,注意进入你实际的项目主目录,我这里的项目路径是:/var/www/html

    cd /var/www/html

编辑docker-compose.yml,如果文件不存在,vim会自动创建。

复制代码
sudo vim  docker-compose.yml

2. 编写 docker-compose.yml 配置

  • 编辑docker-compose.yml文件,注意格式,docker-compose.yml文件对缩进敏感,注意缩进。

    version: '3.8'

    services: # MySQL 数据库服务 mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
    MYSQL_ROOT_PASSWORD: 【设置mysql root用户的密码】
    MYSQL_DATABASE: mysql_db
    MYSQL_USER: mysql_user
    MYSQL_PASSWORD: 【设置mysql mysql_user用户的密码】
    volumes:
    - mysql_data:/var/lib/mysql # 持久化数据库数据
    - ./mysql/conf.d:/etc/mysql/conf.d # 自定义配置(可选)
    ports:
    - "3306:3306"
    networks:
    - lamp-network

    复制代码
    # Apache + PHP 应用服务   apache-php:
      image: php:8.1-apache              # Apache + PHP镜像,根据你的项目部署版本。
      container_name: lamp-apache
      restart: always
      depends_on:
        - mysql                          # 确保MySQL先启动
      volumes:
        -  /var/www/html:/var/www/html            # 挂载你的PHP网站代码
        - ./apache/sites-available:/etc/apache2/sites-available #可选的 虚拟主机配置
      ports:
        - "80:80"
        - "443:443"
      networks:
        - lamp-network
    
    # 可选:phpMyAdmin 数据库管理工具   phpmyadmin:
      image: phpmyadmin/phpmyadmin
      container_name: lamp-phpmyadmin
      restart: always
      depends_on:
        - mysql
      environment:
        PMA_HOST: mysql                  # 连接到上面定义的mysql服务
        UPLOAD_LIMIT: 64M
      ports:
        - "8080:80"
      networks:
        - lamp-network
  • 启动docker-compose,文件启动时,如果你的系统内没有文件中的镜像,系统会自动下载

  • 查看容器运行状态:

    sudo cocker-compose ps

三、验证安装

1、验证apache

2、验证mysql连接

  • 登录 http://IP:8080
  • 上图中输入你创建mysql容器时设置的用户名和密码后登录,下图表示连接数据库成功。

四、docker-compose常用操作命令

1、 日常管理命令

复制代码
docker-compose up -d                 #启动服务
docker-compose ps                     # 查看运行状态
docker-compose stop                  # 停止服务
docker-compose down               # 停止并移除所有容器、网络,但保留命名卷,如mysql_data。
docker-compose down -v           # 停止并移除所有容器、网络、数据卷。注意数据会全部删除
docker-compose logs -f           # 查看所有服务的实时日志
docker-compose logs -f mysql        # 查看MySQL日志
docker-compose exec apache-php bash     # 进入容器内部执行命令(例如检查Apache配置)

2、备份数据

  • 备份html_mysql_data数据卷到当前

    docker run --rm -v html_mysql_data:/volume -v (pwd):/backup alpine tar cf /backup/mysql_backup_(date +%Y%m%d).tar -C /volume ./

3、还原备份数据

  • 停止服务

    docker-compose down

  • 数据还原,还原时注意文件名称

    docker run --rm -v html_mysql_data:/volume -v $(pwd):/backup alpine sh -c "rm -rf /volume/* && tar xf /backup/mysql_backup_20251221.tar -C /volume"

启动服务

复制代码
 docker-compose up -d
相关推荐
oMcLin1 小时前
如何在 Ubuntu 22.10 上通过 Kubernetes 和 Helm 管理微服务应用,简化跨平台电商平台的自动化部署?
ubuntu·微服务·kubernetes
a程序小傲1 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
CheungChunChiu1 小时前
Linux 内核动态打印机制详解
android·linux·服务器·前端·ubuntu
oMcLin2 小时前
如何在Ubuntu 20.04上配置并优化容器化的SaaS应用平台,实现弹性伸缩与跨区域分布?
ubuntu·sass
007php0073 小时前
mySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据
数据库·redis·git·mysql·面试·职场和发展·php
lkbhua莱克瓦243 小时前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
Love Song残响3 小时前
深入解析TCP/IP协议栈:从底层到应用层
网络·tcp/ip·php
碎像4 小时前
10分钟搞定 MySQL 通过Binlog 数据备份和恢复
数据库·mysql
JadenOliver5 小时前
Docker 守护进程核心配置入口:daemon.json
docker·daemon.json
岁岁种桃花儿6 小时前
MySQL 8.0 基本数据类型全面解析
数据库·mysql·数据库开发