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