从0 开始项目用docker 部署

发布于:2025-08-13 ⋅ 阅读:(11) ⋅ 点赞:(0)

1.创建虚拟机

可以参考B站:VMware 创建 CentOS 虚拟机_哔哩哔哩_bilibili

这个博主

下载地址:centos-vault-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云

2.安装docker

下载地址:Index of linux/static/stable/

选择X86_64的可以选择

下载然后放到/home路径下

切换到home路径下

cd /home/

1.安装docker

# 在home目录下解压
tar -xzvf  docker-24.0.7.tgz 

# 给docker执行文件赋予可执行权限
chmod 755 -R docker

# 复制docker到/usr/bin/目录下,使docker命令可以执行
cp docker/* /usr/bin/

# 清理解压后的不需要的文件
rm -rf docker  docker-24.0.7.tgz 

2.配置 docker 服务

# 创建docker.service文件
cd /etc/systemd/system/
touch docker.service
vi docker.service

docker.service配置文件

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=8
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

a插入,复制后Esc 然后shift+:然后输入wq保存退出

赋予 docker 服务配置文件的执行权限

sudo chmod +x /etc/systemd/system/docker.service

3.注册阿里云网站:

首先访问阿里云网站:

阿里云-计算,为了无法计算的价值

注册一个账号。

1.开通镜像服务

登录后再次访问 阿里云-计算,为了无法计算的价值; 在首页的产品中,找到阿里云的容器镜像服务

2.配置镜像加速

配置的文档说明:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["自己的阿里云加速"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 启用docker服务开机自启动
systemctl enable docker.service

# 重启Docker
systemctl restart docker

# 检查docker服务状态
systemctl status docker

# 查看安装的docker版本
docker -v

出现这样就安装完成docker了

3.安装docker compos

1.到gitHub上下载

docker compos  v2.21.0路径如下:Release v2.21.0 · docker/compose · GitHub

2.然后复制到/home路径下:

cd /home/

3.然后赋予可执行权限​​:

chmod +x docker-compose-linux-x86_64

4.移动到 /usr/local/bin并重命名​:

sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

5.验证安装​:

docker-compose version

出现:

说明成功安装了

4.安装必要镜像

1.将下面文件传到root目录下

然后在root路径下安装镜像

 docker load -i mysql.tar 

docker load -i nginx.tar

 docker load -i jdk.tar 

查看镜像:

 docker images

出现说明成功;

5.构建结构

其中conf放的是数据库的格式:

[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

1.然后测试数据库镜像是否成功:

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

docker ps

出现

说明成功;

2.创建nginx目录

等会部署需要用到

6.数据库

1.用数据卷的方法挂载数据库到本地

现删除开始创建的mysql容器

docker rm -f mysql

创建并运行新mysql容器,挂载本地目录

docker run -d \
  --name mysql \
  -p 3308:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v ./mysql/data:/var/lib/mysql \
  -v ./mysql/conf:/etc/mysql/conf.d \
  -v ./mysql/init:/docker-entrypoint-initdb.d \
  mysql

2.连接数据库

不知道Ip可以用查看

ip addr

然后

就有我们上传上去的表

7.部署redis

1.上传tar包

创建数据结构:

 mkdir -p redis/{conf,data}

编辑配置文件:

vi redis/conf/redis.conf

类容:

# 允许任何主机访问redis
# bind 127.0.0.1

# 禁用保护模式
protected-mode no

# 端口6379(默认)
port 6379

# 不允许守护进程模式(设置允许与参数-d冲突,容器无法启动)
daemonize no

# 访问密码
requirepass 123456

部署:

docker run --name myredis -d \
  -p 6379:6379 \
  -v /root/redis/conf:/etc/redis \
  -v /root/redis/data:/data \
  redis \
  redis-server /etc/redis/redis.conf

用客户端连接工具测试:

7.项目打包:

1.准备工作

修改配置

打包:

上传到root目录下;

其中Dockerfile启动文件为:

# 基础镜像

FROM openjdk:11.0-jre-buster

# 设定时区

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 拷贝jar包

COPY sky-server.jar /app.jar

# 入口

ENTRYPOINT ["java", "-jar", "/app.jar"]

2.创建一个网络:

docker network create sky

1.构建项目镜像,不指定tag,则默认为latest

docker build -t sky-server .

查看镜像:

docker images

 3.创建并运行容器

docker run -d --name sky-server --network sky -p 8024:8024 sky-server

等前端部署完毕后,一起联调

8.部署前端:

把html的文件传入Luxn中

编写配置文件:nginx.conf

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    
    # WebSocket支持
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
    
    upstream backend_servers {
        server sky-server:8024;
    }
    
    server {
        listen       8042;
        server_name  localhost;
        
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;  # 替换if判断更高效
        }
        
        # 关键修改:精确匹配登录接口
        location = /api/employee/login {
            proxy_pass http://backend_servers/admin/employee/login;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout 60s;
        }
        
        # 通用API规则(保留其他接口支持)
        location /api/ {
            proxy_pass http://backend_servers/admin/;
            proxy_set_header Host $host;
        }
        
        # 用户端API
        location /user/ {
            proxy_pass http://backend_servers/user/;
            proxy_set_header Host $host;
        }
        
        # WebSocket支持
        location /ws/ {
            proxy_pass http://backend_servers/ws/;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
        
        error_page   404 500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

部署命令:

 docker run -d \
   --name nginx \
  -p 8042:8042 \
   -v /root/nginx/html:/usr/share/nginx/html \
  -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /root/nginx/logs:/var/log/nginx \
   --network sky \
   nginx

9.用docker compos部署:

1.删除已经存在的镜像


删除旧容器
docker rm -f $(docker ps -qa)

删除sky镜像
docker rmi sky

# 4.清空MySQL数据
rm -rf mysql/data

删除原有创建的sky网络
docker network rm sky

2.上传上传docker-compose.yml

配置文件为:

version: '1'

services:
  mysql:
    image: mysql
    container_name: mysql
    restart: always
    ports:
      - "3308:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: "123456"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/init:/docker-entrypoint-initdb.d
    networks:
      - sky

  redis:
    image: redis
    container_name: redis
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - /root/redis/conf:/etc/redis
      - /root/redis/data:/data
    command: redis-server /etc/redis/redis.conf
    networks:
      - sky

  sky-server:
    build: .
    container_name: sky-server
    restart: always
    ports:
      - "8024:8024"
    networks:
      - sky
    depends_on:
      - mysql
      - redis

  nginx:
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - "8042:8042"
    volumes:
      - /root/nginx/html:/usr/share/nginx/html
      - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /root/nginx/logs:/var/log/nginx
    networks:
      - sky
    depends_on:
      - sky-server

networks:
  sky:
    driver: bridge

3.运行:

 docker-compose up -d

出现:

说明成功

10,测试

输入:http://虚拟机的ip:8042/#/login

点击登录:

看其他功能:

正常,去用户端:

说明成功


网站公告

今日签到

点亮在社区的每一天
去签到