前言
本文设计到一些概念和理解,如有错误,希望可以评论或者私信指出,觉得写的好的可以点赞支持一下谢谢
我的个人博客:https://linzyblog.netlify.app/
一、Docker概述
1、Docker为什么出现(热门)?
一款产品需要开发和上线两套环境。
1)应用环境
2)应用配置
开发 — 运维之间的存在问题:
开发的电脑可以运行,到运维的电脑却不行了,开发的版本更新了,到运维的电脑导致服务不可用了,运维这边就需要重新同步版本环境与配置,难度就很大了。
但是环境配置是十分麻烦的,每一台机器都要重新部署环境(集群Redis,Node.js,Mysql…),部署错误还会重新来过,又费时又费力。
我们发布一个项目,可能需要Redis、Mysql、Node.js的环境,电脑上运行只需要一分钟,而环境配置可能一天都不一定,充电两小时用时五分钟的概念。
如果我们可以把项目和环境一起安装打包,而不是单纯的一个项目包。
Docker就是来完成这个事情的技术
- 传统:开发人员就开发项目,运维来做部署这些事情
- 现在:开发打包部署上线,一套流程做完
概念理解:
exe安装包 – >发布(应用商店) – > 用户下载安装 – > 安装即可用
Golang项目(环境) – > 项目和环境一起打包(Docker镜像) – > Docker仓库 – > 用户下载发布的Docker镜像 – > 下载即可用
二、Docker的思想
看看Docker的Logo,他的思想就来自于集装箱。
Docker的核心思想:隔离,打包装箱,每个箱子之间是互相隔离的
1、项目部署环境问题
大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题
- 依赖关系复杂,容易出现兼容性问题
- 开发、测试、生产环境有差异
在项目中部署时需要依赖于node.js、Redis、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
2、用Docker完美解决问题
这样打包好的应用包中,既包含应用本身,也保护应用所需要的环境,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。
3、Docker解决操作系统环境差异
解决了不同应用的兼容问题,但是开发、测试的环境也会存在差异,操作系统版本也有差异,相对应的函数库和依赖项都是基于操作系统,从而导致不兼容。
先了解一些操作系统结构,以Ubuntu操作系统为例
Ubuntu操作系统结构包括:
1.计算机硬件:例如CPU、内存、磁盘等
2.系统内核:所有Linux发行版的内核都是Linux,例如CentOS、Ubuntu、Fedora等。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。
3.系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便。
应用于计算机交互的流程如下:
1.应用调用操作系统应用(函数库),实现各种功能
2.系统函数库是对内核指令集的封装,会调用内核指令
3.内核指令操作计算机硬件
如果我们将一个Ubuntu版本的MySQL应用安装到CentOS系统,MySQL在调用Ubuntu函数库时,会发现找不到或者不匹配,就会报错了
Docker如何解决不同系统环境的问题?
1.Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
2.Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行
三、Docker的历史
2010年,几个搞IT的年轻人,在美国成立了一家公司 dotCloud, 公司业务就是做一些PasS的云计算服务,是LXC有关的容器技术。
他们将自己的技术(容器化技术)命名为Docker,Docker诞生的时候并没有引起行业的关注,为了让公司能够存活下去,于是他们想到了一个方法:开源,把内部的代码全部开放给所有人,大家可以一起参加进来。
2013年,Docker开源后,越来越多的工程师发现了Docker的优点,Docker火了以后,几乎每个月都会更新一个版本。
2014年4月9日,Docker1.0发布!
到现在,Docker已经是所有开发人员都必须要了解掌握的一门技术。
四、Docker的优势
Docker 是一个开源的轻量级容器技术,让开发者可以打包他们的应用以及应用运行的上下文环境到一个可移植的镜像中,然后发布到任何支持 Docker 的系统上运行。 通过容器技术,在几乎没有性能开销的情况下,Docker 为应用提供了一个隔离运行环境,Docker是基于Go语言开发的技术。
- 简化配置
- 代码流水线管理
- 提高开发效率
- 隔离应用
- 快速、持续部署
1、应用更快速的交付和部署
- 传统:一堆的帮助文档,安装程式,部署环境
- Docker:打包镜像发布测试,一键运行
2、更快捷的升级和扩缩容
使用Docker之和,部署应用就跟搭积木一样,项目打包为一个镜像,可以扩展到服务器。
3、更简单的系统运维
容器化之后,开发、运维、测试环境都是高度一致的。
4、更高效的计算资源利用
Docker是内核级别的虚拟机,可以在一个物理机上可以运行很多的容器示例,服务器的性能可以被压榨到极致。
五、Docker与虚拟机的区别
在Docker容器技术还没出来之前,我们都是使用虚拟机技术。
- 虚拟机:在Windows操作系统做我们安装一VMware,通过这个软件我们可以虚拟一台或多台电脑,虚拟机是属于虚拟化技术。
。优点:虚拟机跟真实电脑是差不多,可以在操作系统中模拟硬件设备。
。缺点:虚拟机很笨重,启动时间很慢,虚拟机所占用的空间都很大,如果只是一些简单命令,就是大材小用。
- Docker容器技术:Docker是一个系统进程,Docker容器技术也是虚拟化技术,最大的区别就是体量的不同。
。优点:十分小巧,只是把项目和环境一起打包成Docker镜像,运行镜像就可用了,启动时间很快,秒级启动。
。缺点:并没有模拟操作系统。
Docker和虚拟机的区别对比:
特性 | Docker | 虚拟机 |
性能 | 接近原生 | 性能差 |
硬盘占用 | 一般为MB | 一般为GB |
启动 | 秒级 | 分钟级 |
- 传统虚拟机虚拟出一套硬件,模拟了一个完整的操作系统,然后在这个系统上安装和运行软件。
- 容器内的应用直接运行在宿主机上的,容器没有自己的内核,也没有虚拟出硬件,所以比虚拟机轻便小巧。
- 每个容器间都是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
六、Docker基本架构
Docker 包括三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 模板,可以通过模板来创建容器服务,通过这个镜像我们可以创建多个容器,最终服务运行或项目运行都是在容器中的。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,Docker利用容器技术,独立运行一个或一组应用,都是通过镜像来创建的,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像,仓库分为公有仓库和私用仓库。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
- 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等
- 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。
七、Docker安装
仓库地址:https://hub.docker.com/ 类似于Github的远程仓库
1、下载
Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。
Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows
注意:此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!
2、安装 Hyper-V
Hyper-V 是微软开发的虚拟机,类似于 VMWare 或 VirtualBox,仅适用于 Windows 10。这是 Docker Desktop for Windows 所使用的虚拟机。
但是,这个虚拟机一旦启用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本将无法使用!如果你必须在电脑上使用其他虚拟机(例如开发 Android 应用必须使用的模拟器),请不要使用 Hyper-V!
3、开启 Hyper-V
1)打开Windows设置
2)选择应用拉到最底下选择程序和功能
3)选择启用或关闭Windows功能
4)选中Hyper-V
也可以通过命令来启用 Hyper-V ,请右键开始菜单并以管理员身份运行 PowerShell,执行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
3、安装
安装非常简单,不赘述。安装成功后查看windows任务栏会出现docker的经典logo,小鲸鱼 安装完成后,会出现一个弹出框,
提示:close and restart 此时需要重新启动计算机
打开我们的windows Terminal(CMD),输入docker -v看看是否安装成功了
4、启动 Docker Desktop
可以开始我们的操作了
5、验证Docker Desktop
打开刚才下载的windows Terminal运行以下命令
docker run hello-world
看到以下输出则表示安装成功,且能正常工作:
Docker Desktop已经存在hello-world镜像,表示已经拉取成功了
至此我们的Docker Desktop安装成功,同样的我们也可以通过命令行进行安装,这里就不一一介绍了
详细参考官方文档:https://docs.docker.com/desktop/install/windows-install/
八、Docker命令
1、查看docker版本信息
docker version
2、查看docker镜像
docker images
3、删除docker镜像
docker rmi 镜像ID
现在想删除镜像hello-world,则可以使用下述命令:
hello-world镜像已经不见了
如果出现这个错误,表示有容器使用这个镜像要先把容器删除才能删除这个镜像
4、查看所有的容器
docker ps -a
5、删除容器
docker rm 容器ID
如上图所示,docker中存在容器ID名为“b3aa29b38d53”的容器,如果我们想删除这一个容器,那么在该容器得停止后可以使用下述命令:
可以看到在使用了上述删除某一个容器之后,再次查看容器列表发现之前的容器已经不存在了。
6、查看docker帮助命令
docker --help
7、查看容器的数据卷
我们想查看容器的配置情况,可以使用这个命令
docker inspect 容器ID
我们想查看容器"cf559505fc9c"的配置情况,可以直接输入命令:
8、拉取镜像
docker pull 镜像名:指定版本
Docker就存在两个MySQL了,一个是刚拉取的最新版MySQL镜像,另一个是指定版本安装的MySQL镜像。