当前位置: 首页 > news >正文

Docker容器部署论坛和网上商城(小白的“升级打怪”成长之路)

目录

一、项目目录结构

二、容器生成

1、生成php容器

2、生成nginx容器

3、生成tomcat容器

4、生成mysql容器

5、discuz目录

6、查看镜像及容器

三、网站访问


一、项目目录结构

/root/project/
├── discuz/                 
├── nginx/
│   ├── default.conf
│   └── Dockerfile           
├── php/          
│   ├── www.conf             
│   └── Dockerfile            
├── mysql/       
│   ├── my.cnf  
│   ├── init.sql 
│   ├── biyesheji.sql        
│   └── Dockerfile          
└── tomcat/├── tomcat8               └── Dockerfile   

生成Docker自定义网络

docker network create project_net

二、容器生成

操作前准备:提前下载好alpine、tomcat8和mysql8.0镜像,准备好商城的应用文件(修改好)

docker pull alpine

docker pull mysql8.0

docker pull tomcat8

1、生成php容器

mkdir -p /root/project/php
cd /root/project/php

vim Dockerfile

FROM alpine:latest
​
# 1. 使用带版本号的包名(以PHP 8.2为例)
RUN apk update && apk add --no-cache \php82 \php82-fpm \php82-mysqli \php82-xml \php82-json \php82-pdo \php82-pdo_mysql \php82-tokenizer
# 创建与Nginx匹配的用户
RUN addgroup -g 101 -S nginx && \adduser -u 101 -S -G nginx nginx
​
# 2. 创建符号链接(兼容旧命令)
RUN ln -s /usr/sbin/php-fpm82 /usr/bin/php-fpm
​
# 3. 创建运行时目录
RUN mkdir -p /var/run/php
​
# 4. 复制配置文件(需提前准备www.conf)
COPY www.conf /etc/php82/php-fpm.d/www.conf
​
EXPOSE 9000
​
# 5. 以前台模式启动
CMD ["php-fpm82", "--nodaemonize", "--force-stderr"]

vim www.conf

[www]
user = nginx
group = nginx
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
​

生成镜像并启动

docker build -t alpine:php .
​
docker run -itd -v /root/project/discuz:/var/www/html --network project_net --name php alpine:php

从的。。

2、生成nginx容器

mkdir -p /root/project/nginx
cd /root/project/nginx

vim default.conf

server {listen       80;listen       [::]:80;server_name  localhost;root         /usr/share/nginx/html;index index.php index.html index.htm;location ~ \.php$ {fastcgi_pass   php:9000;  # 您的PHP服务器IPfastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME /var/www/html$fastcgi_script_name;include        fastcgi_params;}
}

vim Dockerfile

FROM alpine:latest
RUN apk update && apk add nginx && rm -f /etc/nginx/http.d/default.conf && mkdir -p /run/nginx  && \chown nginx:nginx /run/nginx && \chmod 755 /run/nginx
ADD default.conf /etc/nginx/http.d/
EXPOSE 80
CMD ["nginx","-g","daemon off;"]

生成镜像并启动

docker build -t alpine:nginx .
​
docker run -itd -p 80:80 -v /root/project/discuz:/usr/share/nginx/html --network project_net --name nginx alpine:nginx

3、生成tomcat容器

mkdir -p /root/project/tomcat
cd /root/project/tomcat
​
​
##提前配置好商城的应用文件,放在该目录下
[root@bogon tomcat]# ls
Dockerfile  tomcat8 
[root@bogon tomcat]# cp /root/project/tomcat/tomcat8/webapps/biyesheji/biyesheji.sql /root/project/mysql

vim Dockerfile

FROM tomcat:8
RUN  ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/tomcat_start && \ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/tomcat_stop
VOLUME /usr/local/tomcat8
EXPOSE 8080
CMD ["bash", "-c", "/usr/local/tomcat/bin/startup.sh && tail -f /usr/local/tomcat/logs/catalina.out"]

生成镜像并启动

docker build -t tomcat8:shangcheng .
​
​
docker run -itd -p 8080:8080 -v /root/project/tomcat/tomcat8:/usr/local/tomcat --network project_net --name shangcneg tomcat8:shangcheng 

###

4、生成mysql容器

mkdir -p /root/project/mysql
cd /root/project/mysql

vim Dockerfile

FROM mysql:8.0
# 设置UTF-8字符集
COPY my.cnf /etc/mysql/conf.d/
# 复制初始化脚本(将在首次启动时执行)
COPY init.sql /docker-entrypoint-initdb.d/init.sql
# 暴露端口
EXPOSE 3306
​
# 使用官方入口点
CMD ["mysqld"]

vim init.sql

-- 创建额外数据库
CREATE DATABASE discuz;
create database biyesheji;
​
-- 创建额外用户和权限
CREATE USER 'discuz_user'@'%' IDENTIFIED BY '123.com';
GRANT ALL PRIVILEGES ON discuz.* TO 'discuz_user'@'%';
DROP USER IF EXISTS 'root'@'%';
create user 'root'@'%' identified by '123.com';
grant all on *.* to 'root'@'%';
FLUSH PRIVILEGES;

vim my.cnf

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-authentication-plugin=mysql_native_password
max_connections=200
​

生成镜像并启动

docker build -t mysql8:project .
​
​
docker run -itd -e MYSQL_ROOT_PASSWORD=123.com -v /root/project/mysql_data:/var/lib/mysql  --network project_net --name mysql mysql8:project
​
docker exec -i mysql mysql -uroot -p123.com biyesheji < /root/project/mysql/biyesheji.sql

5、discuz目录

unzip Discuz_X3.5_SC_UTF8_20240520.zip
cp -R upload/ /root/project/discuz
cd /root/project/discuz
chown 101.101 ./ -R

6、查看镜像及容器

[root@bogon tomcat]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED         SIZE
mysql8       project      b3c9d3d501b6   2 hours ago     764MB
tomcat8      shangcheng   6477ee4a1704   27 hours ago    456MB
alpine       nginx        eade4ce1726f   29 hours ago    12.9MB
alpine       php          1d67744b9e08   29 hours ago    31.3MB
alpine       latest       9234e8fb04c4   3 weeks ago     8.31MB
nginx        latest       2cd1d97f893f   3 weeks ago     192MB
mysql        8.0          22211033193f   6 months ago    764MB
tomcat       8            0a2249be3d31   16 months ago   456MB
mysql        5.7          5107333e08a8   20 months ago   501MB
[root@bogon tomcat]# docker ps -a
CONTAINER ID   IMAGE                COMMAND                   CREATED         STATUS         PORTS                                         NAMES
4119c5ceff0b   alpine:nginx         "nginx -g 'daemon of…"   4 minutes ago   Up 4 minutes   0.0.0.0:80->80/tcp, [::]:80->80/tcp           nginx
6a3f7a4fddf1   alpine:php           "php-fpm82 --nodaemo…"   4 minutes ago   Up 4 minutes   9000/tcp                                      php
fc52d6cebbb8   mysql8:project       "docker-entrypoint.s…"   2 hours ago     Up 2 hours     3306/tcp, 33060/tcp                           mysql
161adc570f04   tomcat8:shangcheng   "bash -c '/usr/local…"   7 hours ago     Up 7 hours     0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   shangcneg

三、网站访问

1、网站访问宿主机ip安装论坛

数据库名、数据库用户、数据库密码在生成mysql容器的配置文件中已经定义好了,数据库服务器地址在启用数据库镜像时定义好了

2、网站访问宿主机ip:8080访问到商城服务

看到感觉有帮助的朋友,劳烦动动发财的小手,给博主点个赞

http://www.xdnf.cn/news/1286281.html

相关文章:

  • 1 JQ6500语音播报模块详解(STM32)
  • 电机极数2极、4极、6极、8极的区别
  • 电子电路原理学习笔记---第5章特殊用途二极管---第2天
  • PaddlePaddle 模型训练技巧
  • Myqsl建立库表练习
  • Spark on K8s 在vivo大数据平台的混部实战
  • Go 语言 里 `var`、`make`、`new`、`:=` 的区别
  • 深入解析ArrayList与LinkedList的区别:如何正确选择?
  • 游戏中角色持枪:玩家操控角色,角色转向时枪也要转向
  • Java集合学习之forEach()遍历方法的底层原理
  • 【Unity3D实例-功能-下蹲】角色下蹲(二)穿越隧道
  • 人工智能+虚拟仿真,助推医学检查技术理论与实践结合
  • Linux环境gitlab多种部署方式及具体使用
  • [论文阅读] (41)JISA24 物联网环境下基于少样本学习的攻击流量分类
  • 完整多端口 Nginx Docker部署 + GitLab Runner注册及标签使用指南
  • 使用 NetBird 创建安全的私有网络,简化远程连接!
  • 【论文阅读】从表面肌电信号中提取神经信息用于上肢假肢控制:新兴途径与挑战
  • 终端安全检测和防御技术总结
  • Java数据结构之ArrayList
  • [激光原理与应用-256]:理论 - 几何光学 - CMOS与CCD传感器成像原理比较
  • 卫生间装修防水怎么做合适?
  • 激光干涉法在碳化硅衬底 TTV 厚度测量中的精度提升策略
  • 高性能web服务器Tomcat
  • Vue 3 + Elementui + TypeScript 实现左侧菜单定位右侧内容
  • 石英加速度计如何实现高精度测量?
  • 深度贴:前端网络基础及进阶(3)
  • 鲲鹏arm服务器安装neo4j社区版,实现图书库自然语言检索基础
  • 地图可视化实践录:显示地理区域图
  • 自然语言处理关键库解析和使用方法- FuzzyWuzzy
  • 虚拟机一站式部署Claude Code 可视化UI界面