Docker入门学习总结

参考原文:https://blog.csdn.net/deng624796905/article/details/86493330

一、什么是Docker?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
----摘自百度

我们在理解 docker 之前,首先我们得先区分清楚两个概念,容器和虚拟机。

可能很多读者朋友都用过虚拟机,而对容器这个概念比较的陌生。

我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。通过下面这幅图我们可以很直观的反映出这两者的区别所在。

Docker入门学习总结_第1张图片
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker ,就不用担心环境问题。
(这里用博主自己的理解就是,Docker提供了一个大的社区,在Docker里跨越了操作系统不兼容的问题,任何程序只要制作成镜像封装好,只要你有Docker,你就可以去运行:举个例子,你有了docker,你就可以在win10系统中运行Ubuntu,而且花费很小,启动很快,不用配置任何变量,只需要把Ubuntu的镜像下载下来,创建相应的容器即可~~)

总体来说, Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

二、Docker的优势

Docker相比于传统虚拟化方式具有更多的优势:

1.docker 启动快速属于秒级别。虚拟机通常需要几分钟去启动

2.docker 需要的资源更少, docker 在操作系统级别进行虚拟化, docker 容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor 层与内核层的虚拟化

3.docker 更轻量, docker 的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker 运行的镜像数远多于虚拟机数量,对系统的利用率非常高

4.与虚拟机相比, docker 隔离性更弱, docker 属于进程之间的隔离,虚拟机可实现系统级别隔离

5.安全性: docker 的安全性也更弱。 Docker 的租户 root 和宿主机 root 等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户 root 权限和宿主机的 root 虚拟机权限是分离的,并且虚拟机利用如 Intel 的 VT-d 和 VT-x 的 ring-1 硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

6.可管理性: docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力

7.高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性

8.快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间

9.交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 Docker 在 Dockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署
Docker入门学习总结_第2张图片

三、Docker的三大基本概念

Docker 中包括三个基本的概念:

Image(镜像)
Container(容器)
Repository(仓库)

(镜像的话有点像面向对象中的类,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。比如mysql的镜像,Ubuntu的镜像;容器则类似于面向对象的实例化对象;仓库则是存放镜像的地方,通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本 。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。)

四、Docker简单应用

这里博主在安装好Docker后进行了一些简单操作,在这里进行一下总结,主要操作语句学习来自于菜鸟教程:https://www.runoob.com/docker/docker-hello-world.html

Docker 命令大全

**
容器生命周期管理

run 
start/stop/restart
kill
rm
pause/unpause
create
exec

容器操作

ps
inspect
top
attach
events
logs
wait
export
port

容器rootfs命令

commit
cp
diff

镜像仓库

login
pull
push
search

本地镜像管理

images
rmi
tag
build
history
save
load
import

info|version

info
version

这里提供一个从远程仓库拉取MySQL镜像安装并创建容器进行操作的简单示例:

(1)首先打开终端,输入 docker version来确认本机是否安装docker(未安装的童鞋请参考博主上一篇博文)
Docker入门学习总结_第3张图片
(2)随后输入 docker images 来查看现有镜像(这里博主已经提前安装好了MySQL镜像,没有安装的童鞋可以输入 docker pull mysql 进行远程拉取安装)
在这里插入图片描述(3)输入 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 -d mysql 运行MySQL镜像(这里密码博主为了简便选择了最简单的1234)
在这里插入图片描述p.s. 可以输入 docker ps 确认容器运行状态
在这里插入图片描述(4)输入 docker exec -it mysql bash 进入容器

在这里插入图片描述
(5) 输入 mysql -u root -p 密码1234,成功登录MySQL
Docker入门学习总结_第4张图片
(6)进行你的MySQL操作吧!
Docker入门学习总结_第5张图片

你可能感兴趣的:(Docker入门学习总结)