docker 部署
3.生成mysql数据 之前做这个项目解压包中有biyesheji.sql移动到mysql容器目录下(/root/discuz/mysql/data/) 4.之前的conf下色server.xml复制到tomcat容器 的conf.d中。- ./conf/7001/redis.conf:/etc/redis/redis.conf# 配置文件挂载。command: redis-server /etc
目录
一、准备阶段
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、论坛项目部署
1、创建虚拟网络

2.下载镜像

3.创建对应的目录

4.配置php
4.1编写Dockerfile文件
cat Dockerfile FROM alpine:latest RUN apk update && apk add --no-cache php83 php83-fpm php83-mysqlnd php83-gd php83-curl php83-mbstring \ php83-json php83-openssl php83-xml php83-mysqli php83-tokenizer && mkdir -p /var/www/discuz && rm -rf \ /etc/php83/php-fpm.d/www.conf && addgroup -g 101 -S nginx && adduser -u 101 -D -S -G nginx nginx && \ chown -R nginx:nginx /var/www/discuz EXPOSE 9000 CMD ["php-fpm83", "-F"]
4.2编写php配置文件
cat conf.d/www.conf [www] user = nginx group = nginx listen = 9000 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
4.3创建php镜像

5.配置nginx
5.1编写Dockerfile文件
FROM alpine:latest # 安装 nginx 并创建目录 RUN apk update && \ apk add nginx && \ rm -f /etc/nginx/http.d/default.conf && \ mkdir -p /var/www/discuz EXPOSE 80 # 启动 Nginx CMD ["nginx", "-g", "daemon off;"]
5.2编写nginx配置文件
cat conf.d/default.conf
server {
listen 80;
server_name _;
root /var/www/discuz;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_pass php:9000;
fastcgi_param SCRIPT_FILENAME /var/www/discuz$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
access_log /var/log/nginx/discuz_access.log;
error_log /var/log/nginx/discuz_error.log;
}
5.3构建nginx镜像 docker build -t alpine:nginx . 5.4生成php容器
docker run -itd -v /root/discuz/nginx/conf.d/:/etc/nginx/http.d/ -v /root/discuz/discuz:/var/www/discuz/ -v /root/discuz/nginx/logs:/var/log/nginx --name=nginx --network dizcus -p 80:80 alpine:nginx

测试


php可以正常解析
6.编写mysql 6.1编写Mysql配置文件
cat conf.d/mysql.conf [mysqld] character-set-server = utf8mb4 bind-address = 0.0.0.0 max_connections = 500
6.2编写Dockerfile
cat Dockerfile FROM mysql:latest COPY conf.d/ /etc/mysql/conf.d/ COPY init.sql /docker-entrypoint-initdb.d/ RUN chown -R mysql:mysql /etc/mysql/conf.d && \ chmod 644 /etc/mysql/conf.d/mysql.conf EXPOSE 3306
6.3创建数据库和用户
cat init.sql -- 创建数据库 CREATE DATABASE IF NOT EXISTS discuz DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建用户并授权 CREATE USER IF NOT EXISTS 'discuz'@'%' IDENTIFIED BY '123.com'; GRANT ALL PRIVILEGES ON discuz.* TO 'discuz'@'%'; FLUSH PRIVILEGES;
6.4创建Mysql镜像
docker build -t mysql:mysql .
6.5生成mysql容器
docker run -itd --name=mysql --network dizcus -v /root/discuz/mysql/data:/var/lib/mysql -v /root/discuz/mysql/conf.d/mysql.conf:/etc/mysql/conf.d/mysql.conf -v /root/discuz/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql -e MYSQL_ROOT_PASSWORD=123.com mysql:mysql

6.6创建mysql测试文件
cat mysql.php
<?php
// 数据库配置
$host ='mysql'; // MySQL容器名或IP
$user = 'discuz'; // 用户名
$pass = '123.com'; // 密码
$dbname = 'discuz'; // 数据库名
// 创建连接
$conn = new mysqli($host, $user, $pass, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: ". $conn->connect_error);
}
echo "数据库连接成功!";
// 关闭连接
$conn->close();
?>

7.论坛项目 7.1导入论坛项目

7.2赋予权限

7.3访问论坛项目

三、线上商城项目部署
1.准备阶段 创建好对应的目录

2.下载tomcat镜像

3.生成mysql数据 之前做这个项目解压包中有biyesheji.sql移动到mysql容器目录下(/root/discuz/mysql/data/) 4.之前的conf下色server.xml复制到tomcat容器 的conf.d中

还有之前毕业设计压缩包拷贝到shop/shop下

不用解压,tomcat容器启动后会自行解压
5.在宿主机上创建数据库和用户

6.进入mysql容器 创建数据库

创建用户

7.退出mysql注入数据
bash-5.1# mv /var/lib/mysql/biyesheji.sql ./ bash-5.1# ls afs boot etc lib64 opt run sys var bin dev home media proc sbin tmp biyesheji.sql docker-entrypoint-initdb.d lib mnt root srv usr bash-5.1# mysql -uroot -p'123.com' biyesheji < ./biyesheji.sql mysql: [Warning] Using a password on the command line interface can be insecure.
8.修改配置文件 vim /biyesheji/WEB-INF/classes/jdbc.properties

9.生成tomcat容器
docker run -itd --name tomcat --network dizcus -p 8080:8080 -v /root/shop/shop/:/usr/local/tomcat/webapps/ -v /root/shop/conf.d/server.xml:/usr/local/tomcat/conf/server.xml -v /root/shop/log/:/usr/local/tomcat/logs/ --restart=always tomcat:8
10.测试

四、docker部署redis集群
mkdir -p /opt/redis-cluster && cd /opt/redis-cluster
mkdir -p conf/{7001,7002,7003,7004,7005,7006}
2.编写配置文件
cat > conf/7001/redis.conf << 'EOF' # 节点端口(每个节点不同:7001~7006) port 7001 # 开启集群模式 cluster-enabled yes # 集群配置文件(自动生成,无需修改) cluster-config-file nodes.conf # 集群节点超时时间(毫秒) cluster-node-timeout 5000 # 允许所有IP连接(关键:外部可访问) bind 0.0.0.0 # 开启AOF持久化 appendonly yes # 集群跨节点重定向(必须开启) cluster-require-full-coverage no # 密码(可选,生产环境建议设置) requirepass 123456 # 集群节点间通信密码(需与requirepass一致) masterauth 123456 EOF
复制文件到其他节点:
for port in {7002..7006}; do
cp conf/7001/redis.conf conf/$port/redis.conf
sed -i "s/7001/$port/g" conf/$port/redis.conf
done
3.创建 docker-compose.yml
version: '3.8' services: # 主节点1 redis-7001: image: redis:7.2-alpine # 基于轻量Alpine镜像 container_name: redis-7001 restart: always ports: - "7001:7001" # 端口映射(主机:容器) - "17001:17001" # 集群总线端口(主端口+10000) volumes: - ./conf/7001/redis.conf:/etc/redis/redis.conf # 配置文件挂载 - ./data/7001:/data # 数据持久化目录 networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 启动命令 # 主节点2 redis-7002: image: redis:7.2-alpine container_name: redis-7002 restart: always ports: - "7002:7002" - "17002:17002" volumes: - ./conf/7002/redis.conf:/etc/redis/redis.conf - ./data/7002:/data networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 主节点3 redis-7003: image: redis:7.2-alpine container_name: redis-7003 restart: always ports: - "7003:7003" - "17003:17003" volumes: - ./conf/7003/redis.conf:/etc/redis/redis.conf - ./data/7003:/data networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 从节点1(对应主节点1) redis-7004: image: redis:7.2-alpine container_name: redis-7004 restart: always ports: - "7004:7004" - "17004:17004" volumes: - ./conf/7004/redis.conf:/etc/redis/redis.conf - ./data/7004:/data networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 从节点2(对应主节点2) redis-7005: image: redis:7.2-alpine container_name: redis-7005 restart: always ports: - "7005:7005" - "17005:17005" volumes: - ./conf/7005/redis.conf:/etc/redis/redis.conf - ./data/7005:/data networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 从节点3(对应主节点3) redis-7006: image: redis:7.2-alpine container_name: redis-7006 restart: always ports: - "7006:7006" - "17006:17006" volumes: - ./conf/7006/redis.conf:/etc/redis/redis.conf - ./data/7006:/data networks: - redis-cluster-net command: redis-server /etc/redis/redis.conf # 自定义网络(确保节点间通信) networks: redis-cluster-net: driver: bridge ipam: config: - subnet: 172.20.0.0/16 # 固定子网,避免IP冲突
4.创建容器
docker-compose up -d 验证: docker-compose ps
进入任意容器创建集群:
docker exec -it redis-7001 sh
redis-cli -a 123456 --cluster create \ 172.20.0.2:7001 \ 172.20.0.4:7002 \ 172.20.0.6:7003 \ 172.20.0.5:7004 \ 172.20.0.1:7005 \ 172.20.0.3:7006 \ --cluster-replicas 1
查看详细内容:
redis-cli -a 123456 -p 7001 cluster info
查看节点:
redis-cli -a 123456 -p 7001 cluster nodes
信息如下:
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 94d9d28205c0048660f13f51e083c3bd6a47720d 172.20.0.4:7002@17002 master - 0 1754533299525 2 connected 5461-10922 944c1704c3cbb95e672fac260f889ff020a20d63 172.20.0.7:7005@17005 slave 97a1189612359d068794741e3007f1371464d21a 0 1754533299525 1 connected 97a1189612359d068794741e3007f1371464d21a 172.20.0.2:7001@17001 myself,master - 0 1754533298000 1 connected 0-5460 55a6a751b9d9b213b0bdf0b7e0d329a208832b0f 172.20.0.3:7006@17006 slave 94d9d28205c0048660f13f51e083c3bd6a47720d 0 1754533299525 2 connected 659d74a1efbbd0fea771cb1585a0461d06215b49 172.20.0.5:7004@17004 slave 80a10d8b6adc4b57f50f8b1c30c09b7bcebc34ba 0 1754533299000 3 connected 80a10d8b6adc4b57f50f8b1c30c09b7bcebc34ba 172.20.0.6:7003@17003 master - 0 1754533299741 3 connected 10923-16383
5.容器外验证:
redis-cli -h 192.168.144.177 -p 7001 -a 123456 -c -h是本机的ip
结果如下
192.168.144.177:7001> set test_key "hello_redis_cluster" -> Redirected to slot [15118] located at 172.20.0.6:7003 OK 172.20.0.6:7003> get test_key "hello_redis_cluster" 172.20.0.6:7003> set test_key2 "hello_redis_cluster" -> Redirected to slot [3745] located at 172.20.0.2:7001 OK 172.20.0.2:7001>
可以停用master的容器,slave就会变成master, 再次启动master的容器,又会回复正常
更多推荐
所有评论(0)