Windows安装Docker运行中间件(详细)

1、Docker

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.1、概念

Docker容器是一个轻量级的沙箱环境,每个容器都运行一个独立的进程,Docker利用容器来运行和隔离应用。

  • 容器是从Docker镜像创建的运行实例。
  • Docker镜像是一个只读的模板,它包含了创建Docker容器的必要信息,包括操作系统、应用程序等。

镜像是用于创建容器的模板,可以基于另一个镜像进行构建,也可以通过Dockerfile文件进行构建。
每个Docker镜像可以基于多个文件系统层,每个文件系统层都是一个镜像的一部分,每个文件系统都包含一个应用程序的某一组件或依赖包。每个文件系统中的文件都是只读的,如果需要对文件进行修改、添加或删除操作,需要重新生成一个新的Docker镜像。

1.2、基本命令

(1)查看镜像

docker search 镜像名称

(2)拉取镜像

docker pull 镜像名称

(3)查看镜像详情

docker inspect 镜像名称或镜像ID

(4)删除镜像

docker rmi 镜像名称或镜像ID

(5)生成容器

docker run -d --name 容器名称 -p 外部端口:内部端口 -v 外部文件路径:内部文件路径 -e 环境名称=环境值 镜像名称或镜像ID
  • -i(或 --interactive)保持标准输入(stdin)打开,这使得你可以与容器进行交互。通常,当你运行一个容器并希望与它进行交互时,你会使用这个标志。
  • -t(或 --tty)为容器分配一个伪终端(pseudo-TTY),这使得容器的输出更像一个常规的终端,而不是纯文本。这常常与-i一起使用,因为这样可以让容器启动后进入交互模式,而容器内部的shell知道它正在与一个真实的用户交互。
  • -d,它是用来在后台运行容器的。当你使用 -d 运行容器时,容器会在后台运行,并且不会分配伪终端或保持标准输入打开。

(6)进入容器

docker exec -it 容器名称或容器ID /bin/bash

/bin/bash 是 Bash shell 的路径。Bash 是一个流行的 shell,用于命令行界面与操作系统交互。

(7)查看容器

docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器,运行和未运行的都显示出来

(8)停止/启动容器

docker stop 容器ID # 停止容器
docker start 容器ID # 启动容器

(9)删除容器
删除容器时尽可能保持容器已经停止了。

docker rm 容器ID

2、Windows配置Docker

在常见的日常开发中,Docker都是配置在Linux环境中的,而且在公司的环境中,基本上也是使用的Linux。
作为个人开发者,如果使用的是Linux也还好说,但是我们基本上使用的都是windows,如果想要使用linux,要么改系统,要么申请服务器。

第一种在国内基本上不太可能,第二种对于有钱的个人开发者还是可以实现的,但是对于我这种穷的开发者来说,就无法支付每个月几十块的费用了。
当然啦,Docker官方也考虑到了这一点,故此也研究出了windows版本的Docker。

2.1、安装WSL

Windows Subsystem for Linux(简称WSL)是一个在Windows 10/11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行。使用Windows 10 2004以上版本,可以通过WSL 2来窗口化运行桌面应用,也不需要另外安装其他的X服务器。

(1)更新WSL

wsl --update

(2)安装WSL

wsl --install

(3)关闭所有虚拟引擎

wsl --shutdown

(4)显示以安装的虚拟机的基本信息

wsl -l -v

2.2、开启虚拟化

CMD命令窗口中输入
打开Windows电脑的设置,选择程序中的程序和功能选项,找到启动或关闭windows功能
勾选适用于Linux的Windows子系统虚拟机平台两个选项。
Windows安装Docker运行中间件(详细)_第1张图片
点击了确定之后在文件管理器中就能看见Linux系统的图标了。
Windows安装Docker运行中间件(详细)_第2张图片

2.3、安装Docker

可以在Docker官网上直接下载Windows版本的Docker安装包。
Docker桌面端下载:https://docker.p2hp.com/products/docker-desktop/index.html

2.3.1、安装

Windows安装Docker运行中间件(详细)_第3张图片
下载后直接安装便可以了。

但是需要注意:
Docker的一系列文件都是非常大的,并且默认的安装位置在C盘中,目录是:C:\Program Files\Docker。
在日常的开发中,镜像的下载和容器的配置,都是非常占内存的,所以我们需要把一系列的文件给移除来放到其他磁盘中。

  • C 盘下的Docker目录在我电脑上移除后会导致Docker无法运行,所以这里我没有移除这个目录,这个目录在我电脑的C盘上占用3G的内存。
  • 所以我移动的是Docker的镜像和容器的目录,Docker主要还是要移除这两个目录,docker-desktopdocker-desktop-data,并且占内存的也主要是这两个目录。

2.3.2、移动目录

移动目录的前提是:需要移动目录的虚拟环境一定是Stopper的。我们可以通过wsl -l -v查看虚拟设备的状态。

Windows安装Docker运行中间件(详细)_第4张图片

2.3.2.1、导出文件:

语法:wsl --export 虚拟文件名称 导出文件位置

wsl --export docker-desktop D:\docker\docker-desktop.tar
wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar

那为啥是tar文件嘞?

  1. 归档文件格式:Docker镜像是以一组文件和目录的形式存在的,而tar是一种常见的归档文件格式,可以将多个文件和目录打包成一个单独的文件。这样可以将整个镜像的内容打包成一个tar文件,便于传输和保存。
  2. 跨平台兼容性:Docker的设计目标是实现跨平台的容器化运行,而tar文件格式是一种标准化的文件打包格式,可以在不同的操作系统上使用。使用tar文件作为Docker镜像的导出格式,可以确保镜像在不同平台上的一致性和可移植性。
  3. 加载速度快:对于Docker守护进程来说,加载一个tar文件比直接加载整个镜像要快得多。因为tar文件只包含文件和目录的元数据,而不包含实际的文件内容,所以加载过程中需要读取的文件数量较少,加载速度更快。
  4. 便于版本管理:使用tar文件作为Docker镜像的导出格式,可以方便地实现版本管理。每次导出时都会生成一个新的tar文件,可以方便地对比不同版本的镜像差异。
2.3.2.2、导入文件

在导入文件前,需要将原来的文件从管理器中删除,也就是注销,删没删除可以在文件管理器中看到:
Windows安装Docker运行中间件(详细)_第5张图片
途中显示的就是存在的。

(1)删除环境:

wsl --unregister 虚拟环境名称

查看虚拟环境可以使用:wsl -l -v命令查看。

(2)导入环境文件
语法:wsl --import 自定义环境名称 工作区 tar文件路径

wsl --import docker-desktop D:\docker\docker-desktop D:\docker\docker-desktop.tar
wsl --import docker-desktop-data D:\docker\docker-desktop-data D:\docker\docker-desktop-data.tar

2.3.3、重新启动Docker

配置好上面的环境后,重新启动Docker桌面端工具。
Windows安装Docker运行中间件(详细)_第6张图片
只要桌面端工具的左下角绿了,就证明启动成功了。
上图中的容器和镜像是我提前下好和运行了的,所以会有记录。

3、运行中间件

好处:

  1. 简化配置和部署:Docker可以简化中间件的配置和部署过程。通过Docker,中间件的依赖项、配置文件和日志目录都可以被打包到一个统一的镜像中,这样可以一次性构建和部署,而不需要在每个服务器上单独配置。
  2. 提高资源利用率:Docker的容器化技术可以将多个中间件实例运行在同一个服务器上,提高了服务器的资源利用率,降低了服务器的数量和成本。
  3. 隔离性:Docker为每个中间件实例提供了隔离的环境,使得不同的中间件实例之间互不干扰,保证了中间件的高可用性和稳定性。
  4. 快速扩展:使用Docker可以快速地扩展中间件服务的规模,只需要在需要的时候增加Docker容器的数量即可。这种动态的扩展能力使得Docker非常适合于处理突发的高峰流量。

3.1、运行redis

3.1.1、查看目前docker支持的redis版本:

docker search redis

Windows安装Docker运行中间件(详细)_第7张图片
OFFICIAL是Docker官方打包的程序。

3.1.2、拉取Redis

docker pull redis

如果不给版本,拉取的就是最新版的redis。

3.1.3、查看镜像

docker images

Windows安装Docker运行中间件(详细)_第8张图片

3.1.4、生成容器

在使用中间件时,一般内部都会有一些文件需要挂载到Windows本地目录,而不是在内部目录,只有挂载出来才方便我们看到。
docker提供了-v的方式挂载目录。

在windows版本的docker配置redis中,需要手动在本地的conf文件下添加一个redis.conf文件,这个文件可以通过Redis官网下载指定版本的redis得到。

docker run -d --name redis 
-p 6379:6379 
-v E:/virtual/redis/conf.redis.conf:/etc/redis/redis.conf 
-v E:/virtual/redis/data:/data 
e40e2763392d # 容器名称

这里为了方便观看进行了换行,复制时需要删除换行。

3.2、运行nacos

3.2.1、查看版本

docker search nacos

Windows安装Docker运行中间件(详细)_第9张图片
当没有官方提供的时候,我们就可以选择一个下载人数多的且OK的。

3.2.2、拉取并查看镜像

docker pull nacos/nacos-server
docker ps

3.2.3、持久化配置

目前使用最多的nacos持久化配置就是持久化到数据库。
所以我们就需要提前修改application.properties文件,让nacos能连接数据库。

  1. 在指定位置创建好conf、logs、data三个目录用于挂载。
  2. 去nacos官网下载指定版本的nacos,并将conf下的所有文件复制到挂载目录的conf文件下。

(1)数据库配置

数据库我用的是windows本地的,而不是在Docker中使用MySQL镜像。而Docker是个独立的环境,Windows和Docker下的localhost或者127.0.0.1表示的都是各自内部的环境,不能看出一个环境。
所以,如果使用Docker访问Windows中的数据库,则需要在数据库中创建一个新的用户或者把root用户的连接地址从localhost改为%,这样就表示所有地址都可以连接了。

方式一:修改root用户

use mysql;
UPDATE user SET host = '%' WHERE user = 'root';

方式二:新建用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

然后将权限修改为与root用户相同就行了。
Windows安装Docker运行中间件(详细)_第10张图片
无论是方式一还是方式二,都需要配置完成后重新启动MySQL服务。

(2)nacos配置文件配置

配置application.properties文件中的数据库连接信息:

spring.datasource.platform=mysql
spring.sql.init.platform=mysql
db.num=1
db.url=jdbc:mysql://192.168.1.246:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=slave
db.password=123456

MySQL的URL连接地址一定要写Windows的IP地址,但是不要写成WSL的IP地址了。

3.2.4、生成容器

在nacos到2.0之后,就需要隐射三个端口:884898489849

docker run -d --name nacos 
-p 8848:8848 
-p 9848:9848 
-p 9849:9849 
-e MODE=standalone # 单机模式
-v E:/virtual/mount/nacos/conf:/home/nacos/conf 
-v E:/virtual/mount/nacos/logs:/home/nacos/logs 
-v E:/virtual/mount/nacos/data:/home/nacos/data 
c056b930e4dd #容器名称

这里为了方便观看进行了换行,复制时需要删除换行。

回车后可以通过:docker logs 容器名称来查看是否运行成功,但是可能需要等待一段时间,因为进行数据库连接需要时间,一定要确保Docker中的nacos能连接Windows中的数据库。

3.3、运行RabbitMQ

前面的步骤都是相同的,故此省略,直接生成镜像,唯一不同的就是不用提前建好映射文件。
需要提前修改配置的则需要提前建好conf等文件,将配置从官网获取,不需要提前配置的则不需要提前建立conf等文件。

docker run -d --name rabbitmq 
-p 5672:5672 
-p 15672:15672 
-e RABBITMQ_DEFAULT_USER=admin  # 登录时的账号
-e RABBITMQ_DEFAULT_PASS=admin  # 登录时的密码
-v E:/virtual/mount/rabbitmq/data:/var/lib/rabbitmq 
-v E:/virtual/mount/rabbitmq/conf:/etc/rabbitmq 
-v E:/virtual/mount/rabbitmq/logs:/var/log/rabbitmq 
457abe59adf7 # 容器名称

这里为了方便观看进行了换行,复制时需要删除换行。

因为没有提前建立挂载文件,所以当在命令中声明了后,就会在指定的目录下创建挂载文件。

3.4、查看

查看方式既可以通过CMD窗口查看也可以通过Docker桌面端查看:
方式一:CMD窗口

docker ps

Windows安装Docker运行中间件(详细)_第11张图片

方式二:Docker桌面端
Windows安装Docker运行中间件(详细)_第12张图片

4、总结

不得不说,使用Docker是真的爽。

首先,Docker彻底改变了应用部署的方式,使得应用更加容易地迁移和扩展。通过Docker,我们可以轻松地创建、部署和运行应用程序,而无需担心环境配置和依赖问题。

其次,Docker提高了开发效率。使用Docker,开发人员可以在隔离的环境中快速构建和测试应用程序,同时避免了对生产环境的干扰。此外,Docker还提供了强大的监控和日志记录功能,使得开发人员可以更好地了解应用程序的运行状态并进行调试。

最后,Docker具有灵活性和可扩展性。通过简单地增加或减少容器数量,我们可以轻松地扩展应用程序的规模,以满足业务需求。总之,使用Docker开发让我深刻感受到技术的力量和进步。它不仅简化了应用程序的部署和管理,还提高了开发效率和系统稳定性。在未来,我期待着Docker技术的进一步发展和普及,为更多的开发者和企业带来更多的便利和价值。

Windows安装Docker运行中间件(详细)_第13张图片

你可能感兴趣的:(分布式,docker,中间件,分布式,java,运维,容器,spring,cloud)