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-selinuxdocker exec -itruoyi-mysql mysql -u root -pGRANT 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.reposudo 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 functionsalias 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/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes: #配置数据卷- "./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-mysqlimage: mysql:8.0.29build:context: .dockerfile: mysql-dockerfileports:- "3306:3306"volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/logs:/logs- ./mysql/data:/var/lib/mysqlcommand: [ '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: 123456ruoyi-redis:container_name: ruoyi-redisimage: redis:3.2.100build:context: .dockerfile: redis-dockerfileports:- "6379:6379"volumes:- ./conf/redis.conf:/home/ruoyi/redis/redis.conf- ./redis/data:/datacommand: redis-server /home/ruoyi/redis/redis.confruoyi-nginx:container_name: ruoyi-nginximage: nginx:1.24.0build:context: .dockerfile: nginx-dockerfileports:- "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.ddepends_on:- ruoyi-serverlinks:- ruoyi-serverruoyi-server:container_name: ruoyi-serverbuild:context: .dockerfile: ruoyi-dockerfileports:- "8080:8080"volumes:- ./ruoyi/logs:/home/ruoyi/logs- ./ruoyi/uploadPath:/home/ruoyi/uploadPathdepends_on:- ruoyi-mysql- ruoyi-redislinks:- 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.mzph.cn/web/54071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解:两横三纵 简述

理解&#xff1a;两横三纵 简述 下图:两横三纵-yellow色线分布图 时间&#xff1a;2013年12月提出的城市化战略格局 所谓“两横三纵”&#xff0c; 即以陆桥通道、沿长江通道为两条横轴&#xff0c; 以沿海、京哈京广、包昆通道为三条纵轴&#xff0c; 以主要的城市群地区为…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

SpringBoot技术栈:打造下一代网上租赁系统

第2章 关键技术简介 2.1 Java技术 Java是一种非常常用的编程语言&#xff0c;在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中&#xff0c;Java的身影无处不在&#xff0c;并且拥有旺盛的生命力。Java的跨平台能力十分强大&#xff0c;只需一次编译&#xf…

Rust语言桌面应用开发GTK3 Gtk3-rs Glade

文章目录 GTK-RSGithub官网Rust 教程Rust 环境安装 GTK安装 Gladedemo.glade 文件完整示例 main.rs创建 Rust 项目Cargo.toml 文件main.rs 文件 编译运行GTK主题 GTK-RS gtk-rs 是一个用于在 Rust 编程语言中使用 GTK 图形用户界面工具包的库。GTK 是一个流行的跨平台 GUI 工具…

SqlAlchemy使用教程(七) 异步访问数据库

SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用SqlAlchemy使用教程(五) ORM API 编程入门SqlAlchemy使用教程(六) – O…

CSS文本格式化

通过 CSS 中的文本属性您可以像操作 Word 文档那样定义网页中文本的字符间距、对齐方式、缩进等等&#xff0c;CSS 中常用的文本属性如下所示&#xff1a; text-align&#xff1a;设置文本的水平对齐方式&#xff1b;text-decoration&#xff1a;设置文本的装饰&#xff1b;te…

linux远程桌面:xrdp 安装失败

window 如何远程 Linux 桌面 安装xrdp yum install xrdpsystemctl start xrdp 如果找不到软件包&#xff0c;就安装epel源&#xff0c;最好改成国内镜像的 在 /etc/yum.repos.d/ 下创建epel.repo,内容如下 [epel] nameExtra Packages for Enterprise Linux 7 - $basearch …

实战OpenCV之形态学操作

基础入门 形态学操作是一种基于图像形状的处理方法,主要用于结构分析,比如:边缘检测、轮廓提取、噪声去除等。这些操作通常使用一个称为“结构元素”(Structuring Element)的核来进行,结构元素可以是任何形状,但最常见的有矩形和圆形。形态学操作的核心在于通过结构元素…

Python爬虫selenium框架基本使用

一、安装导入 使用包管理器安装 pip3 install selenium 二、WebDriver工具 要使用这个工具我们需要保证安装了一个浏览器的驱动器。 Python的WebDriver是一个用于自动化Web浏览器操作的工具&#xff0c;它属于Selenium的一部分&#xff0c;特别是Selenium 2.0及以后版本中…

【Kubernetes】常见面试题汇总(四十)

目录 93. Kubelet 与 kubeproxy 作用。Kubeproxy 的三种代理模式和各自的原理以及它们的区别。 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属…

【拥抱AIGC】通义灵码扩展管理

通义灵码提供了扩展管理&#xff0c;支持自定义指令&#xff0c;满足企业编码场景的扩展诉求。 适用版本 企业标准版、企业专属版 通义灵码管理员、组织内全局管理员&#xff08;专属版&#xff09;在通义灵码控制台-扩展管理中&#xff0c;进行自定义指令的管理、查看自定义…

Unity2022.3.x各个版本bug集合及推荐稳定版本

最近升级到Unity2022&#xff0c;发现以下问题&#xff0c;仅作参考 2022.3.0f1 - 2022.3.6f1 粒子渲染到RenderTexture闪屏 https://issuetracker.unity3d.com/issues/android-vulkan-visualisation-corruption-occurs-when-rendering-particles-to-render-texture 2022.3.…

嵌入式必懂微控制器选型:STM32、ESP32、AVR与PIC的比较分析

目录 1 微控制器基础概述 1.1 微控制器基本概念 1.2 工作原理及架构 1.3 STM32、ESP32、AVR和PIC简介 2 微控制器性能比较分析 2.1 性能比较 2.2 功耗比较 2.3 功耗分析 2.4 外设接口对比 3 应用场景与选择策略 3.1 物联网应用场景 3.2 工业控制场景 3.3 智能家居场…

not exist 解决一对多 场景 条件过滤问题

场景&#xff1a; 现在存在一对多关系&#xff0c;蓝色的盒子装的篮球&#xff0c;黄的的盒子装的黄球&#xff0c; 黑色的盒子 &#xff08;模拟工作类似场景&#xff09; boxIdballId蓝盒ID-15蓝盒ID-16蓝盒ID-17黄盒ID-212黄盒ID-215黄盒ID-216黑盒ID-38黑盒ID-39 需求&a…

leetcode|刷算法 线段树原理以及模板

线段树出现的题目特征 线段树使用的题目。每次操作都要得到返回结果的。 比如 699. 掉落的方块 - 力扣&#xff08;LeetCode&#xff09; 2286. 以组为单位订音乐会的门票 - 力扣&#xff08;LeetCode&#xff09; 1845. 座位预约管理系统 - 力扣&#xff08;LeetCode&#…

关于Java中的List<User>如何进行深拷贝

联调中发现了一个很初级&#xff0c;但有容易被忽略的拷贝问题&#xff1a; 错误方式&#xff1a;List<User> us new ArrayList<>(); // name "张三"List<User> us1 new ArrayList<>(us);for (User u : us) {...u.setName("douzi&q…

【PHP陪玩系统源码】游戏陪玩系统app,陪玩小程序优势

陪玩系统开发运营级别陪玩成品搭建 支持二开源码交付&#xff0c;游戏开黑陪玩系统: 多客陪玩系统&#xff0c;游戏开黑陪玩&#xff0c;线下搭子&#xff0c;开黑陪玩系统 前端uniapp后端php&#xff0c;数据库MySQL 1、长时间的陪玩APP源码开发经验&#xff0c;始终坚持从客户…

Docker镜像命令和容器命令

目录 镜像命令 镜像命名规范 镜像操作命令 DockerHub拉取镜像 利用docker save将nginx镜像导出磁盘&#xff0c;然后再通过load加载回来 总结 容器命令介绍和案例 容器相关命令 案例&#xff1a;创建运行一个Nginx容器 总结 镜像命令 镜像命名规范 镜像名称一般分两…

uniapp框架中实现文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间

前言 uni-file-picker是uniapp中的一个文件选择器组件,用于选择本地文件并返回选择的文件路径或文件信息。该组件支持选择单个文件或多个文件,可以设置文件的类型、大小限制,并且可以进行文件预览。 提示:以下是本篇文章正文内容,下面案例可供参考 uni-file-picker组件具…

了解华为计算产品线,昇腾的业务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着 ChatGPT 的现象级爆红&#xff0c;它引领了 AI 大模型时代的深刻变革&#xff0c;进而造成 AI 算力资源日益紧缺。与此同时&#xff0c;中美贸易战的持续也使得 AI 算力国产化适配成为必然趋势。 …