浅学Docker
hi 又是我,最近公司业务不繁忙,以前一直听别人说docker .. docker..现在我就来看看它到底长什么样。
Docker的起源
参考:https://zhuanlan.zhihu.com/p/510757832
虚拟机技术
在我们现实开发中开发、测试、运维需要有独立的环境,如何使应该的运行不受环境的影响呢?这时候虚拟机技术就出现了。
我们可以先搭好一套虚拟机环境然后给测试和运维克隆出来。
虚拟机技术:虚拟机下创建多个子系统(子电脑)
我们都知道虚拟机下可以创建很多的子系统(字电脑),每个子系统都能单独的运行一个应用。可以每个子系统都有自己独立的操作系统内存,这样会造成资源的浪费以及应用开启耗时长。
容器技术
为了解决虚拟机技术的问题,容器技术就应运而生了。
容器技术的特点:只隔离应用程序的运行环境但容器之间可以共享同一个操作系统。这里的运行环境是指程序运行依赖的各种库和配置。
好处:轻量且占用资源少
Docker的定义
启蒙 https://huaweicloud.csdn.net/63310f1dd3efff3090b50b4f.html,在这里作者以图文的方式告诉了我们docker的起源以及docker的三大核心概念image、Container、Repository之间的关系
什么是Docker?
参考:https://zhuanlan.zhihu.com/p/510757832
docker是什么:docker是一个应用容器引擎(注意:它是一个引擎,而并非是容器)。
什么是容器?
举一个现实生活中容器的例子,“集装箱”。“集装箱”也是一个容器,有什么特点呢?
- 集装箱之间相互隔离
- 可以反复利用
- 快速装载和卸载
- 规格标准,在港口和船上都能摆放,不受环境的影响
容器是一种通用技术,docker只是其中的种表现。
Docker的作用
作用:使用docker可以将我们的应用和依赖包打包到docker container(容器), 最终使得我们的程序可以在任何环境中都有一致的表现。
windows10系统如何安装Docker
参考:https://www.runoob.com/docker/windows-docker-install.html
开启Hyper-V
如果没有找到hyper-v你可以打开windows powershell 输入systeminfo 命令,可以看到很多处理器信息,最末尾有Hyper-V要求,如果四个全是是,则支持Hyper-V功能。
为window10添加Hyper-v功能包
参考:https://blog.csdn.net/lejian/article/details/125037619
创建批处理文件cmd或bat
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
以管理员身份运行文件,然后重启电脑,就可以看到Hyper-V出现了
安装 Docker Desktop for Windows
下载地址:Get started with Docker Desktop
也可以通过我百度网盘下载:
链接:https://pan.baidu.com/s/1Gcc0ODLJ7OvUDYza0KOe4g
提取码:z24r
一路 Next,点击 Finish 完成安装即可
安装WSL2
在启动docker会遇到WSL2导致的错误,此时我们就要安装WSL2
下载地址:https://pan.baidu.com/s/1QgM_r7SMJZtIfE6de1Y-Ag 提取码 8un4, 下载下来我们直接安装即可
勾选
此时我们的docker就可以启动了,启动的界面如下
在我们安装完WSL重新启动时docker一直处于staring的状态,我们可以通过卸载docker重新安装,便可启动成功。(我是出现过着这个情况。。可能你们不会)
Docker的核心概念
- Docker-client:客户端
- Docket-daemon:守护进程
- Registry: 仓库
- image: 镜像
- containers: 容器
- Dockerfile: 构建镜像的文本文件
用户通过docker-client客户端发送命令,docker-daemon接收到命令之后会找本地image,创建一个container, 假设我们本地没有对应的image,我们可以通过docker-client客户端 docker pul imageName到本地后在创建容器。
Dockerfile
我们的镜像来源可以是从DockerHub仓库下载,也可以自己构建,dockerfile就是用来构建自己的镜像的。
DockeFile文件的构建参考:https://www.runoob.com/docker/docker-dockerfile.html
以下是我自己使用dockerfile构建镜像的demo
# 基础镜像java FROM openjdk:latest # 指定容器内工作路径 WORKDIR ic-dist # 就是你上传的jar包的名称 添加到 镜像中 ADD target/nacos-provider-1.0-SNAPSHOT.jar dist/nacos-provider-1.0-SNAPSHOT.jar # 就是在容器中以多少端口号运行 EXPOSE 8080 # 容器启动之后执行的命令,java -jar dist/app.jar 即启动jar ENTRYPOINT ["java","-jar","dist/nacos-provider-1.0-SNAPSHOT.jar"]
docker-client 客户端发送 build -t app D:\project-demo\nacos-demo\nacos-provider命令构建镜像。
app:镜像名称
D:\project-demo\nacos-demo\nacos-provider:dockerFile所在的路径
出现下图信息说明镜像构建成功。
image和container 的关系
是类和对象的关系。image:类,container: 对象
registiry和image的关系
一个registiry可以有很多的image,image有很多的版本,不同的版本使用tag区分,可以通过registiryname.tag来获取对应版本的镜像。
Docker的常用命令
列举一些docker的常用命令,更多详细的命令请参考:https://www.runoob.com/docker/docker-command-manual.html
docker build // 构建镜像 docker run // 创建容器 docker pull // 拉取镜像 docker images // 查看所有的镜像
一些小东西
本来我还想尝试一下docker构建java项目镜像并运行,但是咧,虽然我是成功的打包了java项目的镜像,项目却无法启动起来,究其原因是我的镜像没有配置jdk、mysql等这些java项目运行项目
做罢。。。
其实在真正的项目构建时,我们会有一个公共的镜像,这个镜像里有我们项目运行的所有环境,我们from这个公共镜像来构建我们的项目镜像即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2019-10-11 HashMap的源码学习以及性能分析