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

点击后进入控制台:

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

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

具体命令如下:
# 创建目录
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包的名字)
# 基础镜像
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文件
version: "3.8"services:# MySQL 服务mysql:image: mysql:5.7container_name: mysqlports:- "6070:3306" # 映射容器的3306端口到宿主机的6070端口environment:TZ: Asia/ShanghaiMYSQL_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: rediscontainer_name: redisports:- "6071:6379" # 映射容器的6379端口到宿主机的6071端口volumes:- "/docker/redis/data:/data" # Redis数据存储networks:- iot-net # 使用iot-net网络# 自定义的IoT服务iot:build: context: .dockerfile: Dockerfilecontainer_name: iotports:- "6072:6072" # 映射容器的6072端口到宿主机的6072端口networks:- iot-net # 使用iot-net网络depends_on:- mysql # 依赖MySQL服务- redis # 依赖Redis服务# Nginx 服务nginx:image: nginxcontainer_name: nginxports:- "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)
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.htmlindex 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.htmlindex 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查看具体服务日志,排查问题。

