docker部署项目实战

发布时间:2026/11/6 3:08:52
docker部署项目实战 部署前请先安装docker以及docker-compose已经安装的请跳过未安装的同学到我的文章中有docker以及docker-compose的安装方法。一、 下载基础镜像1. 搜索想下载的镜像docker search ×× //××代表想要查找的镜像如docker search openjdk1.下载jdk8镜像sudo docker pull openjdk:8-jre2. 下载mysql镜像sudo docker pull mysql:8.0.21二、创建容器本文以mysql演示以基础镜像创建容器运行1. 创建docker-compose.yml文件vim /root/data/mysql/docker-compose.yml2. 创建数据挂载mkdir -p /root/mysql/datamkdir -p /root/mysql/config3. 编辑docker-compose.ymlversion: 3services:mysql:# 指定容器的名称container_name: mysql# 指定镜像和版本image: mysql:8.0.21#端口映射将 mysql的3306映射到32306对外访问ports:- 32306:3306#配置容器在退出时自动重启restart: always# 容器日志大小配置logging:driver: json-fileoptions:max-size: 3genvironment:# 配置root密码MYSQL_ROOT_PASSWORD: uksuh123TZ: Asia/Shanghaivolumes:# 挂载数据目录- /root/mysql/data:/var/lib/mysql# 挂载配置文件目录- /root/mysql/conf.d:/etc/mysql/conf.d# 映射日志- /root/mysql/logs:/var/log/mysql# 让容器的时钟与宿主机时钟同步避免时间的问题- /etc/localtime:/etc/localtime:ro在上述配置中我们使用了 MySQL 8 的官方镜像并指定了一个容器名称为 mysql。我们还设置了 MySQL 的 root 用户密码并将主机的 3306 端口映射到容器的 3306 端口。此外我们将 MySQL 的数据目录挂载到主机的 ./data 目录下以便数据可以持久化保存。在这个例子中/var/lib/mysql 是 MySQL 数据库容器内的默认数据目录而 /root/mysql/data 是主机上的目录用于存储 MySQL 数据库的数据文件。4. 配置my.cnf(有额外配置使用否则可以忽略)###### [client]配置模块 ######[client]default-character-setutf8mb4socket/var/lib/mysql/mysql.sock###### [mysql]配置模块 ######[mysql]# 设置MySQL客户端默认字符集default-character-setutf8mb4socket/var/lib/mysql/mysql.sock###### [mysqld]配置模块 ######[mysqld]port3306usermysql# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_modeonly_full_group_by这里最好剔除ONLY_FULL_GROUP_BYsql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTIONdatadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sockserver-id 1# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接default_authentication_pluginmysql_native_password# 禁用符号链接以防止各种安全风险symbolic-links0# 允许最大连接数max_connections1000# 服务端使用的字符集默认为8比特编码的latin1字符集character-set-serverutf8mb4# 创建新表时将使用的默认存储引擎default-storage-engineINNODB# 表名存储在磁盘是小写的但是比较的时候是不区分大小写lower_case_table_names0max_allowed_packet16M# 设置时区default-time_zone8:005. 启动容器启动docker-compose up -d停止docker-compose down安装redis# 创建目录mkdir -p /root/redis/confmkdir -p /root/redis/data# 创建并编辑 redis.conf 配置文件vi /root/redis/conf/redis.conf# 绑定所有IP如果在云服务器上请配合防火墙/安全组使用不要直接暴露公网bind 0.0.0.0# 设置密码生产环境强烈建议设置requirepass your_redis_password# 开启 AOF 持久化保证重启后数据不丢失appendonly yes# 关闭保护模式如果不设密码这行必须改成 no否则外部连不上设了密码可以保持 yesprotected-mode nodocker-compose.ymlversion: 3.8services:redis:image: redis:latest # 或者指定版本如 redis:7.0container_name: prod-redis # 容器名字restart: always # 开机自启ports:- 6379:6379volumes:# 挂载配置文件非常重要不加这条容器会用默认配置启动忽略你的 redis.conf- /root/redis/conf/redis.conf:/etc/redis/redis.conf# 挂载数据目录- /root/redis/data:/data# 覆盖容器启动命令告诉它用我们挂载的配置文件启动command: redis-server /etc/redis/redis.conf三、部署java项目1. 上传jar包admin-2.1.jar2. 编写docker-compose发布jarversion: 3services:#服务的名称admin:restart: always# 使用jdk基础镜像image: openjdk:8-jre#指定容器名称container_name: adminports:- 8080:8080volumes:#配置日志输出- ./logs/:/logs/# 将jar包挂载到jdk容器并命名为app.jar- ./admin-2.1.jar:/app.jarenvironment:- TZAsia/Shanghai- SPRING_DATASOURCE_URLjdbc:mysql://127.0.0.1:3306/mysql?useUnicodetruecharacterEncodingUTF8useSSLfalse- SPRING_DATASOURCE_USERNAMEroot- SPRING.DATASOURCE.PASSWORDusjshb123- KNIFE4J.PRODUCTIONtrue# 启动时执行该命令command: java -server -jar app.jar3. 启动容器启动docker-compose up -d停止docker-compose down4. 日志docker中日志通常输出到控制台不会输出到日志文件导致日志排查困难所以添加以下解决方案在resources下边添加logback.xml文件打进包中即可。?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod10 seconds debugfalse !-- 应用名称 -- contextNameapi/contextName !-- 向控制台输出日志 -- appender namestdout classch.qos.logback.core.ConsoleAppender encoder pattern%d{yyyy-M-d HH:mm:ss} [%thread] %p [%logger{0}]:%L %msg%n/pattern charsetUTF-8/charset /encoder /appender !-- 向文件输出日志 -- appender namefile classch.qos.logback.core.rolling.RollingFileAppender file./logs/admin-info.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern./logs/admin-info-%d{yyyy-MM-dd}.log/fileNamePattern maxHistory30/maxHistory /rollingPolicy encoder pattern%d{yyyy-M-d HH:mm:ss} [%thread] %p [%logger{0}]:%L %msg%n/pattern charsetUTF-8/charset /encoder /appender !-- druid连接池的日志级别 -- logger namecom.alibaba.druid levelDEBUG / !-- snow_credit的日志级别 -- logger namecn.enilu.flash levelDEBUG / !-- root级别的logger -- root levelINFO appender-ref reffile / appender-ref refstdout / /root /configuration四、安装nginx1. 下载nginxdocker pull nginx默认下载最新稳定版本如果想指定版本号则为docker pull nginx:1.24.0。2. 配置docker-composeversion: 3 #版本号services:nginx:image: nginx:1.24.0 # 镜像nginx:1.24.0container_name: nginx # 容器名为nginxrestart: always # 指定容器退出后的重启策略为始终重启但是不考虑在Docker守护进程启动时就已经停止了的容器volumes:# 数据卷挂载路径设置,将本机目录映射到容器目录冒号前边的是本地目录后边的容器中对应目录- /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf # 存放主配置文件的位置- /root/nginx/html:/usr/share/nginx/html #存放html文件的位置- /root/nginx/log:/var/log/nginx # 存放日志文件的位置- /root/nginx/www:/var/www # 存放前端文件的位置- /root/nginx/cert:/usr/share/nginx/conf/cert # 存放https文件的位置- /root/nginx/conf/conf.d:/etc/nginx/conf.d # 存放虚拟机文件的位置environment: # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8ports: # 映射端口- 80:80- 443:443privileged: true3.启动nginx启动docker-compose up -d停止docker-compose down五、部署前端项目1. 上传前端项目到nginx下的www文件夹2. 添加前端到nginx配置文件user nginx;worker_processes auto;error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;events {worker_connections 1024;}http {}# 配置前端的serverserver {listen 65501; #端口# server_name example.com; #域名add_header Strict-Transport-Security max-age15768000;client_max_body_size 50M;location / {root /var/www/admin-ui; #指定前端文件的地址index index.html;}}#配置后端的serverserver {listen 8888; #端口# localhost; #域名location / {proxy_pass http://127.0.0.1:8082; #这里为127.0.0.1 如果访问不通可以改为服务器外网ipproxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 5;proxy_http_version 1.1;proxy_cache_bypass $http_upgrade;}}include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;}3. 配置nginx的docker-compose注意需要将前端和后端的端口添加到docker-compose中的ports下否则会导致nginx启动后断后任然报错访问不到的情况。ports: # 映射端口- 80:80- 443:443- 65501:65501- 8888:88884. 启动nginx启动docker-compose up -d停止docker-compose down————————————————版权声明本文为CSDN博主「暗夜里的一束光」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询