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

有问题评论

相关推荐
php@king3 小时前
安装xdebug调试工具(docker容器+vscode编辑器+xdebug)
vscode·docker·编辑器
2501_920047035 小时前
docker相关进程的作用
运维·docker·容器
Ting-yu5 小时前
零基础学Docker(5)--容器数据卷
运维·docker·容器
key_Go6 小时前
07.容器监控
运维·网络·网络协议·docker·监控
苦逼IT运维6 小时前
Windows 作为 Ansible 节点的完整部署流程(含 Docker 部署 Ansible)
windows·docker·ansible
Lin_Aries_04217 小时前
部署 Jenkins 服务器
运维·服务器·docker·容器·云计算·jenkins
huangdengji8 小时前
【docker默认防火墙行为调整】
docker·容器
ftswsfb8 小时前
Docker进阶-管理和应用
运维·docker·容器
gs801409 小时前
在 openEuler 上排查 Docker 同桥网络不通:从“全线超时”到定位容器没启动
网络·docker·容器