Docker 安装多版本Mysql+PHP+Nginx(php5.6,php7,mysql5.6,mysql8)

  • 卸载已有的docker依赖,如果没有安装直接忽略

yum remove -y docker docker-common docker-selinux docker-engine

  • 安装依赖(你之前已经安装好了,可忽略)

yum install -y yum-utils device-mapper-persistent-data lvm2

  • 添加阿里云 Docker CE 仓库

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  • 列出可用 Docker 版本: yum list docker-ce --showduplicates | sort -r

  • 安装 Docker

sudo yum install -y docker-ce-20.10.9-3.el7 docker-ce-cli-20.10.9-3.el7 containerd.io

  • 启动 Docker 并开机自启

systemctl start docker

systemctl enable docker

  • 检查版本

docker -v

docker compose version

  • 更换源 新建daemon.json
bash 复制代码
vim /etc/docker/daemon.json
### 添加以下内容  xxxxxx是阿里云源的id 登录自己的阿里云生成一个进行替换
{
  "registry-mirrors": [
    "xxxxxx",
    "https://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
  • 重启docker:systemctl restart docker

  • 验证一下是否已经替换源:docker info | grep -i mirror

  • 查看是否存在 docker-compose: docker-compose -v

  • 如果已有可以忽略我下载 docker-compose的操作,我在CentOS7 内没能成功下载,是在本地下载之后传到服务器运行的安装的。

bash 复制代码
### 下载docker-compose 地址
https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64

### 上传到指定目录
/usr/local/bin/docker-compose

### 添加权限
chmod +x /usr/local/bin/docker-compose

### 测试是否正常运行
docker-compose version
  • 提前下载镜像
bash 复制代码
  docker pull mysql:5.6 
  docker pull mysql:8.0
  docker pull php:7.3-fpm
  docker pull webdevops/php:5.6
  • 创建数据卷目录

mkdir -p /opt/docker/{php56,mysql56,php7,mysql8,nginx/conf.d,nginx/html}

  • 在/opt/docker下创建 docker-compose.yml 文件,内容如下:
yaml 复制代码
version: '3.8'
services:
  php56:
    image: webdevops/php:5.6
    container_name: php56
    volumes:
      - ./nginx/html/php56:/var/www/html
    networks:
      - mynet

  mysql56:
    image: mysql:5.6
    container_name: mysql56
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: db56
      MYSQL_USER: user56
      MYSQL_PASSWORD: pass56
    ports:
      - "3307:3306"
    volumes:
      - ./mysql56:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0
    networks:
      - mynet

  php7:
    image: php:7.3-fpm
    container_name: php7
    volumes:
      - ./nginx/html/php7:/var/www/html
    networks:
      - mynet

  mysql8:
    image: mysql:8.0
    container_name: mysql8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: db8
      MYSQL_USER: user8
      MYSQL_PASSWORD: pass8
    ports:
      - "3308:3306"
    volumes:
      - ./mysql8:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password --bind-address=0.0.0.0
    networks:
      - mynet

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/var/www/html
    depends_on:
      - php56
      - php7
    networks:
      - mynet

networks:
  mynet:
    driver: bridge
  • 在/opt/docker/nginx/conf.d目录下创建php56.conf php7.conf 两个配置文件:

  • php56.conf

ini 复制代码
server {
    listen 80;
    server_name 域名;
    root /var/www/html/php56/testb;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {

        fastcgi_pass php56:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        #fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME /var/www/html/testb$fastcgi_script_name;       
    }

    location ~* \.(css|js|gif|png|jpg|jpeg)$ {
        expires 30d;
        access_log off;
    }


    #location ~*\.(gif|jpg|png)$ {
    #    expires 30d;
    #}

    #location ~ .*(.css|.js|.gif|.png|.jpg|.jpeg|.php)$ {}


    # 错误页面
    error_page 404 /404.html;

}
  • php7.conf
ini 复制代码
server {
    listen 80;
    server_name php7.local;

    root /var/www/html/php7;
    index index.php index.html;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_pass php7:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}
  • 重启nginx : docker exec -it nginx nginx -s reload
  • CentOS 查看防火墙 状态 (我这里直接关闭了):systemctl status firewalld

访问php56.conf填写的域名成功访问,root 指向的是项目目录,记得打开服务器对应的端口8080,3307,3308(我的是阿里云在安全组开放这些端口)

有问题评论

相关推荐
贝锐17 小时前
Docker部署Teemii本地漫画库,并通过花生壳内网穿透实现远程访问
docker
i***220721 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
羑悻的小杀马特1 天前
轻量跨云·掌控无界:Portainer CE + cpolar 让远程容器运维像点外卖一样简单——免复杂配置,安全直达对应集群
运维·网络·安全·docker·cpolar
EAIReport1 天前
企业级报表自动化:基于Docker的部署实践
运维·docker·自动化
cui_win1 天前
Docker Compose 部署一个完整的Prometheus监控告警系统
docker·容器·prometheus
ALex_zry2 天前
Docker Compose运维技术实战分享:从安装到架构解析
运维·docker·架构
roman_日积跬步-终至千里2 天前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
z***6262 天前
Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
docker·容器·tomcat
❀͜͡傀儡师2 天前
Docker部署视频下载器
docker·容器·音视频
热爱学习的小怪兽2 天前
docker的一些常用指令
运维·docker·容器