Docker-安装软件

server/2024/10/18 8:27:39/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、安装MySQL
    • (一)拉取MySQL镜像
    • (二)运行MySQL容器
      • (1)数据卷概念
    • (三)查看容器是否运行
    • (四)登录MySQL
  • 二、安装Nacos
    • (一)拉取Naocs镜像
    • (二)创建并启动Nacos容器
    • (三)参数解释
  • 三、安装Redis
    • (一)拉取 Redis 镜像
    • (二)创建并启动Redis容器
    • (三)参数解释
  • 四、安装 RabbitMQ
    • (一)拉取 RabbitMQ 镜像
    • (二)创建并启动 RabbitMQ 容器
    • (三)参数解释
    • (四)额外配置
  • 总结


前言

提示:如果看不懂以下命令,建议找点教学视频观看:

使用docker安装我们开发中常用的软件,并且熟悉docker命令的使用,重点理解docker中另外一个重要概念:数据卷。


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装MySQL

(一)拉取MySQL镜像

docker pull mysql

(二)运行MySQL容器

docker run --name mysql \-e MYSQL_ROOT_PASSWORD=123456 \-e MYSQL_DATABASE=db_test \-e MYSQL_USER=zhangsan \-e MYSQL_PASSWORD=123456 \-p 3306:3306 \-v /home/mysql/data:/var/lib/mysql \-v /home/mysql/conf:/etc/mysql/conf.d \-v /home/mysql/logs:/logs \-d mysql:latest

如果是看完 作者 docker-命令 后来看这篇文章,一下子看到这么一串命令,肯定懵逼。为什么启动一个容器这么复杂,不应该是直接 docker run 直接启动吗?

说明:
docker run: 创建并启动一个新的 Docker 容器
–name mysql: 指定容器的名称为 mysql
-e 选项用于设置环境变量
-e MYSQL_ROOT_PASSWORD=123456: 设置 MySQL root 用户 的的密码为 123456
-e MYSQL_DATABASE=db_test: 在启动容器时创建一个名为 db_test 的数据库
-e MYSQL_USER=zhangsan: 创建一个名为 zhangsan 的新 MySQL 用户
-e MYSQL_PASSWORD=123456: 为新创建的 zhangsan 用户设置密码为 123456
-p 3306(宿主机端口):3306(容器端口): 映射容器的 3306 端口到主机的 3306 端口
-v /home/mysql/data:/var/lib/mysql: 将主机的 /home/mysql/data 目录挂载到容器的 /var/lib/mysql 目录
-v /home/mysql/conf:/etc/mysql/conf.d: 将主机的 /home/mysql/conf 目录挂载到容器的 /etc/mysql/conf.d 目录
-v /home/mysql/logs:/logs: 将主机的 /home/mysql/logs 目录挂载到容器的 /logs 目录
-d mysql:latest: 在后台运行容器 (-d 选项)。mysql:latest 是镜像名称,表示使用 MySQL 镜像的最新版本

/home/mysql/data 如果宿主机不存在这个文件,docker在创建容器时,自动创建该文件

(1)数据卷概念

当我们使用 docker 成功创建一个MySQL容器后,我们知道MySQL是做数据的持久化存储的,那么当我们在往数据库中添加一条数据后,数据最终保存在哪里呢?当容器被我删除后,容器中的数据肯定会随之销毁,那我们想将MySQL容器运行所产生的数据库做持久化保存,该如何操作呢? 当容器需要读取外部文件信息,容器又该如何获取外部文件到容器内部执行呢?

答案:使用数据卷。

我们的容器是运行在宿主机上,宿主机就是一台真正服务器,能够永久保存数据,因此我们只需要将 容器 运行时产生的数据保存在宿主机上,这样就能实现数据的永久存储,其它容器需要读取另外一个容器的数据时,直接读取宿主机上的文件就能实现容器之间的数据交换,实现容器之间的通信

数据卷:
数据卷是宿主机中的一个目录或文件
容器目录和数据卷绑定后,对方的修改会立即同步
一个数据卷可以被多个容器同时挂载
一个容器也可以挂载多个数据卷

数据卷作用:
容器数据的持久化
外部机器和容器间的间接通信
容器之间数据交换

(三)查看容器是否运行

docker ps

在这里插入图片描述

(四)登录MySQL

(1)Navicat连接

在这里插入图片描述

此时我们切换目录到数据卷位置

cd /home/mysql/data

在这里插入图片描述

我们再切换到另外两个文件下时,发现并没有什么数据。

/home/mysql/conf
/home/mysql/conf

这点确实不好解释(作者也懵逼),MySQL容器的配置文件并没有保存在宿主机上的数据卷中,但是通过上述我们也能理解了一点,为什么我们在启动MySQL容器时,为什么会有那么多参数。启动MySQL容器时,设置MySQL的 root 用户密码为 123456 这个应该很好理解的。然后就是将容器的端口映射到宿主机的端口,接着将宿主机的文件挂载到容器运行时的文件。

(2)容器内部登录

1、进入 mysql 容器(这里容器名是我们创建容器时,给容器起的名字)

docker exec -it mysql /bin/bash

2、登录mysql

mysql -uroot -p123456

在这里插入图片描述

在这里插入图片描述

(3)退出容器

exit

在这里插入图片描述
当我们成功创建并启动一个MySQL容器后,我们使用 Navicat 成功连接上MySQL时,我们连接MySQL时是怎么连接的呢?数据库地址,IP地址+端口号,然后填写用户名,密码。我们创建容器时,设置mysql容器的端口号3306映射到宿主机端口3306,用户名以及密码,但是没有设置ip端口和网络,说明容器本身默认使用的住宿机的IP地址,与宿主机共享网络。否则我们是无法正常连接上MySQL容器的。既然mysql容器既然有ip,端口,文件,那么可以理解为docker创建的mysql容器,其实这个容器本身就是一台liunx服务器,我们可以验证这个想法。

(4)进入容器

验证docker创建的容器与liunx系统是否相似

docker exec -it mysql /bin/bash

在这里插入图片描述
从上图我们看到,mysql 容器内部跟我们liunx服务内部特别相似,为什么说相似而不是一样呢?比如我们在执行这样一个指令

ll

在这里插入图片描述

显示是命令未找到,我们知道,ll 是 ls -l 的缩写,但是我么上述执行 ls -l 是可以的, ll就不行了。这个原因就是 ls -l 是liunx操作系统的原生命令,而ll 是liunx发行版中设置的快捷方式,说明我们使用docker创建MySQL 容器时,这个容器本质就是一台原始小型的liunx服务器并且在上面安装了mysql。我们再执行如下命令看结果

alias ll='ls -l'
ll

在这里插入图片描述
现在我们容器内部就可以使用 ll指令。我们进入 /logs文件 和 /etc/mysql/conf.d 文件发现都是为空,只有 /var/lib/mysql文件下数据跟我们挂载的宿主机 /home/mysql/data 文件一致的

二、安装Nacos

(一)拉取Naocs镜像

docker pull nacos/nacos-server:latest

(二)创建并启动Nacos容器

docker run -d \--name nacos \-e MODE=standalone \-e NACOS_PORT=8848 \-p 8848:8848 \nacos/nacos-server:latest

(三)参数解释

-d: 在后台运行容器
–name nacos: 指定容器的名称为 nacos。
-e MODE=standalone: 设置 Nacos 运行模式为独立模式。默认是集群模式。
-e NACOS_PORT=8848: 指定 Nacos 服务运行的端口为 8848。
-p 8848:8848: 将主机的 8848 端口映射到容器的 8848 端口。
nacos/nacos-server:latest: 使用的 Docker 镜像名称和标签。

三、安装Redis

(一)拉取 Redis 镜像

docker pull redis:latest

(二)创建并启动Redis容器

docker run -d \--name redis \-p 6379:6379 \redis:latest

(三)参数解释

-d: 以后台模式运行容器
–name redis: 设置容器名称为 redis。
-p 6379:6379: 将主机的 6379 端口映射到容器的 6379 端口。
redis:latest: 使用的 Docker 镜像名称和标签。

四、安装 RabbitMQ

(一)拉取 RabbitMQ 镜像

拉取 RabbitMQ 的官方 Docker 镜像。RabbitMQ 镜像有两个版本:一个包含默认的管理插件,另一个则不包含。这里我们使用包含管理插件的版本,方便管理和监控。

docker pull rabbitmq:management

(二)创建并启动 RabbitMQ 容器

docker run -d \--name rabbitmq \-p 5672:5672 \-p 15672:15672 \rabbitmq:management

(三)参数解释

-d: 在后台运行容器
–name rabbitmq: 指定容器名称为 rabbitmq。
-p 5672:5672: 将主机的 5672 端口映射到容器的 5672 端口(RabbitMQ 的默认 AMQP 端口)。
-p 15672:15672: 将主机的 15672 端口映射到容器的 15672 端口(RabbitMQ 管理控制台的端口)。
rabbitmq:management: 使用的 Docker 镜像名称和标签。

默认的登录用户名和密码是:

用户名: guest
密码: guest

(四)额外配置

通过环境变量配置 RabbitMQ 的用户、密码和其他设置。例如,设置一个自定义的管理用户

docker run -d \--name rabbitmq \-p 5672:5672 \-p 15672:15672 \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=adminpassword \rabbitmq:management

总结

以上就是通过docker 如何安装我们日常使用软件教程,通过docker我们快速有效就的安装一个工具软件,比我们平时普通安装方便快捷。然后就是通过docker安装mysql来了解认识我们docker,重点是理解数据卷这个概念。这些镜像已经创建容器的方式都是docker官方给出的,因此假如我们想要自己制作镜像,该如何制作呢?自己创建的镜像又该如何创建成容器呢?我们在什么时候创建自己的镜像呢?下篇文章将叙述是docker如何制作镜像


http://www.ppmy.cn/server/103222.html

相关文章

学懂C++(三十五):深入详解C++ 多线程编程性能优化

多线程编程是提高系统性能的有效手段,但在多线程环境下,潜在的问题也随之增加,如死锁、锁争用、上下文切换等。通过优化这些问题,我们可以显著提升多线程程序的执行效率。本文将从避免死锁、减少锁争用和上下文切换三个方面&#…

使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B

接下来的几篇相关的文章,聊聊使用 Dify 和 AI 大模型理解视频内容。 本篇作为第一篇内容,以昨天出圈的“黑神话悟空制作人采访视频”为例,先来聊聊经常被国外厂商拿来对比的国产模型:千问系列,以及它的内测版。 写在…

实现多goroutine之间的发布和订阅

实现多goroutine之间的发布和订阅 一、实现思路 一个发布者,三个订阅者发布者需要跟每个订阅者之间,都要建立一个chan调用发布方法后,三个订阅者都能收到发布的信息在发布和接收之间,增加暂停,使运行结果更加直观 二…

EMC学习笔记4——传导骚扰发射

传导骚扰发射是最基本的实验项目,主要是检测设备在工作时是否通过电源线产生过强的骚扰发射。 一、传导骚扰发射判断 可以通过两个方面来判断设备是否产生了传导发射: 1.电流的时域波形判断:电流波形与电压的波形不一样。如下图所示&#xf…

大模型Prompt trick:利用大模型同情心提升模型性能

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南(附代码和数据&#xff…

C# NX二次开发-曲线投影到面上

效果: 代码:根据投影方向投影投影新曲线到面上 var pcb workPart.Features.CreateProjectCurveBuilder(null);pcb.CurveFitData.Tolerance 0.001;pcb.CurveFitData.AngleTolerance 0.05;pcb.SectionToProject.DistanceTolerance 0.001;pcb.SectionT…

Java二十三种设计模式-迭代子模式(16/23)

迭代器模式:顺序访问集合的稳健方式 引言 迭代器模式(Iterator Pattern)是一种行为型设计模式,它允许顺序访问一个集合对象中的各个元素,而不需要暴露集合的底层表示。 基础知识,java设计模式总体来说设计…

自制深度学习推理框架之Tensor模板类的设计与实现

文章目录 一、Tensort介绍二、Armadillo实现Tensor模板类2.1 tensor类模板2.2 Tensor类的设计2.2.1 矩阵存储顺序2.2.2 Tensor类具体实现 一、Tensort介绍 张量(Tensor)是一个多维数组的通用化概念,在数学和计算科学中被广泛使用&#xff0c…