本次安装的推荐配置:
- CentOS 7 (迅雷种子 http://ftp.nara.wide.ad.jp/pub/Linux/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.torrent)
- nginx 1.24.0
- mysql 5.7.43
- php 7.4.3-fpm
- redis 7.2.0
2023年12月21日:后面发现,一定要加上 docker run的时候一定要加上 –ip 172.18.10.1用来固定ip,不然重启变变,这样容器新增端口后,不用重新run,直接端口调用全部端口。
一、虚拟机安装centos7 vm虚拟机需要4g内存,网络使用桥接模式设置静态ip、50G硬盘、1cpu、2核
(踩坑经验:太低配置重启后会开不了机) https://blog.csdn.net/Z1576796635/article/details/128878299 https://blog.csdn.net/CLONS/article/details/130012899
开机后
uname -r
查看版本要在3.10以上 更新系统组件
yum -y update
yum报错:Could not retrieve mirrorlist
备份/etc/yum.repos.d/CentOS-Base.repo后执行
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
二、安装docker 删除旧docker
yum remove docker docker-common docker-selinux docker-engine
安装工具
yum install -y yum-utils device-mapper-persistent-data lvm2
配置docker的yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
国内:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker
sudo yum install -y docker-ce
启动docker
systemctl start docker
设置开机启动
systemctl enable docker
设置镜像国内加速
(踩坑经验:设置多个源头,不然会很慢)
创建文件
sudo mkdir -p /etc/docker
输入源头url
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn/",
"https://hub-mirror.c.163.com/",
"https://reg-mirror.qiniu.com/"
]
}
EOF
2024年7月5日:上述源无效,可去阿里云搜“容器镜像服务”,管理,获得专属链接 重启配置
sudo systemctl daemon-reload
重启docker
sudo systemctl restart docker
设置容器局域网,容器间相互访问
(心得:容器互相访问,不用通过宿主机,更快)
docker network create my_network
查看局域网是否创建成功
docker network ls
三、安装php
下载php镜像
docker pull php:7.4.3-fpm
(踩坑经验:后面要带fpm) 使用镜像生成临时容器 ,名为:test_php7.4.3,用来拷贝配置文件
(踩坑经验:空文件夹做共享,会将容器的配置文件清空)
docker run -it --name test_php7.4.3-fpm -d php:7.4.3-fpm
使用 docker ps 命令查看是否创建成功 创建需要被共享的文件夹
mkdir -p /data/php7.4.3 && cd /data/php7.4.3
将镜像内文件拷贝出来 (左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/usr/local/etc /data/php7.4.3
启动正式容器
docker run \
--network my_network \
--name prod_7.4.3-fpm \
--restart=always \
-v /data/php7.4.3/etc:/usr/local/etc \
-v /data/nginx1.24.0/html:/var/www/html \
-d php:7.4.3-fpm
备注:–restart=always 重启自动启动容器 没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]
docker rm [临时容器id]
php开通 mysql pdo 扩展,php连接mysql会用到 进入php容器后 查看php扩展模块
php -m
安装扩展
docker-php-ext-install pdo pdo_mysql
docker-php-ext-configure pcntl --enable-pcntl && docker-php-ext-install pcntl
docker-php-ext-install bcmath
docker-php-ext-install gd
四、安装nginx
理论:全部容器不做端口映射!!用nginx转发,如3306,最好把nginx装在宿主机上!!!
下载镜像
docker pull nginx:1.24.0
镜像生成临时容器(用来拷贝配置文件)
docker run -it --name test_nginx1.24.0 -d nginx:1.24.0
使用docker ps 查询是否启动成功 创建需要被共享的文件夹
mkdir -p /data/nginx1.24.0/conf/cert
mkdir -p /data/nginx1.24.0/conf/conf.d
mkdir -p /data/nginx1.24.0/html
mkdir -p /data/nginx1.24.0/log
mkdir -p /data/nginx1.24.0/ssl
将镜像内文件拷贝出来 (左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/etc/nginx/conf.d /data/nginx1.24.0/conf
docker cp [临时容器id]:/etc/nginx/nginx.conf /data/nginx1.24.0/conf/nginx.conf
docker cp [临时容器id]:/usr/share/nginx/html /data/nginx1.24.0
启动正式容器
docker run \
--network my_network \
-p 80:80 \
-p 443:443 \
--name prod_nginx1.24.0 \
--restart=always \
-v /data/nginx1.24.0/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx1.24.0/conf/cert:/etc/nginx/cert \
-v /data/nginx1.24.0/ssl:/etc/nginx/ssl/ \
-v /data/nginx1.24.0/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx1.24.0/log:/var/log/nginx \
-v /data/nginx1.24.0/html:/var/www/html \
-d nginx:1.24.0
备注:–restart=always 重启自动启动容器 -v /data/nginx1.24.0/html:/usr/share/nginx/html \ 改成 -v /data/nginx1.24.0/html:/var/www/html \ 跟php目录一样,配置网站时不用两个地址 没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]
docker rm [临时容器id]
如果要新增映射端口,可以进入到nginx容器,后面那个自己修改 /var/lib/docker/containers/61b0179cd4493b7a690e470c63b3fc34dd6bb09f4d5d09a1c91e9c3f38b6511f
或者使用命令
例如,假设已启动的容器的名称为 “my-container”,要将容器的 80 端口映射到宿主机的 8080 端口上,可以执行以下命令:
docker container update --publish-add 8080:80 my-container
修改这两个文件
五、安装mysql
下载镜像
docker pull mysql:5.7.43
开启临时镜像(用来拷贝配置文件)
docker run -it --name test_mysql5.7.43 -e MYSQL_ROOT_PASSWORD=root -v /etc/localtime:/etc/localtime:ro -d mysql:5.7.43
创建需要被共享的文件夹
mkdir -p /data/mysql5.7.43/conf
mkdir -p /data/mysql5.7.43/log mkdir -p /data/mysql5.7.43/lib/mysql
将镜像内文件拷贝出来 (左边是容器,会连同文件夹一起复制过去,右边是放进哪个文件夹里)
docker cp [临时容器id]:/var/log /data/mysql5.7.43
docker cp [临时容器id]:/var/lib/mysql /data/mysql5.7.43/lib
docker cp [临时容器id]:/etc/mysql/conf.d /data/mysql5.7.43/conf
docker cp [临时容器id]:/etc/mysql/mysql.conf.d /data/mysql5.7.43/conf
启动正式容器
docker run \
--network my_network \
--name prod_mysql5.7.43 \
--restart=always \
-p 3306:3306 \
-v /data/mysql5.7.43/log:/var/log \
-v /data/mysql5.7.43/lib/mysql:/var/lib/mysql \
-v /data/mysql5.7.43/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root123456 \
-d mysql:5.7.43
备注:–restart=always 重启自动启动容器 如果root密码错误,用root登录后修改
没问题后,停止临时镜像,并删除临时镜像
docker stop [临时容器id]
docker rm [临时容器id]
# 进入容器
docker exec -it [容器id] bash
mysql -uroot -p # 创建用户并开启远程登录
CREATE USER 'user_tp'@'%' IDENTIFIED BY 'user_tp_123456';
# 创建数据库并设置字符集
CREATE DATABASE `tp_test` CHARACTER SET 'utf8mb4';
# 给账号授权数据库
GRANT ALL PRIVILEGES ON `tp_test`.* TO 'user_tp'@'%';
# 刷新权限
FLUSH PRIVILEGES;
或者直接将root开启远程连接 mysql -uroot -p
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'root123456 ' WITH GRANT OPTION;
FLUSH PRIVILEGES;
使用远程工具连接mysql,并建立一个user用户表,后面用来测试
如果需要开启binlog日志
我一般不开启
六、运行php项目
将php项目通过ftp上传到 /data/nginx1.24.0/html (上面配置了这个地址会共享到容器内对应的文件夹)
新增一个网站配置
下图这样配置,带不带index.php都可以访问,上面那个带了访问不了。
hosts新增一行 (你的windows电脑)
重启docker
systemctl restart docker
在php项目中,新增一个访问数据库的代码
项目连接mysql
打开浏览器测试
安装redis
docker pull redis:7.2.0 mkdir -p /data/redis7.2.0/conf mkdir -p /data/redis7.2.0/data touch /data/redis7.2.0/conf/redis.conf 启动正式容器 docker run \ –network my_network \ –name prod_redis7.2.0 \ –restart=always \ –log-opt max-size=100m \ –log-opt max-file=2 \ -p 6379:6379 \ -v /data/redis7.2.0/conf/redis.conf:/etc/redis/redis.conf \ -v /data/redis7.2.0/data:/data \ -d redis:7.2.0 \ redis-server /etc/redis/redis.conf \ –appendonly yes \ –requirepass redismm123456 备注:–restart=always 重启自动启动容器
- –restart=always 总是开机启动
- –log是日志方面的
- -p 6379:6379 将6379端口挂载出去
- –name 给这个容器取一个名字
- -v 数据卷挂载
- /home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。
- /home/redis/myredis/data:/data 这个同上
- -d redis 表示后台启动redis
- redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
- –appendonly yes 开启redis 持久化
- –requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置,我被搞过,可以看这篇文章“阿里云服务器中毒‘Kirito666’经历”)
安装php-redis 扩展 先下载php-redis扩展,不像pdo自带,这个需要自己下载
https://pecl.php.net/package/redis 下载stable标识为稳定版 下载好后,上传
解压 tar zxvf redis-5.3.7.tgz
将压缩包复制到容器内 docker cp /data/redis7.2.0/pecl/redis-5.3.7 prod_7.4.3-fpm:/usr/src/php/ext/redis
开始安装 docker-php-ext-install redis 安装成功
重启php容器
测试成功!
都是踩坑经验,无私分享,有问题欢迎留言,共同进步!
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容