Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker容器是一个轻量级的沙箱环境,每个容器都运行一个独立的进程,Docker利用容器来运行和隔离应用。
镜像是用于创建容器的模板,可以基于另一个镜像进行构建,也可以通过Dockerfile文件进行构建。
每个Docker镜像可以基于多个文件系统层,每个文件系统层都是一个镜像的一部分,每个文件系统都包含一个应用程序的某一组件或依赖包。每个文件系统中的文件都是只读的,如果需要对文件进行修改、添加或删除操作,需要重新生成一个新的Docker镜像。
(1)查看镜像
docker search 镜像名称
(2)拉取镜像
docker pull 镜像名称
(3)查看镜像详情
docker inspect 镜像名称或镜像ID
(4)删除镜像
docker rmi 镜像名称或镜像ID
(5)生成容器
docker run -d --name 容器名称 -p 外部端口:内部端口 -v 外部文件路径:内部文件路径 -e 环境名称=环境值 镜像名称或镜像ID
(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
在常见的日常开发中,Docker都是配置在Linux环境中的,而且在公司的环境中,基本上也是使用的Linux。
作为个人开发者,如果使用的是Linux也还好说,但是我们基本上使用的都是windows,如果想要使用linux,要么改系统,要么申请服务器。
第一种在国内基本上不太可能,第二种对于有钱的个人开发者还是可以实现的,但是对于我这种穷的开发者来说,就无法支付每个月几十块的费用了。
当然啦,Docker官方也考虑到了这一点,故此也研究出了windows版本的Docker。
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
在CMD
命令窗口中输入
打开Windows电脑的设置
,选择程序
中的程序和功能
选项,找到启动或关闭windows功能
。
勾选适用于Linux的Windows子系统
和虚拟机平台
两个选项。
点击了确定之后在文件管理器
中就能看见Linux
系统的图标了。
可以在Docker官网上直接下载Windows版本的Docker安装包。
Docker桌面端下载:https://docker.p2hp.com/products/docker-desktop/index.html
但是需要注意:
Docker的一系列文件都是非常大的,并且默认的安装位置在C盘中,目录是:C:\Program Files\Docker。
在日常的开发中,镜像的下载和容器的配置,都是非常占内存的,所以我们需要把一系列的文件给移除来放到其他磁盘中。
docker-desktop
、docker-desktop-data
,并且占内存的也主要是这两个目录。移动目录的前提是:需要移动目录的虚拟环境一定是Stopper的。我们可以通过wsl -l -v查看虚拟设备的状态。
语法:wsl --export 虚拟文件名称 导出文件位置
wsl --export docker-desktop D:\docker\docker-desktop.tar
wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar
那为啥是tar文件嘞?
在导入文件前,需要将原来的文件从管理器中删除,也就是注销,删没删除可以在文件管理器
中看到:
途中显示的就是存在的。
(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
配置好上面的环境后,重新启动Docker桌面端工具。
只要桌面端工具的左下角绿了,就证明启动成功了。
上图中的容器和镜像是我提前下好和运行了的,所以会有记录。
好处:
docker search redis
docker pull redis
如果不给版本,拉取的就是最新版的redis。
docker images
在使用中间件时,一般内部都会有一些文件需要挂载到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 # 容器名称
这里为了方便观看进行了换行,复制时需要删除换行。
docker search nacos
当没有官方提供的时候,我们就可以选择一个下载人数多的且OK的。
docker pull nacos/nacos-server
docker ps
目前使用最多的nacos持久化配置就是持久化到数据库。
所以我们就需要提前修改application.properties
文件,让nacos能连接数据库。
(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地址了。
在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中的数据库。
前面的步骤都是相同的,故此省略,直接生成镜像,唯一不同的就是不用提前建好映射文件。
需要提前修改配置的则需要提前建好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 # 容器名称
这里为了方便观看进行了换行,复制时需要删除换行。
因为没有提前建立挂载文件,所以当在命令中声明了后,就会在指定的目录下创建挂载文件。
查看方式既可以通过CMD
窗口查看也可以通过Docker桌面端查看:
方式一:CMD窗口
docker ps
不得不说,使用Docker是真的爽。
首先,Docker彻底改变了应用部署的方式,使得应用更加容易地迁移和扩展。通过Docker,我们可以轻松地创建、部署和运行应用程序,而无需担心环境配置和依赖问题。
其次,Docker提高了开发效率。使用Docker,开发人员可以在隔离的环境中快速构建和测试应用程序,同时避免了对生产环境的干扰。此外,Docker还提供了强大的监控和日志记录功能,使得开发人员可以更好地了解应用程序的运行状态并进行调试。
最后,Docker具有灵活性和可扩展性。通过简单地增加或减少容器数量,我们可以轻松地扩展应用程序的规模,以满足业务需求。总之,使用Docker开发让我深刻感受到技术的力量和进步。它不仅简化了应用程序的部署和管理,还提高了开发效率和系统稳定性。在未来,我期待着Docker技术的进一步发展和普及,为更多的开发者和企业带来更多的便利和价值。