文章目录
基于ry开发的项目,要部署上线。选用docker来部署,比较简单,折腾了很久。写一个完整的流程
安装docker
卸载docker
首先卸载原来存在的docker,如果没有安装过可以不用卸载yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-selinux
docker exec -it
ruoyi-mysql mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
配置dokce的yum源工具
```plain sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ```配置为yum的源为阿里云源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum源建立缓存
sudo yum makecache fast
安装docker
```plain yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ```启动和校验docker
```plain # 启动Docker systemctl start docker停止Docker
systemctl stop docker
重启
systemctl restart docker
设置开机自启
systemctl enable docker
执行docker ps命令,如果不报错,说明安装启动成功
docker ps
dps命令查看正在运行的容器名称,dis查看已经拉去的镜像源
![](https://cdn.nlark.com/yuque/0/2024/png/38629240/1726832899839-0ed68bd7-fdfe-4ea8-8581-8b0e26ef0e23.png)![](https://cdn.nlark.com/yuque/0/2024/png/38629240/1726832942334-1c15f088-f42b-48f9-8136-7e45acd97888.png)
<h2 id="Uoqjv">配置docker的镜像</h2>
如果不配置docker的镜像网站,那么后序的安装都可以出现问题,国内很多的镜像源都不能使用。
这是截至2024-9-19能够使用的镜像源:
[docker镜像加速源配置,目前可用镜像源列举(9月19日更新最新可用)_docker可用的镜像源-CSDN博客](https://blog.csdn.net/llc580231/article/details/139979603)
```plain
//进入docker的镜像源配置文件
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"
]
}
重启docker服务才能生效
service docker restart
本地通过docker run 创建容器,容器需要镜像,镜像从远程拉取
docker基础命令
安装mysql数据库
```plain docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql ```- docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
- –name mysql : 给容器起个名字叫mysql,你可以叫别的
- -p 3306:3306 : 设置端口映射。
- 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
- -e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
- 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
- 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
- mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像
- 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
- 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
基础命令
```plain docker pull 从远程拉去镜像 docker images 简写 dis 查看本地的镜像 dis docker ps -a 查看容器 dps docker logs 查看容器允许日志 docker exec 进入容器 docker inspect 查看容器详细信息 docker rmi 删除本地镜像 dokcer run 创建并允许容器 docker stop 停止镜像 docker start 启动 docker restart 重新启动 ```用这幅图来描述这些命令:
给docker命令起别名,可以快速的使用命令。
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
让别名生效
source /root/.bashrc
数据卷
容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦。
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
基本命令
| docker volume create | 创建数据卷 | | :---: | :---: | | docker volume ls | 查看所有数据卷 | | docker volume rm | 删除指定数据卷 | | docker volume inspect | 查看某个数据卷的详情 | | docker volume prune | 清除数据卷 |创建nginx的数据卷
```plain # 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷 docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx2.然后查看数据卷
docker volume ls
结果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html
3.查看数据卷详情
docker volume inspect html
结果
[
{
“CreatedAt”: “2024-05-17T19:57:08+08:00”,
“Driver”: “local”,
“Labels”: null,
“Mountpoint”: “/var/lib/docker/volumes/html/_data”,
“Name”: “html”,
“Options”: null,
“Scope”: “local”
}
]
4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r–r–. 1 root root 497 12月 28 2021 50x.html
-rw-r–r–. 1 root root 615 12月 28 2021 index.html
5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
6.打开页面,查看效果
7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash
<h2 id="GL8cw">DockerCompose</h2>
复杂的项目会有各种的中间件需要配置,正常部署Java项目、nginx、mysql就行了。
复杂的还有redis、mq、mino这些内容,如果都一一部署就比较繁琐。
而Docker Compose就可以帮助我们实现**多个相互关联的Docker容器的快速部署**。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
<h3 id="j9DPA">yml文件配置</h3>
```plain
version: "3.8" 版本
services:
mysql:
image: mysql #镜像 可以指定版本号
container_name: mysql #容器名称
ports: #端口 前面是宿主机器端口 后面是容器内的端口
- "3306:3306"
environment: #配置环境
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes: #配置数据卷
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
networks:
- new
networks:
new: 定义了一个自定义网络 new,并将其命名为 hmall。所有在该网络中的容器可以通过其服务名互相通信。
name: hmall
这个 Docker Compose 文件启动了一个 MySQL 容器,使用了官方的 MySQL 镜像,设置了容器名称和网络,通过环境变量设置时区和 MySQL root 密码。通过 volumes 实现了 MySQL 配置和数据的持久化存储,并通过网络配置,允许该服务与其他容器互通。
部署命令
编写好docker compose之后部署命令如下#部署好项目
docker compose up -d
部署ry前后端分离项目
需要配置四个容器mysql、nginx、Java服务端、redis。
采用compose的去部署。
配置文件下载:vue-docker.zip
version: '3.8'
services:
ruoyi-mysql:
container_name: ruoyi-mysql
image: mysql:8.0.29
build:
context: .
dockerfile: mysql-dockerfile
ports:
- "3306:3306"
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
command: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ]
environment:
MYSQL_DATABASE: 'ry-vue'
MYSQL_ROOT_PASSWORD: 123456
ruoyi-redis:
container_name: ruoyi-redis
image: redis:3.2.100
build:
context: .
dockerfile: redis-dockerfile
ports:
- "6379:6379"
volumes:
- ./conf/redis.conf:/home/ruoyi/redis/redis.conf
- ./redis/data:/data
command: redis-server /home/ruoyi/redis/redis.conf
ruoyi-nginx:
container_name: ruoyi-nginx
image: nginx:1.24.0
build:
context: .
dockerfile: nginx-dockerfile
ports:
- "80:80"
volumes:
- ./html/dist:/home/ruoyi/projects/ruoyi-ui
- ./conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- ruoyi-server
links:
- ruoyi-server
ruoyi-server:
container_name: ruoyi-server
build:
context: .
dockerfile: ruoyi-dockerfile
ports:
- "8080:8080"
volumes:
- ./ruoyi/logs:/home/ruoyi/logs
- ./ruoyi/uploadPath:/home/ruoyi/uploadPath
depends_on:
- ruoyi-mysql
- ruoyi-redis
links:
- ruoyi-mysql
- ruoyi-redis
前端打包成dist文件夹。放在html的目录下面。
conf下面存放配置文件
后端通过maven package打包成jar包
在cmd中运行jar包的命令:
java -jar xxx.jar
通过xshell上传到服务器上面。
docker安装minio
检查linux的内核版本。
![](https://img-blog.csdnimg.cn/img_convert/58b6ce9c7c0101e9e403832c9b5a05f8.png)5.4版本的linux内核可以使用minio。
拉去minio镜像
docker pull minio/minio
9000的接口是给Java或者python去调用的。
9001的接口是用来登录平台的。
#最近更新的命令
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio1 \
-v /home/minio/data:/data \
-e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
minio/minio server /data --console-address ":9001"
配置在服务器上面需要打开服务器的防火墙。
访问这张图片:通过9000端口来访问。
服务器的地址+端口+桶的名称+文件夹+文件名。
登录控制台: