Docker学习

1.Docker介绍

1.1什么是Docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker 是一种虚拟化技术,解决开发环境和生产环境环境一致的问题,通过 Docker 我们可以将程序运行的环境也纳入到版本控制中,排除因为环境造成不同运行结果的可能。

1.2 Docker的核心技术

核心思想:隔离
Linux 命名空间Namespace–>实现Docker容器与宿主机的进程/网络/文件系统的隔离
控制组Control Groups(简称 CGroups)–>隔离宿主机上的物理资源,分配给不同的容器,例如 CPU、内存、磁盘 I/O 和网络带宽。
UnionFS 联合文件系统–>镜像的基础
http://dockone.io/article/2941

1.3 Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。

1.DevOps(开发、运维)快速,一致地交付您的应用程序
打包镜像发布测试一键运行。开发,测试和生产环境都是高度一致的。

2.更便捷的升级和扩缩容
Docker 是基于容器的平台,允许高度可移植的工作负载。
使用了 Docker之后,我们部署应用就和搭积木一样。

3.更高效的计算资源利用
Docker 轻巧快速,是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例!服务器的性能可以被压榨到极致。

2.Docker架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。仓库分为公有仓库和私有仓库。Docker Hub(https://hub.docker.com) 是国外的。阿里云…都有容器服务器(配置镜像加速!)
    镜像
    镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。
    所有应用,直接打包docker镜像,就可以直接跑起来!
    如何得到镜像?
    ​ 1.从远程仓库下载 docker pull
    ​ 2.别人拷贝给你
    ​ 3.自己制作一个镜像 DockerFile
    Docker Dockerfile

当镜像被 docker run 命令创建时就会在镜像的最上层添加一个可写的层,也就是容器层,所有对于运行时容器的修改其实都是对这个容器读写层的修改。

容器和镜像的区别就在于,所有的镜像都是只读的,而每一个容器其实等于镜像加上一个可读写的层,也就是同一个镜像可以对应多个容器。

3.Docker和虚拟机的区别

3.1虚拟机结构

在这里插入图片描述

  • 基础设施(Infrastructure)。它可以是你的个人电脑,数据中心的服务器,或者是云主机。
  • 主操作系统(Host Operating System)。你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
  • 虚拟机管理系统(Hypervisor)。利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统。类型1的Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V以及支持Linux的KVM。类型2的Hypervisor有VirtualBox和VMWare。
  • 从操作系统(Guest Operating System)。假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从操作系统,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。
  • 各种依赖。每一个从操作系统都需要安装许多依赖。如果你的的应用需要连接PostgreSQL的话,则需要安装libpq-dev;如果你使用Ruby的话,应该需要安装gems;如果使用其他编程语言,比如Python或者Node.js,都会需要安装对应的依赖库。
  • 应用。安装依赖之后,就可以在各个从操作系统分别运行应用了,这样各个应用就是相互隔离的。

3.2 Docker结构

在这里插入图片描述

  • 基础设施(Infrastructure)。
  • 主操作系统(Host Operating System)。所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法”运行”Docker。
  • Docker守护进程(Docker Daemon)。Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器。
  • 各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。
  • 应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动。由于没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源;虚拟机更擅长于资源的完全隔离。

4.Docker安装

使用官方安装脚本自动安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

CenOS Docker安装

5.Docker常用命令

在这里插入图片描述
1.docker 挂载
sudo docker run --name ffdcparser-lite -d -p 8080:8080 -v /home/ffdcdata:/ffdcdata ffdcparser-lite:1.0.7
docker通过挂载宿主机磁盘目录,来永久存储数据。
宿主机目录:/home/ffdcdata,映射到docker容器中的目录/ffdcdata
linux的/tmp的目录在物理机器重启后会自动删除。
/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定。我们可以配置这个文件,比如你不想让系统自动清理/tmp下以tomcat开头的目录,那么增加下面这条内容到配置文件中即可:

x /tmp/tomcat.*

2.docker commit
将操作过的容器通过commit 提交为一个镜像!我们以后就可以使用我们修改过的镜像。
docker commit 提交容器成为一个新的镜像
#命令和git原理类似
docker commit -m=“描述信息” -a=“作者” 容器id 目标镜像名:[版本TAG]
3.docker镜像打包导入到另一台服务器
导出image
1.sudo docker save -o /home/jixj/ffdcaitips.tar ffdcparser-lite-test:latest
导入到另一个服务器的指定目录
2.sudo scp /home/jixj/ffdcaitips.tar root@10.10.10.10:/home/jixj1
3.导出文件
sudo docker load < /home/jixj1/ffdcaitips.tar
4.查看刚才导出的镜像
sudo docker images
Docker命令大全

6.Docker镜像加载原理

UnionFs (联合文件系统):Union文件系统(UnionFs)是一种分层、轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下( unite several directories into a single virtual filesystem)。Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
boots(boot file system)主要包含 bootloader和 Kernel, bootloader主要是引导加 kernel, Linux刚启动时会加bootfs文件系统,在 Docker镜像的最底层是 boots。这一层与我们典型的Linux/Unix系统是一样的,包含boot加載器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由 bootfs转交给内核,此时系统也会卸载bootfs。
rootfs(root file system),在 bootfs之上。包含的就是典型 Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。 rootfs就是各种不同的操作系统发行版,比如 Ubuntu, Centos等等。
在这里插入图片描述
平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker里才200M?

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值