安装docker
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
Shell
yum remove docker \
yum remove docker-client \
yum remove docker-client-latest \
yum remove docker-common \
yum remove docker-latest \
yum remove docker-latest-logrotate \
yum remove docker-logrotate \
yum remove docker-engine
2.配置Docker的yum库
首先要安装一个yum工具
Bash
yum install -y yum-utils
安装成功后,执行命令,配置Docker的yum源:
Bash
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
最后,执行命令,安装Docker
Bash
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动和校验
Bash
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速
这里以阿里云镜像加速为例。
5.1.注册阿里云账号
首先访问阿里云网站:
注册一个账号。
5.2.开通镜像服务
在首页的产品中,找到阿里云的容器镜像服务 :

点击后进入控制台:

首次可能需要选择立刻开通,然后进入控制台。
5.3.配置镜像加速
找到镜像工具 下的镜像 加速器:

页面向下滚动,即可找到配置的文档说明:

具体命令如下:
Bash
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
部署项目前准备
1.在拿到的服务器根目录中创建docker文件夹
1.1在docker文件夹中创建如下文件夹、文件、jar包

1.2mysql目录:conf放配置文件、data放数据文件、init放初始化文件

1.3nginx目录:config放配置文件、html放静态资源

1.4nginx配置文件

1.5静态资源、前端dist包

1.5Dockerfile文件(copy后放自己jar包的名字)
java
# 基础镜像
FROM openjdk:8-jdk-alpine
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY tiot-api.jar /iot.jar
# 入口
ENTRYPOINT ["java", "-jar", "/iot.jar"]
1.6docker-compose.yml文件
java
version: "3.8"
services:
# MySQL 服务
mysql:
image: mysql:5.7
container_name: mysql
ports:
- "6070:3306" # 映射容器的3306端口到宿主机的6070端口
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: test9988 # MySQL的root用户密码
volumes:
- "/docker/mysql/conf:/etc/mysql/conf.d" # MySQL配置文件
- "/docker/mysql/data:/var/lib/mysql" # MySQL数据存储
- "/docker/mysql/init/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d" # MySQL初始化脚本
networks:
- iot-net # 使用iot-net网络
# Redis 服务
redis:
image: redis
container_name: redis
ports:
- "6071:6379" # 映射容器的6379端口到宿主机的6071端口
volumes:
- "/docker/redis/data:/data" # Redis数据存储
networks:
- iot-net # 使用iot-net网络
# 自定义的IoT服务
iot:
build:
context: .
dockerfile: Dockerfile
container_name: iot
ports:
- "6072:6072" # 映射容器的6072端口到宿主机的6072端口
networks:
- iot-net # 使用iot-net网络
depends_on:
- mysql # 依赖MySQL服务
- redis # 依赖Redis服务
# Nginx 服务
nginx:
image: nginx
container_name: nginx
ports:
- "6073:6073" # 映射容器的6073端口到宿主机的6073端口
- "6074:6074" # 映射容器的6074端口到宿主机的6074端口
volumes:
- "/docker/nginx/config/nginx.conf:/etc/nginx/nginx.conf" # Nginx配置文件
- "/docker/nginx/html:/usr/share/nginx/html" # Nginx静态资源目录
depends_on:
- iot # 依赖IoT服务
networks:
- iot-net # 使用iot-net网络
networks:
iot-net:
name: iot # 定义iot-net网络
1.7nginx配置文件示例(指向jar包时url也需填成jar包的服务名称如iot)
java
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/json;
sendfile on;
keepalive_timeout 65;
server {
listen 6073; # 监听端口
server_name localhost; # 设置服务器名称
location / {
add_header Content-Security-Policy "frame-src 'self' https://yg.szbaohe.cn;"; # 添加 Content-Security-Policy 头信息
root /usr/share/nginx/html/qian; # 设置前端项目所在的根目录
# try_files $uri $uri/ /index.html; # 尝试查找静态文件,否则重定向到 index.html
index index.html index.htm; # 设置默认的索引文件
}
location /prod-api/ {
proxy_set_header Host $http_host; # 设置代理请求的头信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://iot:6072/; # 将请求代理到后端服务的地址
}
}
server {
listen 6074; # 监听端口
server_name localhost; # 设置服务器名称
location / {
add_header Content-Security-Policy "frame-src 'self' https://yg.szbaohe.cn;"; # 添加 Content-Security-Policy 头信息
root /usr/share/nginx/html/hou; # 设置前端项目所在的根目录
# try_files $uri $uri/ /index.html; # 尝试查找静态文件,否则重定向到 index.html
index index.html index.htm; # 设置默认的索引文件
}
location /prod-api/ {
proxy_set_header Host $http_host; # 设置代理请求的头信息
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://iot:6072/; # 将请求代理到后端服务的地址
}
}
}
1.8jar包打包时需注意mysql和redis地址写服务名而不是写url地址如下图


1.9上述工作准备完成后cd到/docker目录
1.10执行docker compose up -d即可完成一键部署启动docker compose down一键关闭移除

1.11docker compose logs iot查看具体服务日志,docker ps展示已运行的服务

1.12若是哪个服务启动异常可使用docker compose logs iot查看具体服务日志,排查问题。
