(一)、Docker介绍
1.Docker概述
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
比喻:
要了解Docker是什么,从隐喻开始比使用技术解释更容易,而Docker本身是一个强大的隐喻:Docker的本意是码头工人。码头工人是这样的劳动者:当船只停靠在港口时,码头工人将商品移入和移出船只。箱子和物品的大小和形状各不相同,经验丰富的码头工人因其能够以经济有效的方式手工将货物装入船舶而受到重视。雇人搬东西并不便宜,但别无选择。
在有Docker之前,不同团队的码头工人被要求装载不同形状的物体到船上去:
有Docker之后:
- 船被设计为可以更有效的携带,装载和卸载预设形状的物品
- 不同的物品放在同样一个简单的容器中。载体不关心容器里面是什么
- 载体可以装载到其他地方,减少了港口装载的瓶颈
- 仅需一个码头工人来操作设计用来移动容器的机器
对于工作在软件方面的人来说,这应该是熟悉的。花费了大量时间和智力,将隐喻奇怪形状的软件变成了不同大小的异形船,其中包含其他形状奇特的软件,因此它们可以出售给其他地方的用户或企业。
2.Docker为什么会出现?
正常开发中,一套产品我们需要配置两套环境。第一个是开发环境、第二个是应用环境。
- 在我的电脑上能运行,为什么在你的电脑上不能运行?
- 版本更新,导致服务不可用。
- 环境配置十分的麻烦,每一个机器都需要部署环境。
猜想: 发布一个项目(jar+MySQL…),项目能不能带上环境打包?
我目前所了解的就是:
我们部署一个SpringBoot的jar包到阿里云服务器上,但是我们的数据库信息和表并不会跟着jar包进行运行上去。我们要自己在阿里云服务器上进行编写MySQL语句然后数据导入。耗时耗力!!!
- 没有Docker前: 开发人员->jar包-> 运维人员->部署环境
- 使用Docker后: 开发人员->(jar包+环境)
Docker隔离: Docker核心思想,打包装箱,每一个箱子都是相互隔离的。
- 没有Docker : 以前水果和核武器需要分开船只进行装
- 有Docker: 水果和核武器分别装箱可以放在一个船上。
3.Docker历史
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。
docker为什么会火:主要是十分轻巧
在容器出现之前,主要使用的虚拟机技术:
虚拟机:在windows中装一个vmware,通过这个软件我们可以虚拟出来一台或者多台电脑,比较笨重。
虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术。
vm,linux centos原生镜像(一台电脑) 隔离,需要开启多个虚拟机!
docker,隔离,镜像(最核心的环境 4m+jdk+mysql)十分小巧,运行镜像就行了,小巧,几个M kb 秒级启动
聊聊Docker
Docker是基于Go语言开发的。
Docker官网地址: https://www.docker.com/
Docker仓库地址: https://hub.docker.com/
Docker文档地址: https://docs.docker.com/
4.Docker能做什么?
之前的虚拟机技术
- 浪费资源,占用内存非常大。
- 冗余步骤非常多
- 启动很慢!
容器化技术
容器化技术不是模拟一个完整的操作系统!
比较Docker和虚拟机技术的不同:
- 传统虚拟机: 虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也米有虚拟我们的硬件,所以就轻便化了
- 每个容器间是互相隔离的,每个容器都是互不影响的。
DevOps (开发、运维)
应用更快速的交付和部署
- 传统 : 一堆帮助文件,安装程序
- Docker: 打包进行发布测试,一键运行
更便捷的升级和扩缩容
- 使用Docker之后,我们部署应用就和搭积木一样。
- 水平扩容便捷
更简单的系统运维
- 容器化之后,我们开发和测试的环境是高度一致的。
更高效的资源利用
- Docker 是内核级别的虚拟化,可以再一个物理机上运行很多的容器实列。
(二)、Docker的配置与使用
1.三大基本名词
- 镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 => run =>tomcat01容器(提供服务),通过这个镜像可以创建多个容器(端口不同)(最终服务运行或者项目运行就是在容器中的)。
- 容器(container):
Docker利用容器技术可以独立运行一个或者一组应用,通过镜像来创建,启动,停止、删除、基本命令。目前就可以把这个容器理解为一个简易的linux系统
- 仓库(repository)
仓库就是存放镜像的地方!仓库分为公有和私有仓库!
Docker hub(默认是国外的) 阿里云…都有容器服务器(配置镜像加速!)
镜像就是类,容器就是实例化后的实体类,仓库就是用来存放镜像的地方
仓库-> 镜像 -> 容器
2.安装Docker
- 环境准备
- 需要会一点linux基础
- centos7
- 使用shell连接远程服务器进行操作
- 环境查看
系统内核: 5.10
[root@Jsxs ~]# uname -r 5.10.134-13.al8.x86_64
系统版本
[root@Jsxs ~]# cat /etc/os-release NAME="Alibaba Cloud Linux" VERSION="3 (Soaring Falcon)" ID="alinux" ID_LIKE="rhel fedora centos anolis" VERSION_ID="3" PLATFORM_ID="platform:al8" PRETTY_NAME="Alibaba Cloud Linux 3 (Soaring Falcon)" ANSI_COLOR="0;31" HOME_URL="https://www.aliyun.com/"
- 开始安装
- 卸载旧的版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2. 需要安装 安装包
yum install -y yum-utils
3. 设置镜像的仓库
更改成阿里云的
yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 更新yum软件包索引
yum makecache fast
报错提示fast参数的问题,这是因为版本问题,centos8没有该参数。
解决办法为:去掉fast参数。
- 安装Docker
dnf -y install docker-ce --nobest
- 查看Docker是否安装成功
dnf list docker-ce
- 启动Docker服务。
systemctl start docker
- 查看Docker服务的运行状态。
systemctl status docker
active(running)标识运行成功!
- 测试hello-world
docker run hello-world
- 查看一下下载的hello-world镜像
docker images
3.卸载Docker
- 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
- 删除目录(运行环境/资源)
rm -rf /var/lib/docker rm -rf /var/lib/containerd /var/lib/docker 默认工作路径
cd /var/lib/docker