记录.Docker 的一些入门知识

本文最后更新于:2021年8月22日 下午

介绍

为何需要?

软件开发和测试最大问题之一:环境配置
用户各自计算机之间的环境都不相同,如何保证代码都能跑起来?

配置的两要素:操作系统的设置、各种库和组件的安装。
例如 Python,Java 等,都需要安装以及配置环境变量。
如果软件使用了某个老旧的模块,而且与当前环境不兼容(版本问题),就更加麻烦。

那能不能把 “环境” 都连同一起备份安装了?

虚拟机:一个独立的实例

虚拟机(virtual machine)就是带环境安装的一种解决方案。
在一个操作系统里面运行另一种操作系统!例:Window(Linux)

对于应用程序来说,与真实系统毫无区别;
对于底层系统来说,虚拟机就是一系列的普通文件,不需要即可删除,对其他部分毫无影响。

Linux 容器:用于移动所需

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
是目前最流行的 Linux 容器 解决方案。

Linunx 容器并不是模拟一个系统,而是对进程进行隔离。相当于在外面套了一个保护层,接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

Docker 将应用程序和依赖,打包在一个文件(镜像),运行这个文件,就会生成一个容器。在这个容器里运行,就像在物理机上运行一样。

而且 Docker 提供的接口也非常的简单,可以方便地创建和使用容器,还可以进行版本、复制、分享、修改,就像管理普通的代码一样。
例如对其进行修改且保存,作为一个新的镜像。

对比

待写,可以参看文章容器 vs. 虚拟机
虚拟机 vs 容器对比概览

基础三要素

镜像

它就是一个只读的模板,并且带有创建 Docker 容器的指令。
通常,一个镜像是基于另一个镜像的,但都会进行一些额外的定制。
例如,可以构建一个基于 Ubuntu 的镜像的镜像,但会安装 Apache Web 服务器和各种应用程序等,以及配置程、设置序运行所需要的环境等。

一个镜像可以创建多个容器。

容器

容器时镜像创建的实例。

每个容器都可以被启动、开始、停止、删除。
同时,它们之间又互相隔离,保证应用程序运行期间的安全。

可以把容器理解为一个 特别精简版 的 Linux ,它包括了 root 用户权限、进程空间、用户空间和网络空间等,
然后再加上在它之上的运行程序。
例如基于 MySQL 镜像创建了一个容器,容器并不是只有一个 MySQL 程序,而是同样安装运行在容器的 Linux 环境内。

数据卷

镜像是由多个文件系统(只读层)叠加而成的。

当启动一个容器的时候, Docker 会加载只读镜像层并且在其上(镜像栈顶层)添加一个读写层。
如果运行中修改了现有的一个已经存在的文件,那该文件就会从下面的 只读层复制到读写层 ,该文件的只读版本仍然存在,只是已经被读写层中的该文件的副本隐藏。
关闭容器,通过镜像重新启动,更改既会消失。

大多镜像运行时,就算不指定数据卷,也会根据生成一个随机名的数据卷。
Nexus 临时数据 创建镜像
Nexus 临时数据 创建数据卷

使用

Post not found: 记录-Docker 实践 Post not found: 日志-利用_Docker_搭建_Nexus_仓库私服

参考资料

Docker 入门教程
Docker 官方介绍
容器 vs. 虚拟机
Docker 三要素 :镜像、容器和仓库
Docker 数据管理(数据卷&数据卷容器)


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!