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

相关推荐
Acrelhuang几秒前
直击新能源电能质量痛点:安科瑞 APView500 在线监测装置应用方案
大数据·运维·开发语言·人工智能·物联网
一条咸鱼¥¥¥3 分钟前
【运维经验】服务器设置磁盘阵列
运维·服务器
CNRio4 分钟前
第二章-镜像深度解析:Docker的‘千层蛋糕‘魔法
运维·docker·容器
hweiyu0010 分钟前
Linux 命令:fdisk
linux·运维·服务器
宠..31 分钟前
创建文本框控件
linux·运维·服务器·开发语言·qt
哦你看看39 分钟前
K8S-Pod资源对象
java·容器·kubernetes
T***u33343 分钟前
后端文件存储架构设计
运维
zhongtianhulian44 分钟前
江苏设备管理平台哪家好
大数据·运维·python
翼龙云_cloud1 小时前
阿里云渠道商:什么是无影云电脑?
运维·阿里云·云计算·电脑
weixin_307779131 小时前
Jenkins Branch API插件详解:多分支项目管理的核心引擎
java·运维·开发语言·架构·jenkins