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

相关推荐
你的人类朋友1 小时前
😎 Node.js 应用多阶段构建 Dockerfile 详解
后端·docker·容器
victory04312 小时前
K8S NFS 静态配置和动态配置 StorageClass
云原生·容器·kubernetes
运维 小白2 小时前
k8s 部署NFS和动态供应器
云原生·容器·kubernetes
luyun0202022 小时前
Windows 11操作更丝滑,绝了
java·运维·figma
wanhengidc3 小时前
全面了解云手机的安全性
运维·服务器·游戏·智能手机·云计算
hweiyu003 小时前
Docker(K8S)容器架构教程(视频教程)
docker·架构·kubernetes
menge23334 小时前
Linux DNS域名解析服务器练习
linux·运维·服务器
努力成为一个程序猿.4 小时前
Clickhouse数据副本和分片
运维·clickhouse·debian
emiya_saber5 小时前
Linux 进程调度管理
linux·运维·服务器