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访问到商城服务