Docker的安装和将ruoyi项目部署到liunx中

一、docker安装

1.docker的概念

Docker 是一个开源的应用容器引擎。Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。它可以容器化一个应用程序及其依赖项,以作为一个单独的软件包(容器)来运行。

通俗解释:如果你开发好了一个项目,现在需要部署到服务器上。你希望一个操作就可以安装好mysql,redis,java等环境。那么你就需要docker进行跨平台开发。docker可以把我们所有需要的软件打包成一个镜像

镜像可以上传到dockerhub上。

2.decker的核心组件

镜像(Image) :它是 Docker 容器的模板,类似于虚拟机中的镜像。镜像是只读的,包含启动容器所需的文件系统、应用程序代码、库和配置信息等。可以从 Docker Hub(一个公共的镜像仓库)下载现有的镜像,也可以自己创建镜像。

容器(Container) :容器是镜像的运行实例。当运行一个容器时,Docker 会将镜像中的文件系统解压到内存中,并启动一个进程来运行应用程序。容器是隔离的、轻量级的运行环境。

仓库(Repository) :用于保存镜像的仓库,可以是公共的或者私有的。Docker Hub 是最大的公共仓库,用户可以在其中搜索和下载各种镜像。

二、docker安装

1、安装

#安装前先卸载操作系统默认安装的docker,
sudo apt-get remove docker docker-engine docker.io containerd runc

#安装必要支持
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

# 阿里源(推荐使用阿里的gpg KEY)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

#阿里apt源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#更新源
sudo apt update

#安装最新版本的Docker
sudo apt install docker-ce docker-ce-cli containerd.io

#查看Docker版本
sudo docker version

#查看Docker运行状态
sudo systemctl status docker

2、切换 docker 加速源

vim /etc/docke/daemon.json

{
  "registry-mirrors": [
    "https://docker.hpcloud.cloud",
    "https://docker.m.daocloud.io",
    "https://docker.unsee.tech",
    "https://docker.1panel.live",
    "http://mirrors.ustc.edu.cn",
    "https://docker.chenby.cn",
    "http://mirror.azure.cn",
    "https://dockerpull.org",
    "https://dockerhub.icu",
    "https://hub.rat.dev"
  ]
}

3、让切换生效

sudo systemctl daemon-reload
sudo systemctl restart docker

三、docker 部署若依的准备工作

1、拉取使用的镜像

(1)拉取镜像(jdk1.8)建议拉取openjdk

sudo docker pull java:8
sudo docker pull openjdk:8

(2)拉取镜像(MySQL)

sudo docker pull mysql:8.0.19

(3)拉取镜像(Redis)

sudo docker pull redis:6.0.8

(4)拉取镜像(Nginx)

sudo docker pull nginx:1.18.0

2、开启 mysql 容器:

下方代码中

# MYSQL_ROOT_PASSWORD=123456设置密码为‘123456’,可根据具体需求自行修改 # /myapp/mysql:/var/lib/mysql mysql路径容器挂载,可根据具体需求自行修改

sudo docker run --name mysql -v /myapp/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.19

3、开启 Redis容器:

#sudo docker run -d --name redis -p 6379:6379 redis:6.0.8 --requirepass "123456"
sudo docker run -d --name redis -p 6379:6379 redis:6.0.8 
# requirepass "123456"设置密码为‘123456’,可根据具体需求自行修改

4、Navicat for MySQL 连接 Docker中运行的Mysql2

ip为虚拟机中的地址

密码为:123456如果报错 1251错误参照下面的文档,你的mysql 8.0 默认使用 caching_sha2_password 身份验证机制;客户端不支持新的加密方式。

Navicat for MySQL 连接 Docker中运行的Mysql出现1251- Client does not support authentication protocol 错误_$a$005$thisisacombinationofinvalidsaltandpasswordt-CSDN博客

连接建立后,之后在里面导若依数据库

四、后端部署

1、修改idea中.yml中的代码

(1) 修改 application-druid.yml 文件 mysql 连接部分:修改 ip 地址,数据库名,账号,密码

(2) 修改后端并打包上传并创建镜像,修改 application.yml 文件 redis 连接部分:地址为虚拟机 ip 地址,密码为上方设置的密码

2、通过 idea 中的 maven 的package 打包上传到 Ubuntu 的(某个文件夹内:如:ruoyiFile)

打包:

(1)在linux中新建一个ruoyiFile 文件夹,将打包好的jar包上传至文件夹中,mkdir并创建一个 Dockerfile文件,cd进入 ruoyiFile ,vi Dockerfile 进入 Dockerfile 文件中,写入以下代码

#基础镜像使用openjdk1.8
FROM openjdk:8

#作者
MAINTAINER gou
 
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
 
# 将jar包添加到容器中并更名
ADD ruoyi-admin.jar app.jar
 
# 运行jar包
RUN bash -c 'touch /app.jar'
 
# 为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 
#ENTRYPOINT ["nohup","java","-jar","/data/cat/ruoyi-admin.jar","&"]
 
#暴露8080端口,后端系统启动端口
EXPOSE 8080

(2)在ruoyiFile 文件夹内通过Dockerfile 文件构建及镜像:

# 构建镜像(需在Dockerfile同级目录下构建)
sudo docker build -t network:1.0 .
# 镜像名称可根据自己的项目名称定义

(3)启动后端镜像

# 启动后端镜像
sudo docker  run -d --name ruoyi01 -p 8080:8080 network:1.0
# 查看后端镜像启动
sudo docker ps -a
# 如启动失败可进入日志查看失败原因、
sudo docker logs -f -t --tail 1000 [容器ID]

验证后端是否可以使用:访问 虚拟机 ip:8080/ 查看

五、部署前端

1、创建nginx工作目录

#需要一个conf文件存放目录,和html文件目录,及日志存放目录
#如果创建/Data的话会在根目录下创建,这样后端拉取前端文档的时候会出现错误或拉取不成功,尽量不加/
mkdir -p data/applications/nginx/conf
mkdir -p data/applications/nginx/html
mkdir -p data/logs

2、启动nginx,并迁移文件

# 1、启动nginx
sudo docker run --name nginx -p 80:80 -d nginx:1.18.0

# 2、迁移配置文件
# 复制配置
sudo docker cp nginx:/etc/nginx/nginx.conf /data/applications/nginx/conf/nginx.conf
sudo docker cp nginx:/etc/nginx/conf.d /data/applications/nginx/conf/conf.d
sudo docker cp nginx:/usr/share/nginx/html /data/applications/nginx/
 
#先用  命令 找到对应容器ID
sudo docker ps –a
#找到Nginx ID
#才可以删除容器
sudo docker rm -f [容器ID]

3、重新启动nginx

#注意-v中的/home/是你的liunx命名 可以先pwd一下看自己的位置
#例如上面中的我的pwd是/home/sy
docker run -d \
-p 80:80 \
-p 443:443 \
--name nginx \
--restart=always \
-e TZ="Asia/Shanghai" \
-v /home/sy/data/applications/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/sy/data/applications/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/sy/data/logs/nginx:/var/log/nginx \
-v /home/sy/data/applications/nginx/html:/usr/share/nginx/html \
-v /home/sy/data/applications/nginx/cert:/etc/nginx/cert \
nginx:1.18.0

# 如不需要绑定域名可以不用配置-v /data/applications/nginx/cert:/etc/nginx/cert \

–privileged=true # 容器内被赋予root权限

-v /data/applications/nginx/html:/usr/share/nginx/html # 挂载的静态文件目录

-v /data/applications/nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载的nginx配置文件目录

-v /data/applications/nginx/logs:/var/log/nginx #挂载nginx日志文件

-v /data/applications/nginx/cert: /etc/nginx/cert # ssl证书挂载目录

 

4、打包上传前端:

可以在IDEA中在前端包右击打开终端

首先npm i 导包

执行下面语句打包

#在Windows下的vue项目文件夹内执行(prod生产环境)
npm run build:prod

将打包的dist下文件的内容移动至/data/applications/nginx/html/目录下,前面我们在启动nginx时将该目录作为挂载的静态文件目录

 

5、配置nginx(将上传的页面设置为 nginx 页面)

进入

cd data/applications/nginx/conf/conf.d/目录下

配置default.conf文件

sudo vi default.conf

里面的:[服务器IP]写自己本机的ip,[服务器内网IP]:[端口号]写虚拟机和它后端的端口

server{
                listen 80;  #前端启动端口
                server_name [服务器IP];

                location / {
                        root /usr/share/nginx/html;   #指向前端项目
                        try_files $uri $uri/ @router; #解决404问题的关键行
                        index index.html index.htm;
                }

                 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 X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header REMOTE-HOST $remote_addr;
                        proxy_pass http://[服务器内网IP]:[端口号]/;  #服务器内网IP+后端启动端口号
                }
        }

修改后保存并退出,重新启动nginx容器

#先用 [docker ps – a] 命令 找到对应容器ID
#重启nginx
docker restart [容器ID]

# 查看容器是否启动成功
docker ps -a

最后访问192.168.188.128.80端口显示即成功

你自己ip➕端口号,这里是我自己的

 

 

### 微服务打包部署Linux服务器教程 #### 准备阶段 为了顺利地将微服务应用部署Linux服务器,前期准备至关重要。这不仅涉及到了解目标环境的具体情况,还需要准备好必要的工具服务。现代化、开源的Linux服务器运维管理面板如1Panel可以提供可视化的操作界面简化这一过程[^1]。 #### 构建可执行文件或容器镜像 对于基于Java构建的微服务项目,在本地环境中完成开发测试后,需将其编译为独立的JAR包形式以便于传输部署。此步骤通常借助Maven或Gradle等构建工具实现自动化处理。随后这些被打包好的应用程序将会被上传至远程主机上指定位置等待进一步的操作[^2]。 #### 配置与优化 考虑到实际生产环境下可能存在的高并发请求场景,建议引入诸如Sentinel这样的流量控制组件来保障系统的稳定性安全性。具体做法是在正式迁移之前先安装好对应版本的服务端程序,并按照官方文档指导调整相关参数设置以适应特定需求[^3]。 #### 使用Docker进行容器部署 作为一种轻量级虚拟化解决方案,Docker能够有效解决不同操作系统之间兼容性问题的同时还提供了更加便捷高效的资源隔离机制。通过编写`dockerfile`定义所需运行时环境并将先前制作好的二进制文件作为基础映像层之一加入其中最终形成完整的镜像制品;接着利用`docker-compose.yml`描述多容器间协作关系从而达成一键式启动整个业务集群的效果[^4]。 ```yaml version: '3' services: service-name: image: your-image-name ports: - "host-port:container-port" environment: - ENV_VAR=value ``` #### 启动验证 当一切准备工作完成后就可以尝试着去激活新搭建起来的服务实例了。此时应当密切关注日志输出状况确保没有任何异常报错发生。另外还可以试着发起一些简单的API调用来检验其响应速度及准确性等方面的表现是否满足预期要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值