使用docker部署web全套应用
本文用docker 搭建一整套web应用,示例可直接使用, 采用docker compose文件进行部署
构建mysql容器
docker-compose-mysql5.7.yml
version: "2.0"
services:
# db为服务的名称
db:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
# 数据库初始化密码,在第一次创建服务的时候会写到数据库中,下次就算修改此密码也不会生效,要想修改密码,就需要用sql修改或者删除mysql_volume文件夹中的所有# 文件(删除后然后重启 相当于重新创建的数据库,以前的数据都会消失)
MYSQL_ROOT_PASSWORD: XCFGHUIO@#ERFGB
ports:
- "3306:3306"
# 映射卷,会把mysql相关文件映射到宿主机上 /home/report/project/mysql_volume 为宿主机目录, /var/lib/mysql 为容器目录
volumes:
- /home/report/project/mysql_volume:/var/lib/mysql
# adminer可以在浏览器中管理数据库,可按照需要使用
# adminer:
# image: adminer
# restart: always
# ports:
# - 9999:8080
构建应用容器
应用目录与文件分布
dockerfile文件内容
FROM livingobjects/jre8
WORKDIR /app
ENV LANG C.UTF-8
COPY ./manager-system.jar app.jar
ENV TZ=Asia/Shanghai
ENV LANG C.UTF-8
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
VOLUME /data
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
EXPOSE 8081
docker-compose-manager.yml
version: "2.0"
services:
# manager为服务的名称
manager:
build:
context: ./manager
dockerfile: ./Dockerfile
volumes:
- /home/report/project/manager_volume:/data
- /home/reprot/project/upload_volume:/data/upload-address
ports:
- 8081:8081
external_links:
# 采用容器互联的方式, project_db_1为mysql容器的名称 mysql_db是别名
- project_db_1:mysql_db
用相同镜像部署多个容器,就不能映射ports出来,会报端口被占用
构建nginx容器
目录内容
[root@hecs-x-xlarge-2-linux-20201130223219 nginx_volume]# pwd
/home/report/project/nginx_volume
[root@hecs-x-xlarge-2-linux-20201130223219 nginx_volume]# ll
总用量 24
-rw-r--r-- 1 root root 1675 12月 1 13:09 4064024_www.xxx.com.key
-rw-r--r-- 1 root root 3679 12月 1 13:09 4064024_www.xxx.com.pem
-rw-r--r-- 1 root root 1675 12月 1 16:22 4210596_report.xxx.com.key
-rw-r--r-- 1 root root 3663 12月 1 16:22 4210596_report.xxx.com.pem
-rw-r--r-- 1 root root 1719 12月 1 16:15 biz.conf
-rw-r--r-- 1 root root 890 12月 1 13:10 nginx.conf
docker-compose-nginx.yml
version: "2.0"
services:
nginx_service:
image: nginx
volumes:
# 映射卷
- /home/report/project/nginx_volume/nginx.conf:/etc/nginx/nginx.conf
- /home/report/project/nginx_volume/biz.conf:/etc/nginx/conf.d/biz.conf
- /home/report/project/upload_volume:/data/upload-address
# ssl证书文件映射
- /home/report/project/nginx_volume/4064024_xxx.com.pem:/data/ssl/4210596_report.xxx.com.pem
- /home/report/project/nginx_volume/4064024_xxx.com.key:/data/ssl/4210596_report.xxx.com.key
ports:
- "80:80"
- "443:443"
environment:
- NGINX_PORT=80
external_links:
# 采用容器互联的方式 project_manager_1 为容器的名称 manager_a为容器的别名, nginx配置文件中代理到manager项目中就应该以别名为域名,如下biz.conf
- project_manager_1:manager_a
biz.conf
# 负载均衡
upstream manager_server {
# manager_a 就是compose文件中配置的别名
server manager_a:8081;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://manager_server;
}
}
查看运行的docker容器
[root@hecs-x-xlarge-2-linux-20201130223219 nginx_volume]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
386c95ab642f project_manager "java -Djava.securit…" 3 minutes ago Up 3 minutes 8081/tcp project_manager_2
79e11ee061e4 project_manager "java -Djava.securit…" 3 minutes ago Up 3 minutes 8081/tcp project_manager_1
c2db793a5ab5 nginx "/docker-entrypoint.…" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp project_nginx_service_1
3cf2151cc129 mysql:5.7 "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp, 33060/tcp project_db_1
容器的名称compose会以 当前文件夹_服务名_number命名
比如: mysql compose文件在project文件夹下,那么容器名称就是 project_db_1
配置启动脚本
该脚本也可用于重启
mysql启动脚本
start_mysql.sh
docker-compose -f /home/report/project/docker-compose-mysql5.7.yml up -d;
manager应用启动脚本
start_manager.sh
docker-compose -f /home/report/project/docker-compose-manager.yml down;
docker-compose -f /home/report/project/docker-compose-manager.yml up -d --build;
# 如果想部署多个相同的服务 使用 scale 服务名=num
# docker-compose -f /home/report/project/docker-compose-manager.yml scale manager=2 up -d --build;
nginx启动脚本
start_nginx.sh
docker-compose -f /home/report/project/docker-compose-nginx.yml down;
docker-compose -f /home/report/project/docker-compose-nginx.yml up -d --build;
更改脚本权限
chmod 755 start_mysql.sh
chmod 755 start_manager.sh
chmod 755 start_nginx.sh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南