使用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
posted @   四码难追  阅读(1177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示