docker一键部署项目

安装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.注册阿里云账号

首先访问阿里云网站:

https://www.aliyun.com/

注册一个账号。

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查看具体服务日志,排查问题。

相关推荐
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn863 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875243 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant