问题描述
docker 的作用
docker 解决了以下问题:
- 多台机器需要配相同环境、设置、应用
- 比如在双11流量非常多的时候,某些大型公司要求10分钟内扩容1000台机器
- 开发可以跑,程序传给测试就不能跑了,类似这种由于环境不一致造成的各种问题
如何解决这些问题
我们可能会想到,如果每台机器所运行的环境一致就不会出现开发可以跑,测试跑不了的问题了。我们可以将所有的配置信息、用到了什么服务都传到另外一台机器上。而这些配置信息、服务信息就叫环境
程序是要在服务器上运行的,服务器是专门用来提供服务的电脑,我们可以写一个软件,这个软件用于传输环境,并且程序可以在这个软件中跑起来,这样就不需要配置电脑环境了
这个软件为了解决快速扩容的问题,还需要写的非常轻量,多态机器同时快速配置,需要启动简单、方便
容器
容器就是上面介绍的内容的具体实现,它将软件打包成标准化单元,以用于开发、交付和部署
- 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置
- 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行
- 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突
安装 docker 软件
像普通的软件一样安装docker就行了,不过官方为了能快速大量的配置 docker 提供了安装脚本,一般的java程序都跑在Linux下,所以最好在Linux下安装docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
# 启动服务
systemctl start docker
# 在这个容器中安装MySQL
docker pull MySQL
在输入命令之前请先关闭防火墙,以我之前学习Linux的经验而言防火墙这东西除了给我带来困惑以外也没有什么其他能力了
在输入命令之前切换到管理员用户
docker 主要概念
镜像:就是一个只读的模板,镜像可以用来创建 Docker 容器,一个镜像可以创建多个容器,类比与 java 的类
容器:是用镜像创建的运行实例,Docker 利用容器独立运行一个或一组应用。它可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。 可以把容器看作是一个简易的 Linux 环境和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的,类比与 java 中由类生成的对象
仓库:是集中存放镜像文件的场所。仓库和仓库注册服务器是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。 仓库分为公开仓库和私有仓库两种形式,最大的公开仓库是 DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云、网易云等
docker 在接受到用户请求添加环境的时候,会先在本地仓库找有没有用户需要的东西,也就是在 docker 的机器上寻找有没有所需环境,如果没找到,才会去远程仓库中下载
容器与虚拟机
容器与虚拟机都可以跑程序,那它们有什么区别呢
容器是一个应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行 。与虚拟机相比, 容器占用的空间较少(容器镜像大小通常只有几十兆),瞬间就能完成启动
虚拟机 (VM) 是一个物理硬件层抽象,用于将一台服务器变成多台服务器。 管理程序允许多个 VM 在一台机器上运行。每个 VM 都包含一整套操作系统、一个或多个应用、必要的二进制文件和库资源,因此 占用大量空间 。而且 VM 启动也十分缓慢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)