一、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 身份验证机制;客户端不支持新的加密方式。
连接建立后,之后在里面导若依数据库
四、后端部署
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➕端口号,这里是我自己的