- 卸载已有的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(我的是阿里云在安全组开放这些端口)
有问题评论