mac_girl

浅学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是一个应用容器引擎(注意:它是一个引擎,而并非是容器)。

什么是容器?

举一个现实生活中容器的例子,“集装箱”。“集装箱”也是一个容器,有什么特点呢?

  1. 集装箱之间相互隔离
  2. 可以反复利用
  3. 快速装载和卸载
  4. 规格标准,在港口和船上都能摆放,不受环境的影响

容器是一种通用技术,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这个公共镜像来构建我们的项目镜像即可。

 

posted on 2022-10-11 11:43  宇宙美少女  阅读(30)  评论(0编辑  收藏  举报

导航