部署前请先安装docker以及docker-compose,已经安装的请跳过,未安装的同学到我的文章中有docker以及docker-compose的安装方法。
一、 下载基础镜像
1. 搜索想下载的镜像
docker search ×× //××代表想要查找的镜像
如:
docker search openjdk
1.下载jdk8镜像
sudo docker pull openjdk:8-jre
2. 下载mysql镜像
sudo docker pull mysql:8.0.21
二、创建容器
本文以mysql演示以基础镜像创建容器运行
1. 创建docker-compose.yml文件
vim /root/data/mysql/docker-compose.yml
2. 创建数据挂载
mkdir -p /root/mysql/data
mkdir -p /root/mysql/config
3. 编辑docker-compose.yml
version: '3'
services:
mysql:
# 指定容器的名称
container_name: mysql
# 指定镜像和版本
image: mysql:8.0.21#端口映射,将 mysql的3306映射到32306对外访问
ports:
- "32306:3306"#配置容器在退出时自动重启
restart: always
# 容器日志大小配置
logging:
driver: 'json-file'
options:
max-size: '3g'
environment:
# 配置root密码
MYSQL_ROOT_PASSWORD: uksuh123TZ: Asia/Shanghai
volumes:# 挂载数据目录
- /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-set=utf8mb4
socket=/var/lib/mysql/mysql.sock###### [mysql]配置模块 ######
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
socket=/var/lib/mysql/mysql.sock###### [mysqld]配置模块 ######
[mysqld]
port=3306
user=mysql
# 设置sql模式 sql_mode模式引起的分组查询出现*this is incompatible with sql_mode=only_full_group_by,这里最好剔除ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id = 1# MySQL8 的密码认证插件 如果不设置低版本navicat无法连接
default_authentication_plugin=mysql_native_password# 禁用符号链接以防止各种安全风险
symbolic-links=0# 允许最大连接数
max_connections=1000# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB# 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=0
max_allowed_packet=16M# 设置时区
default-time_zone='+8:00'
5. 启动容器
启动:docker-compose up -d
停止:docker-compose down
三、部署java项目
1. 上传jar包
admin-2.1.jar
2. 编写docker-compose发布jar
version: '3'
services:#服务的名称
admin:
restart: always# 使用jdk基础镜像
image: openjdk:8-jre#指定容器名称
container_name: admin
ports:
- '8080:8080'
volumes:#配置日志输出
- ./logs/:/logs/# 将jar包挂载到jdk容器,并命名为app.jar
- ./admin-2.1.jar:/app.jar
environment:
- TZ=Asia/Shanghai
- SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&characterEncoding=UTF8&useSSL=false
- SPRING_DATASOURCE_USERNAME=root
- SPRING.DATASOURCE.PASSWORD=usjshb123
- KNIFE4J.PRODUCTION=true# 启动时执行该命令
command: java -server -jar app.jar
3. 启动容器
启动:docker-compose up -d
停止:docker-compose down
4. 日志
docker中日志通常输出到控制台,不会输出到日志文件,导致日志排查困难,所以添加以下解决方案:
在resources下边添加logback.xml文件,打进包中即可。
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds" debug="false"> <!-- 应用名称 --> <contextName>api</contextName> <!-- 向控制台输出日志 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-M-d HH:mm:ss} [%thread] %p [%logger{0}]:%L %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 向文件输出日志 --> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>./logs/admin-info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>./logs/admin-info-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-M-d HH:mm:ss} [%thread] %p [%logger{0}]:%L %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- druid连接池的日志级别 --> <logger name="com.alibaba.druid" level="DEBUG" /> <!-- snow_credit的日志级别 --> <logger name="cn.enilu.flash" level="DEBUG" /> <!-- root级别的logger --> <root level="INFO"> <appender-ref ref="file" /> <appender-ref ref="stdout" /> </root> </configuration>
四、安装nginx
1. 下载nginx
docker pull nginx
默认下载最新稳定版本,如果想指定版本号,则为docker pull nginx:1.24.0。
2. 配置docker-compose
version: '3' #版本号
services:
nginx:
image: nginx:1.24.0 # 镜像nginx:1.24.0
container_name: nginx # 容器名为'nginx'
restart: 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命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
ports: # 映射端口
- 80:80
- 443:443
privileged: true
3.启动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 {
}# 配置前端的server
server {
listen 65501; #端口
# server_name example.com; #域名
add_header Strict-Transport-Security max-age=15768000;
client_max_body_size 50M;location / {
root /var/www/admin-ui; #指定前端文件的地址
index index.html;
}
}#配置后端的server
server {
listen 8888; #端口# localhost; #域名
location / {
proxy_pass http://127.0.0.1:8082; #这里为127.0.0.1 如果访问不通,可以改为服务器外网ip
proxy_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:8888
4. 启动nginx
启动:docker-compose up -d
停止:docker-compose down
————————————————
版权声明:本文为CSDN博主「暗夜里的一束光」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。