Docker部署若依前后端项目从零到一

268 阅读12分钟

使用FinalShell连接远程服务器,连接成功后开始安装所需的服务

一、docker的安装与卸载

安装

1.配置阿里镜像环境(安装依赖包所需的)

进入 /etc/yum.repos.d/ 文件夹下找到 CentOS-Base.repo (可以先将此文件copy一份)文件,将以下内容替换整个文件内容:

[base]
name=CentOS-$releasever - Base - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - Aliyun
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

接着往下按顺序执行:

1.安装依赖包:

安装 yum工具:

yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken

image.png

2.更新本地镜像源:

# 分别运行以下三个命令
# 设置docker镜像源 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#运行完下面这个命令,/etc/yum.repos.d/文件夹下会出现docker-ce.repo文件
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

image.png

3.安装 Docker:

现在,你可以安装最新版本的 Docker:

yum install -y docker-ce

image.png

4.启动 Docker 服务:

安装完成后,启用并启动 Docker 服务:

//分别运行以下四个命令
# 关闭防火墙
systemctl stop firewalld 
# 禁止开机启动防火墙
systemctl disable firewalld
sudo systemctl enable docker
sudo systemctl start docker

5.检查DOCKER环境是否安装成功:

docker version

image.png

6.查看docker启动状态:

systemctl status docker

image.png

将docker迁移到指定路径下 (可选)

1.停止docker服务

在迁移之前,需要先停止 Docker 服务,避免在迁移过程中出现数据损坏或丢失的情况。

sudo systemctl stop docker

2. 查看当前 Docker 数据目录

默认情况下,Docker 数据目录为 /var/lib/docker,你可以通过以下命令确认:

docker info | grep "Docker Root Dir"

image.png

3. 创建目标文件夹

创建你想要迁移到的目标文件夹,并确保该文件夹有足够的磁盘空间。我是在home文件夹下创建了docker文件夹(/home/docker)

4.使用 yum 安装 rsync 工具

sudo yum install rsync

image.png

5. 迁移 Docker 数据

sudo rsync -avzP /var/lib/docker/ /home/docker/

6. 修改 Docker 配置

编辑 Docker 的配置文件 /etc/docker/daemon.json(如果该文件不存在,可以创建它)。在文件中添加或修改以下内容:

{
    "data-root": "/home/docker"
}

7. 启动 Docker 服务

修改配置后,启动 Docker 服务并检查是否正常运行。

sudo systemctl restart docker
sudo systemctl status docker

8. 验证迁移结果

通过以下命令再次查看 Docker 数据目录,确认是否已更新为新的目录。

docker info | grep "Docker Root Dir"

image.png

9. 清理旧数据(可选)

在确认 Docker 服务正常运行且数据迁移成功后,你可以选择删除旧的数据目录。但在删除之前,请务必谨慎确认,以免误删重要数据。

sudo rm -rf /var/lib/docker

卸载

1.查询所安装的docker包

yum list installed | grep docker

image.png

2.删除docker安装包

yum remove docker-ce.x86_64 -y

2.卸载旧版本 Docker(如果已安装) :

如果你之前已经安装了旧版本的 Docker,请先卸载它。可以使用以下命令来卸载旧版本的 Docker:

sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

注:如果按照上面的方式安装docker失败,试一下这个博主的(亲测有效):blog.csdn.net/qq_15752347…

一、为了方便管理先在服务器搭建整个文件结构(用来存放mysql、redis等服务,也是部署项目所需的服务),如果不自己搭建文件结构的话,docker有默认的存放路径,但是不方便查找

1.我是在服务器一级目录创建了data文件夹,然后data文件夹再新建ruoyi文件夹,然后进入ruoyi文件夹再新建如下的文件夹 image.png

2.对刚刚新建文件夹下,在新建以下文件夹

jdk文件夹: image.png

mysql文件夹: image.png

redis文件夹: image.png

nginx文件夹: image.png

二、使用docker拉取jdk、redis、mysql、nginx镜像

1.jdk镜像拉取命令:

docker pull kdvolder/jdk8 
//注意:如果没指定版本号默认下载最新(latest)

2.mysql镜像拉取命令:

docker pull mysql:latest
//拉取的是最新的

3.redis镜像拉取命令:

docker pull redis:latest

4.查看镜像是否拉取成功

docker images

如图:显示框中的内容,就代表拉取成功了 image.png

扩展:部署当中可能会用到的命令

docker rmi 镜像ID 
//删除镜像
//镜像ID也就是上图中的“IMAGE ID”

如果拉取镜像失败:

1).更换镜像源,进入到/etc/docker目录下找到daemon.json文件(如果没有此文件,自己手动创建一个),并在文件中写入以下内容:

{
    "registry-mirrors": [ "https://b83b84affe094dc59ef2ce1525e3c912.mirror.swr.myhuaweicloud.com" ],
    "data-root": "/home/docker"
}

image.png

2)重启docker

sudo systemctl restart docker

三、拉取过镜像后需要运行镜像所对应的jdk、redis、mysql容器(nginx容器放到最后在搞)

1.运行jdk容器,并将容器挂载到我们刚开始新建的jdk文件夹中的子文件夹(具体路径:/data/ruoyi/jdk/..)

docker run -di --name=jdk1.8 \
-v /data/ruoyi/jdk/data:/app/data \
-v /data/ruoyi/jdk/logs:/app/logs \
-v /data/ruoyi/jdk/conf:/app/config \
kdvolder/jdk8

运行成功返回一长串类型uuid的东东,表示docker容器已经运行了jdk。 image.png

通过命令查看已运行的容器:

docker ps

image.png 2.运行mysql容器

2.1运行容器前,先新建一个my.conf配置文件,把它放到mysql文件夹中的conf文件夹下(具体路径:/data/ruoyi/mysql/conf),j这个是数据库的配置文件,内容如下:

[client]
default-character-set = utf8
 
[mysql]
default-character-set = utf8
 
[mysqld]
init_connect = 'SET NAMES utf8'
init_connect = 'SET collation_connection = utf8_unicode_ci'
character-set-server = utf8
collation-server = utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv = /var/lib/mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links = 0
 
# Custom config should go here
!includedir /etc/mysql/conf.d/

2.2 运行mysql容器,并将容器挂载到我们刚开始新建的mysql文件夹中的子文件夹(具体路径:/data/ruoyi/mysql/..)

docker run -p 3306:3306 --name mysql01 \
-v /data/ruoyi/mysql/log:/var/log/mysql \
-v /data/ruoyi/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /data/ruoyi/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

//MYSQL_ROOT_PASSWORD是设置数据库的密码,账号默认的是root,用来连接数据库

运行成功后也会返回一长串数字和字母

通过命令查看已运行的容器:

docker ps

image.png 2.3接下来本地就可以连接mysql了 image.png

3.运行redis容器

3.1运行容器前,先新建一个redis.conf配置文件,把它放到redis文件夹中的conf文件夹下(具体路径:/data/ruoyi/redis/conf),这个是redis的配置文件,内容如下:

appendonly yes

3.2 运行redis容器,并将容器挂载到我们刚开始新建的redis文件夹中的子文件夹(具体路径:/data/ruoyi/redis/..)

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

上面指定了redis的端口6379,密码没有设置,然后用可视化软件redis-desktop-manager连接一下,看看是否有问题 image.png 连接redis成功,就没啥问题了

三、后端打包

1.首先把若依系统的代码修改一下,具体要修改的文件如下

image.png 配置你自己的数据库地址和redis地址以及打包的形式为jar包形式,然后直接打包成jar包放到服务器上/data/ruoyi路径下

2.并在/data/ruoyi下新建Dockerfile文件(注意:是文件不是文件夹)文件中的内容如下配置:

# 使用官方的OpenJDK镜像作为基础镜像
FROM openjdk:11
#将邮箱地址改为正确的邮箱
MAINTAINER 邮箱地址
#上传的jar包名称
ADD ruoyi-admin.jar app.jar
# 暴露应用程序使用的端口,也就是后端项目中所设置的端口
EXPOSE 8001 
# 定义容器启动时运行的命令
ENTRYPOINT ["java","-jar","app.jar"]
#输出信息和错误信息的记录
CMD ["java", "-jar", "app.jar"] > ruoyi.log 2>&1

image.png

3.开始构建后端镜像,进入到/data/ruoyi路径下,命令如下:

cd /data/ruoyi

4.进入到/data/ruoyi路径下后,执行下面的命令,大致意思就是把当前文件夹下的Dockerfile文件和jar包构建成ruoyi-admin镜像版本为1.0

docker build -t ruoyi-admin:1.0 .

然后开始启动后端容器,启动之前一定要确保redis和mysql运行成功,并把系统运行必须的数据导入到数据库了

docker run -it -d --name ruoyi-admin -p 8001:8001 ruoyi-admin:1.0

4.校验是否启动成功

curl http://localhost:8001

image.png

5.如果要在一台服务器部署多个后端项目(部署单个后端项目,请跳过这一块儿)

1.在同一个目录下多创建一个Dockerfile文件,但是因为已经有了一个Dockerfile文件了,所以最好将新创建的以及已有的Dockerfile文件改一下文件名(文件名可自定义,这里我定义为ruoyi-admin的文件名为Dockerfile1,另外一个项目cp-admin的文件名为Dockerfile2),改完之后将已有Dockerfile的文件里面的内容,复制到新建的Dockerfile文件里面(需要改动一些东西,1.上传的jar包名称 2.暴露的端口号)改完之后将后端项目打包上传到同一个目录下

2.以上都完成后将ruoyi-admin容器停止并删除掉,然后再将镜像给删掉,接下来开始构建两个项目的镜像,和单个部署项目的命令有一点点区别,需要指定Dockerfile文件了:

1)构建前,进入到/data/ruoyi路径下,命令如下:

cd /data/ruoyi

2)开始构建后端镜像

//ruoyi-admin
docker build -t ruoyi-admin:1.0 -f Dockerfile1 .
// -f后面跟的是刚刚创建的Dockerfile文件名
//第二个项目:cp-admin
docker build -t cp-admin:1.0 -f Dockerfile2 .
// -f后面跟的是刚刚创建的Dockerfile文件名

3.运行这两个项目的容器

//ruoyi-admin.jar
docker run -it -d --name ruoyi-admin -p 8001:8001 ruoyi-admin:1.0
//第二个项目cp-admin.jar
docker run -it -d --name cp-admin -p 8700:8700 cp-admin:1.0

4.接下来查看两个容器是否运行成功

docker ps

image.png

5.接下来校验是否启动成功

//ruoyi-admin
curl http://localhost:8001
//cp-admin
curl http://localhost:8700

image.png

注:如果失败试着修改Dockerfile中的openjdk版本,改完之后将镜像和容器删除掉,将上述步骤重来一遍

四.运行nginx容器,以及前端部署

4.1 先运行nginx容器,这里还没有指定文件夹,先往下走

docker run --name nginx01 -p 80:80 -d nginx

4.2 容器跑起来后,把里面的配置文件复制出来,放到nginx文件夹中的conf文件夹下(具体路径:/data/ruoyi/nginx/conf)

docker cp 容器ID:/etc/nginx/nginx.conf /data/ruoyi/nginx/conf
//容器ID指的是下图中标红框的
// /data/ruoyi/nginx/conf指的是要复制到的文件夹路径

image.png 复制后刷新以下conf文件夹,会多出一个nginx.conf配置文件

4.3 确定多出一个新的nginx.conf配置文件,然后把容器停掉并删除,以及对应的镜像也要删除,输入以下命令

停掉容器命令:

docker stop 容器名称
//容器名称也就是 nginx01

删除容器命令:

docker rm 容器名称
//容器名称也就是 nginx01

删除镜像命令:

docker rmi 镜像ID
//镜像ID上面内容提到过

可以运行以下命令检验

docker ps -a
//用来查看已运行的容器和停掉的容器:

4.4 运行nginx容器,并将容器挂载到我们刚开始新建的nginx文件夹中的子文件夹(具体路径:/data/ruoyi/nginx/..)

docker run --name nginx01 -p 80:80 \
-v /data/ruoyi/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/ruoyi/nginx/html:/usr/share/nginx/html \
-v /data/ruoyi/nginx/logs:/var/log/nginx \
-d nginx

4.5 部署前端页面,把系统前端页面打包,然后放到服务器/data/ruoyi/nginx/html路径下,其中dist文件夹就是前端打包生成的,这个就不介绍了,自行打包就可以了

image.png 4.6 修改4.3中多出来的nginx.cof配置文件,打开配置文件,在#gzip on后面添加如下内容:

server{
	  listen  80;
	  server_name localhost;
          #将localhost换成自己服务器ip
	  
	  #charset koi8-r;
	  #access_log logs/host.access.log main;
	  
	  location / {
                   root /usr/share/nginx/html/dist;#配置Vue项目根路径
                   index index.html index.html; #配置首页
                   try_files $uri $uri/ /index.html; #防止刷新报404
	       }
           
     #用于前后端打通
     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://localhost:8001/;
                   #将localhost:8080换成服务器ip及后端配置的端口
             }
 
    }

配置完成后重启nginx容器

先停掉nginx容器

docker stop 容器名称

然后重启nginx容器

docker restart 容器名称

4.7 访问http://服务器ip:80 image.png

4.8 如果要在一个nginx中上传两个前端项目,我是将第二个前端打包项目与第一个前端打包项目放在同一目录下

image.png

4.9 修改nginx.conf配置文件

#gzip  on;
    server{
      listen  80;
      server_name localhost;

          #将localhost换成自己服务器ip
      
      #charset koi8-r;
      #access_log logs/host.access.log main;
      
      location / {
                   root /usr/share/nginx/html/dist;#配置Vue项目根路径
                   index index.html index.html; #配置首页
                   try_files $uri $uri/ @router; #防止刷新报404
           }
      
      location /CP {
                   alias /usr/share/nginx/html/CP;#配置Vue项目根路径
                   index index.html index.html; #配置首页
                   try_files $uri $uri/ /CP/index.html; #防止刷新报404
           }
     location @router {
        rewrite ^.*$ /index.html last;
    }
           
     #用于前后端打通
     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://localhost:14012/;
                   #将localhost:8080换成服务器ip及后端配置的端口
             }
 
    }

修改完成后重启一下nginx,第一个项目用http://localhost 访问,第二个项目用http://localhost/CP 访问。

五、node.js项目的部署

现有一个名为my-node-api的node项目,如图:

image.png 5.1 在my-node-api目录下创建一个Dockerfile文件,如图:

image.png Dockerfile文件内容如下

# 使用官方 Node.js 镜像作为基础镜像
FROM node:latest

# 设置工作目录
WORKDIR /usr/src/app

# 将项目文件复制到容器中
COPY . .

# 将npm源设置为淘宝镜像
RUN npm config set registry https://registry.npmmirror.com/

# 安装项目依赖
RUN npm install

# 暴露端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

5.2 在服务器上/data/ruoyi/下创建node文件夹(具体路径:/data/ruoyi/node/),创建完后将my-node-api项目整个的放到/data/ruoyi/node/目录下,如图:

image.png

5.3 上传完成后 cd 到 /data/ruoyi/node/my-node-api目录下,如下命令:

cd /data/ruoyi/node/my-node-api

5.4 构建my-node-api项目的镜像,如下命令:

docker build -t my-node-api .

5.5 构建完成后,运行容器,如下命令:

docker run -d --name nodeJs -p 3000:3000 my-node-api

5.6 完成部署,输入 xx.x.x.xxx:3000 就可以成功访问node服务了

blog.csdn.net/jks212454/a…