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(我的是阿里云在安全组开放这些端口)

有问题评论

相关推荐
liu****32 分钟前
2.深入浅出理解虚拟化与容器化(含Docker实操全解析)
运维·c++·docker·容器·虚拟化技术
logocode_li2 小时前
OCI/CRI 双标准下:从 dockerd 到 containerd 的 K8s 运行时迭代史
docker·云原生·容器·k8s
_运维那些事儿13 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
lpruoyu15 小时前
【Docker进阶-05】Docker网络
网络·docker·容器
三块钱079418 小时前
群晖docker部署Mattermost,对接openclaw
运维·docker·容器
苦逼IT运维20 小时前
从 0 到 1 理解 Kubernetes:一次“破坏式”学习实践(一)
linux·学习·docker·容器·kubernetes
萧曵 丶20 小时前
Docker 面试题
运维·docker·容器
为什么不问问神奇的海螺呢丶21 小时前
n9e categraf docker 监控配置
运维·docker·容器
青树寒鸦21 小时前
wsl的docker备份mongo和迁移
运维·mongodb·docker·容器
hopsky1 天前
Docker Desktop 报 500
运维·docker·容器