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子系统
和虚拟机平台
两个选项。
点击了确定之后在文件管理器
中就能看见Linux
系统的图标了。
2.3、安装Docker
可以在Docker官网上直接下载Windows版本的Docker安装包。
Docker桌面端下载:https://docker.p2hp.com/products/docker-desktop/index.html
2.3.1、安装
下载后直接安装便可以了。
但是需要注意:
Docker的一系列文件都是非常大的,并且默认的安装位置在C盘中,目录是:C:\Program Files\Docker。
在日常的开发中,镜像的下载和容器的配置,都是非常占内存的,所以我们需要把一系列的文件给移除来放到其他磁盘中。
- C 盘下的Docker目录在我电脑上移除后会导致Docker无法运行,所以这里我没有移除这个目录,这个目录在我电脑的C盘上占用3G的内存。
- 所以我移动的是Docker的镜像和容器的目录,Docker主要还是要移除这两个目录,
docker-desktop
、docker-desktop-data
,并且占内存的也主要是这两个目录。
2.3.2、移动目录
移动目录的前提是:需要移动目录的虚拟环境一定是Stopper的。我们可以通过wsl -l -v查看虚拟设备的状态。
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文件嘞?
- 归档文件格式:Docker镜像是以一组文件和目录的形式存在的,而tar是一种常见的归档文件格式,可以将多个文件和目录打包成一个单独的文件。这样可以将整个镜像的内容打包成一个tar文件,便于传输和保存。
- 跨平台兼容性:Docker的设计目标是实现跨平台的容器化运行,而tar文件格式是一种标准化的文件打包格式,可以在不同的操作系统上使用。使用tar文件作为Docker镜像的导出格式,可以确保镜像在不同平台上的一致性和可移植性。
- 加载速度快:对于Docker守护进程来说,加载一个tar文件比直接加载整个镜像要快得多。因为tar文件只包含文件和目录的元数据,而不包含实际的文件内容,所以加载过程中需要读取的文件数量较少,加载速度更快。
- 便于版本管理:使用tar文件作为Docker镜像的导出格式,可以方便地实现版本管理。每次导出时都会生成一个新的tar文件,可以方便地对比不同版本的镜像差异。
2.3.2.2、导入文件
在导入文件前,需要将原来的文件从管理器中删除,也就是注销,删没删除可以在文件管理器
中看到:
途中显示的就是存在的。
(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桌面端工具。
只要桌面端工具的左下角绿了,就证明启动成功了。
上图中的容器和镜像是我提前下好和运行了的,所以会有记录。
3、运行中间件
好处:
- 简化配置和部署:Docker可以简化中间件的配置和部署过程。通过Docker,中间件的依赖项、配置文件和日志目录都可以被打包到一个统一的镜像中,这样可以一次性构建和部署,而不需要在每个服务器上单独配置。
- 提高资源利用率:Docker的容器化技术可以将多个中间件实例运行在同一个服务器上,提高了服务器的资源利用率,降低了服务器的数量和成本。
- 隔离性:Docker为每个中间件实例提供了隔离的环境,使得不同的中间件实例之间互不干扰,保证了中间件的高可用性和稳定性。
- 快速扩展:使用Docker可以快速地扩展中间件服务的规模,只需要在需要的时候增加Docker容器的数量即可。这种动态的扩展能力使得Docker非常适合于处理突发的高峰流量。
3.1、运行redis
3.1.1、查看目前docker支持的redis版本:
docker search redis
OFFICIAL是Docker官方打包的程序。
3.1.2、拉取Redis
docker pull redis
如果不给版本,拉取的就是最新版的redis。
3.1.3、查看镜像
docker images
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
当没有官方提供的时候,我们就可以选择一个下载人数多的且OK的。
3.2.2、拉取并查看镜像
docker pull nacos/nacos-server
docker ps
3.2.3、持久化配置
目前使用最多的nacos持久化配置就是持久化到数据库。
所以我们就需要提前修改application.properties
文件,让nacos能连接数据库。
- 在指定位置创建好conf、logs、data三个目录用于挂载。
- 去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用户相同就行了。
无论是方式一还是方式二,都需要配置完成后重新启动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之后,就需要隐射三个端口:8848
、9848
、9849
。
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
方式二:Docker桌面端
4、总结
不得不说,使用Docker是真的爽。
首先,Docker彻底改变了应用部署的方式,使得应用更加容易地迁移和扩展。通过Docker,我们可以轻松地创建、部署和运行应用程序,而无需担心环境配置和依赖问题。
其次,Docker提高了开发效率。使用Docker,开发人员可以在隔离的环境中快速构建和测试应用程序,同时避免了对生产环境的干扰。此外,Docker还提供了强大的监控和日志记录功能,使得开发人员可以更好地了解应用程序的运行状态并进行调试。
最后,Docker具有灵活性和可扩展性。通过简单地增加或减少容器数量,我们可以轻松地扩展应用程序的规模,以满足业务需求。总之,使用Docker开发让我深刻感受到技术的力量和进步。它不仅简化了应用程序的部署和管理,还提高了开发效率和系统稳定性。在未来,我期待着Docker技术的进一步发展和普及,为更多的开发者和企业带来更多的便利和价值。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!