240
我爱毛绒绒~~~~~~~

Docker简介安装

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”

底层原理

Docker是怎么工作的

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

为什么Docker比较比VM快

  • docker有着比虚拟机更少的抽象层
    由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
  • docker利用的是宿主机的内核,而不需要Guest OS
    因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了整个过程,因此新建一个docker容器只需要几秒钟

比较 Docker 和传统虚拟化方式的不同之处

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

基本组成

镜像(image)

Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器

容器(container)

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例

它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

仓库(Repository)

仓库(Repository)是集中存放镜像文件的场所

仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等

Docker客户端

客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个Host上,客户端也可以通过socket或REST API与远程的服务器通信。
最常用的Docker客户端是docker命令。通过docker我们可以方便地在Host上构建和运行容器。

Docker服务器

Docker daemon是服务器组件,以linux后台服务的方式运行。

Dokcer daemon运行在Docker host上负责创建,运行,监控容器,构建存储镜像。
默认配置下,Docker daemon只能响应来自本地host的客户端请求,如果要允许远程客户端请求,需要在配置文件中打开TCP监听:
1、编辑配置文件

vi /lib/systemd/system/docker.service

总结

  1. Docker 本身是一个容器运行载体或称之为管理引擎。

  2. 我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是 image镜像文件

  3. 只有通过这个镜像文件才能生成 Docker 容器

  4. image 文件可以看作是容器的模板

  5. Docker 根据 image 文件生成容器的实例

  6. 同一个 image 文件,可以生成多个同时运行的容器实例

  7. image 文件生成的容器实例,本身也是一个文件,称为镜像文件

  8. 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器

  9. 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了

镜像原理

是什么

UnionFS(联合文件系统)
  • Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。

  • Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

  • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理
  • docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS

  • bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

  • rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

  • 对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

分层的镜像

最大的一个好处就是 - 共享资源
比如:有多个镜像都从相同的 base 镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,

同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

特点

当容器启动时,一个新的可写层被加载到镜像的顶部。

这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

只有容器层是可写的,容器层下面的所有镜像层都是只读的

所有对容器的改动,无论添加、删除,还是修改文件都只会发生在容器层中。

容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

安装(以Centos7 为例)

前置安装依赖配置yum源

#安装gcc,gcc+
yum -y install gcc
yum -y install gcc-c++
#安装软件依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置stable镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#安装docker ce
yum -y install docker-ce
#启动docker
systemctl start docker
#设置开机自启
systemctl enable docker
#测试
docker version
docker run hello-world

配置镜像加速

参考阿里云文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

#创建目录
mkdir -p /etc/docker
#配置阿里云镜像加速
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://itet61yx.mirror.aliyuncs.com"]
 }
 EOF
 #重载系统配置服务
 systemctl daemon-reload
 #重载docker
 systemctl restart docker

卸载Docker

#停止docker
systemctl stop docker
#yum卸载
yum -y remove docker-ce
#删除docker产生的数据(镜像容器等等)
rm -rf /var/lib/docker

修改配置docker配置文件

vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
posted @   水开白  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示