Docker学习和部署ry项目

文章目录

  • 停止Docker
  • 重启
  • 设置开机自启
  • 执行docker ps命令,如果不报错,说明安装启动成功
  • 2.然后查看数据卷
  • 结果
  • 3.查看数据卷详情
  • 结果
  • 4.查看/var/lib/docker/volumes/html/_data目录
  • 可以看到与nginx的html目录内容一样,结果如下:
  • 5.进入该目录,并随意修改index.html内容
  • 6.打开页面,查看效果
  • 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化

基于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 nginx

2.然后查看数据卷

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端口来访问。

服务器的地址+端口+桶的名称+文件夹+文件名。

登录控制台:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888645.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink源码剖析

写在前面 最近一段时间都没有更新博客了&#xff0c;原因有点离谱&#xff0c;在实现flink的两阶段提交的时候&#xff0c;每次执行自定义的notifyCheckpointComplete时候&#xff0c;好像就会停止消费数据&#xff0c;完成notifyComplete后再消费数据&#xff1b;基于上述原因…

kubernetes 中的微服务

微服务&#xff1a;用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f;需要通过微服务暴漏出去后才能被访问 - Service是一组提供相同服务的Pod对外开放的接口。 - 借助Service&#xff0c;应用可以实现服务发现和负载均衡。 - service默认只支持…

带隙基准Bandgap电路学习(一)

一、原理图 Bandgap中的运放&#xff08;折叠式Cascode&#xff09;采用P输入对&#xff0c;是因为运放输入端接的PNP三极管发射极端的电位&#xff0c;电压小&#xff0c;为了确保输入对管能够饱和工作&#xff0c;故采用P输入对管。此外&#xff0c;P管作为输入管&#xff0c…

【HTTPS】深入解析 https

我的主页&#xff1a;2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的&#xff0c;可能会出现运营商劫持等安全问题&#xff0c;运营商通过劫持 http 流量&#xff0c;篡改返回的网页内容&#xff0c;例如广告业务&#xff0c;可能会通过 Referer 字段 来统计是…

springboot医院预约挂号系统

基于springbootvue实现的医院预约挂号系统 &#xff08;源码L文ppt&#xff09;4-085 4.1系统功能模块设计 医院预约挂号系统与数据分析系统在设计与实施时&#xff0c;采取了模块性的设计理念&#xff0c;把相似的系统的功能整合到一个模组中&#xff0c;以增强内部的功能…

【MySQL】DML数据操作语句和基本的DQL语句

目录 一、Mysql对数据的增删改 1. 增加数据 2. 修改数据&#xff08;UPDATE语句&#xff09; 3. 删除 3.1 delete、truncate、drop区别 二、DQL语言&#xff08;重点&#xff09; 1. 单表查询 1.1 最简单的查询 1.2 从表中获取数据 1.3 字段名起别名 1.4 添加字段 1…

计算机毕业设计 玩具租赁系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Java—逻辑控制与输入输出

各位看官&#xff1a;如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论&#xff0c;感谢您的支持&#xff01;&#xff01;&#xff01; 一.顺序结构&#xff1a; 我每天起床&#xff0c;躺在床上玩手机&#xff0c;然后吃中午饭&#xff0c;睡…

应用UX体验标准

1、应用导航 标准编号 2.1.1.1 系统返回 标准描述 所有界面都可以执行系统返回操作。 除一级界面外&#xff0c;所有全屏界面均需要提供返回/关闭/取消按钮。(全屏沉浸式场景除外) 测试方法 使用侧边返回手势&#xff0c;验证当前应用界面是否可以执行系统返回操作。检查…

一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)

背景 近日挖掘到一款名为“SnailJob”的分布式重试开源项目,它旨在解决微服务架构中常见的重试问题。在微服务大行其道的今天&#xff0c;我们经常需要对某个数据请求进行多次尝试。然而&#xff0c;当遇到网络不稳定、外部服务更新或下游服务负载过高等情况时&#xff0c;请求…

AI产品经理面试,背烂这100个问题就稳了

❎传统的产品经理&#xff0c;侧重于用户体验与业务流程的优化&#xff0c;强调“以人为本” ✅而AI产品经理更加注重的&#xff0c;视如何将技术应用在业务问题上 ➡虽然不需要会写代码&#xff0c;但也要深入理解AI模型的运作原理&#xff0c;包括大模型技术&#xff08;如…

scau:面向对象java实验作业1-2 猜数字游戏

题目名称实验1-2 猜数字游戏题目关键字数据类型 基本输入输出 控制语句 方法题目录入时间2022/10/10 11:01:37题目内容 使用Java程序&#xff0c;项目名称&#xff1a;GuessNumberGame&#xff0c;类根据自己需要定义。 程序开始运行后&#xff0c;允许玩家进行多次猜数字的游…

linux中的火墙优化策略

1.火墙介绍 1. netfilter 2. iptables 3. iptables | firewalld 2.火墙管理工具切换 在rocky9 中默认使用的是 firewalld firewalld -----> iptables dnf install iptables - services - y systemctl stop firewalld systemctl disable firewalld systemctl mask fi…

C++欧拉函数

题目一 求欧拉函数 解题思路 分解质因数&#xff1b;代入公式计算即可&#xff08;注意要防止计算出小数是结果不准&#xff09;&#xff1b; 代码实现 #include<iostream> #include<algorithm> #include<cmath>using namespace std;void Euler(int n) {i…

深入剖析递归算法:原理、特点、应用与优化策略

在上一篇文章&#x1f449;【剖析十大经典二叉树题目】中&#xff0c;运用到了大量的递归算法&#xff0c;故本文将解析递归算法。 目录 &#x1f4af;引言 &#x1f4af;递归算法的定义与原理 ⭐定义 ⭐原理 &#x1f4af;递归算法的特点 ⭐简洁性 ⭐可读性 ⭐通用性 …

MKV转MP4丨FFmpeg的简单命令使用——视频格式转换

MKV是一种视频封装格式&#xff0c;很好用&#xff0c;也是OBS的默认推荐录制格式&#xff0c;因为不会突然断电关机而导致整个视频录制文件丢失。 但是MKV无法直接导入PR中剪辑&#xff0c;最直接的方法是将MKV转换为MP4格式&#xff0c;最方便且安全无损的转换方法便是用FFmp…

leetcode C++特性 AIDL的一些细节

leetcode细节 C的一些特性 【C基础】std::move用法介绍-CSDN博客 c thread的join和joinable的区别_thread joinable-CSDN博客 C线程介绍_std::thread 头文件-CSDN博客 https://blog.csdn.net/weixin_46645965/article/details/136259902 【C】—— 观察者模式-CSDN博客 C 迭…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第3关---浦语提示词工程实践

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV1cU411S7iV/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/tree/camp3/docs/L1/Prompt 关…

Linux-分析 IO 瓶颈手册

分析IO瓶颈 此文主要内容&#xff1a;I/O性能重要指标、主要排查工具、主要排查手段、工具图示 磁盘 I/O 性能指标 四个核心的磁盘 I/O 指标 使用率&#xff1a;是指磁盘忙处理 I/O 请求的百分比。过高的使用率&#xff08;比如超过 60%&#xff09;通常意味着磁盘 I/O 存在…

办公AI推荐:阅读总结视频翻译文档文章等—包阅AI

目录 官网首页 网页阅读 思维导图 图书对话功能 1. 关键词 2. 总结 3. 主要内容 随心笔记 视频阅读 Mysql数据库案例 思维导图 内容评价 总结 想象一下&#xff0c;当您能在几分钟内掌握一小时视频的精华&#xff0c;或瞬间生成一本书的思维导图&#xff0c;您的学…