Docker

1、Docker 是什么?
Docker 是⼀个开源的应⽤容器引擎,可以实现虚拟化,完全采⽤"沙
盒"机制,容器之间不会存在任何接⼝。
Docker 通过 Linux Container(容器)技术将任意类型的应⽤进⾏包
装,变成⼀种轻量级、标准化、可移植、⾃管理的组件。在包装应
⽤的同时,可连带该应⽤的依赖和环境⼀并进⾏打包,所以可以将
这种"包"移植到任意环境去运⾏,省去兼容性的问题。
2、Docker 和虚拟机的区别

Docker和虚拟机在以下⼋个⽅⾯存在差异:

  1. **启动速度:**Docker 启动速度⾮常快,属于秒级别,⽽虚拟机通
    常需要⼏分钟去启动。
  2. **资源消耗:**Docker 需要的资源更少,它直接运⾏在宿主机的内
    核上,以⼀系列进程的结合形式存在。⽽虚拟机则需要消耗更多
    的资源,因为它在操作系统级别进⾏虚拟化。
  3. **轻量级:**Docker 更轻量,它的架构可以共⽤⼀个内核与共享应
    ⽤程序库,所占内存极⼩。⽽虚拟机则相对较重,需要消耗更多
    的内存。
  4. **隔离性:**虚拟机可以实现系统级别的隔离,⽽ Docker 则属于进
    程之间的隔离,隔离性相对较弱。
  5. **安全性:**Docker 的安全性也更弱。
  6. **可管理性:**Docker 的集中化管理⼯具还不算成熟。
  7. **兼容性:**开发⼈员不需要关系具体是哪个 Linux 操作系统,基本
    市⾯上主流系统都可使⽤ Docker。
  8. **数据持久性:**Docker ⽆法存储数据,当容器重启后,数据会消
    失;⽽虚拟机可以存储各种数据,包括⽇志、数据库等。
    3、Docker 解决的问题
    (1)系统环境不⼀致问题
    环境不同时可能会出现的环境问题:

    使⽤ docker 容器时:

    将简易的操作系统、编写好的代码、部署完成的应⽤服务配置等打
    包放到容器内,再转到鲸⻥上,由鲸⻥送到服务器,此时,⽆论是
    什么运⾏环境,docker 容器都可以运⾏。
    (2)应⽤隔离问题
    Linux 是⼀个⽀持多⽤户的操作系统,正因如此,可能会造成⽤户使
    ⽤时,互相之间占⽤资源过多,以致于服务器资源空间不⾜,⽽
    docker 具有隔离性,可以在启动时就限定好硬件的使⽤率,当某个
    容器到达或超过限定的阈值时,就会被 kill,此时需要运维⼈员对其
    进⾏调试。
    (3)服务器扩展问题
    ⽇常的业务量⼤多很平均,但在业务量繁多时期,⽐如"双⼗⼀",
    "春运购票"等场景,就需要对服务器进⾏横向扩展才能将负载均衡下
    来,⽽如果⼤规模地扩展服务器,待服务器满载时期过去,回到⽇
    常业务量后,就会导致剩余资源极⼤地浪费。并且在扩展时,还要
    对各种应⽤服务进⾏部署、调试等,⼯作量也⼗分庞⼤,所以,此
    时使⽤ Docker 将会真正意义上实现快速部署,且耗费资源较少,尤
    其不会出现兼容性的问题。
    4、Docker 的优缺点
    (1)优点
  9. **体积⼩:**减⼩系统的开销值,⼀台主机可以运⾏上千个容器。
  10. **启动迅捷:**更快速的交付和部署,docker容器 ,⽐传统虚拟机
    要快很多,docker核⼼解决的问题就是利⽤容器实现VM类似的
    功能。
  11. **操作⽅便:**通过配置 dockerfile 便⽀持灵活的⾃动化创建和部
    署。
  12. **更轻松的扩展:**可以实现更简单的、更可靠的迁移,避免了兼容
    性等问题。
  13. 更强的可扩展性和可移植性。
    (2)缺点
  14. **安全问题:**如果没有正确配置,⼀个容器中的恶意代码可能会影
    响到主机上的其他容器以及主机本身的安全。
  15. **存储问题:**当使⽤⼤量容器时,存储和管理容器映像可以变得⾮
    常困难。这可能需要使⽤分布式存储或其他解决⽅案来管理⼤量
    容器的存储。
  16. **性能问题:**在某些情况下,容器和虚拟机相⽐会导致性能损失。
    这些性能问题越来越少,但是仍然需要考虑。
  17. **⽹络问题:**Docker 可能会在⽹络配置上存在⼀些问题,这可能
    需要更多的时间来诊断和解决。
  18. **复杂性:**Docker 是⼀个⾮常灵活的系统,但这同时也让它更加
    复杂。⻓时间使⽤ Docker 会产⽣⼤量的脚本和配置⽂件,这些
    可能变得难以维护。
  19. **资源消耗:**使⽤ Docker 必须占⽤⼀些资源,包括 CPU、内
    存、磁盘等等。如果运⾏容器的主机资源不⾜,可能会导致性能
    问题。
  20. **学习曲线:**Docker 是⼀个相对新的技术
  21. **需要花费时间配置和管理:**使⽤ Docker 需要花时间配置和管理
    容器集群和应⽤程序。需要配置每个容器,管理 Jenkins、
    Kubernetes 等运⾏ Docker 容器的⼯具。
  22. **映像构建复杂:**构建Docker映像需要按照特定格式编写
    Dockerfile 脚本,需要遵循⼀定的规范和流程,这可能需要更多
    的时间和精⼒。
    5、Docker 架构
  23. ⽤ docker pull 命令从 hub.docker.com 官⽹上下载 images (镜
    像)。
  24. 可以⽤ docker save 命令将镜像保存到本地 tar ⽂件,也可以⽤
    docker load 命令将本地tar ⽂件导⼊镜像。
  25. 可以⽤ docker build 构建 Dockerfile 镜像。
  26. 可以⽤ docker run 和 docker create 将镜像运⾏成 container
    (容器),容器内可以安装所需要的 APP。
  27. 可以⽤ docker commit/export 将容器做成镜像反复的使⽤。
  28. 可以将⾃⼰制作的镜像发布到 hub.docker.com ⽹站,需要注册
    账号。
    6、Docker 核⼼概念
  29. 镜像(images):⼀个⾯向 docker 容器引擎的只读模板,也
    是容器的基础,类似于 iso 镜像⽂件。
  30. **容器(container):**基于镜像所创建的虚拟实例,相当于⼀个
    简易的 Linux 环境,可启停,且多个容器之间互相隔离。
  31. **仓库(Repository):**集中存放 docker 镜像的位置,可使⽤
    docker pull 或 push 命令下载或上传到私有或公有仓库。
  32. **仓库注册服务器(registry):**存放仓库的地⽅,如果没有私有
    仓库,则使⽤公共仓库 docker hub。
    7、Docker 特性
    **⽂件系统隔离:每个进程容器运⾏在⼀个完全独⽴的根⽂件系统
    ⾥。
    资源隔离: 实现不同的容器的资源配额和调度,cgroup。
    ⽹络隔离:**每个进程容器运⾏在⾃⼰的⽹络空间,拥有虚拟接⼝
    和 IP 地址。
    **⽇志记录:**Docker将收集到和记录的每个进程容器的标准流
    (stdout/stderr/stdin),⽤于实时检索或者批量检索。
    **变更管理:**容器⽂件系统的变更可以提交到新的镜像中,并可重
    复使⽤以创建更多的容器。
    **交互式shell:**Docker可以分配⼀个虚拟终端并且关联到任何容
    器的标准输出上,例如运⾏⼀个⼀次性交互shell。
    ⼆、安装 Docker
    1、Docker 要求

    2、安装 Docker

root@doc \~\]# cat \<\< EOF \| tee /etc/modules load.d/k8s.conf \> overlay \> br_netfilter \> EOF \[root@doc \~\]# modprobe overlay # 加载overlay内核 模块 \[root@doc \~\]# modprobe br_netfilter # 加载 br_netfilter内核模块\[root@doc \~\]# cat \<\< EOF \| tee /etc/sysctl.d/k8s.conf \> net.bridge.bridge-nf-call-iptables = 1 \> net.bridge.bridge-nf-call-ip6tables = 1 \> net.ipv4.ip_forward = 1 \> EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 \[root@doc \~\]# sysctl --system \[root@doc \~\]# yum install -y yum-utils device mapper-persistent-data lvm2 \[root@doc \~\]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker ce/linux/centos/docker-ce.repo # 添加阿⾥云yum源 \[root@doc \~\]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose plugin -y --allowerasing # 安装docker,allowerasing:允许卸载旧版本 **overlay:**是⼀种⽂件系统层叠技术,常⽤于容器化平台(⽐如 Docker)中。它允许将多个⽂件系统叠加在⼀起,从⽽创建⼀个 统⼀可⻅的⽂件系统。通过加载 overlay 模块,可以在 Linux 系 统中使⽤ overlay ⽂件系统,并且它将提供⼀些额外的功能,⽐ 如联合挂载、⽂件层叠等。 **br_netfilter:**Linux 内核中的⼀个模块,它提供了桥接设备(bridge device) 和⽹络过滤器(netfilter) 之间的集成。它允许在桥 接设备上使⽤⽹络过滤器功能,如防⽕墙规则、⽹络地址转换 (NAT) 等。通过加载 br_netfilter 模块,你可以在 Linux 系统中的 桥接设备上应⽤⽹络过滤规则对⽹络流量进⾏管理和控制。 **device-mapper-persistent-data:**⼀个Linux内核模块,它为 Device Mapper设备提供持久存储功能。DMPD提供了⼀个⽤于 存储映射关系的数据库,使得Device Mapper可以持久化存储映 射数据,以便在系统重新启动后仍然可以恢复之前的映射关系。 **lvm2:**Linux系统下的逻辑卷管理⼯具,LVM 的升级版,它是对 磁盘分区进⾏管理的⼀种机制,建⽴在硬盘和分区之上的⼀个逻 辑层,⽤来提⾼磁盘管理的灵活性。 **3、设置阿⾥云镜像加速器** **阿⾥云官⽹:**https://www.aliyun.com/ **登录后点击控制台** ![](https://i-blog.csdnimg.cn/direct/a580d8f5056946ef8d6ec627be421eb5.png) 控制台搜索"容器镜像服务ACR" ![](https://i-blog.csdnimg.cn/direct/5f6b15e65ce741b1ae9cbf3d303496fc.png) **点击红框位置** ![](https://i-blog.csdnimg.cn/direct/703be8bd392f4c5498850951b305235b.png) **镜像⼯具** ![](https://i-blog.csdnimg.cn/direct/87255009ff4c44c08c61e272e93e88b8.png) **⾃⼰的加速器地址:** ![](https://i-blog.csdnimg.cn/direct/41c295a39e1e4b37b452dfa541ecceec.png) **红框内代码复制到终端(每个⼈的不⼀样,要复制⾃⼰)** ![](https://i-blog.csdnimg.cn/direct/59f1ad16578145bf8f734977fc17a59c.png) \[root@doc \~\]# sudo mkdir -p /etc/docker \[root@doc \~\]# sudo tee /etc/docker/daemon.json \<\<- 'EOF' \> { \> "registry-mirrors": \["https://9ghz4eu4.mirror.aliyuncs.com"

> }
> EOF
{
"registry-mirrors":

"https://9ghz4eu4.mirror.aliyuncs.com"

}

root@doc \~\]# sudo systemctl daemon-reload \[root@doc \~\]# sudo systemctl restart docker \[root@doc \~\]# docker info \| grep "https" # 查看 ⾃⼰的镜像加速器地址 https://9ghz4eu4.mirror.aliyuncs.com/ **三、Docker 基本操作** **1、镜像操作** ![](https://i-blog.csdnimg.cn/direct/5f43f0b2016f4c5695fefe7193e17629.png) ![](https://i-blog.csdnimg.cn/direct/9ac66b562e6f4eb0978a220bfca4b2a4.png) ![](https://i-blog.csdnimg.cn/direct/c8e7f367ef224bc9a1779a37294f1122.png) ![](https://i-blog.csdnimg.cn/direct/6c06438c73e34e78b47d0a106f331373.png) **docker run 的逻辑原理:**执⾏此命令后,docker 后台会检测此容器 需要的**镜像是否存在**,如果本地不存在则去公共仓库下载。下载完 毕后,根据镜像创建⼀个容器,**分配⼀个⽂件系统**给容器,在只读 的镜像层外边**挂载⼀层可读写层** ,从宿主机配置的⽹桥接⼝中**桥接** **⼀个虚拟机接⼝** 到容器中,**分配⼀个地址池中的ip地址**给容器执⾏⽤ 户所执⾏的命令,**执⾏完成后将容器终⽌运⾏**。如果想让容器执⾏ 完命令后继续运⾏,选项加 -d,此容器会在执⾏完命令后在后台运⾏

相关推荐
David爱编程9 分钟前
Service 与 Headless Service 全面对比与实战指南
docker·容器·kubernetes
泛黄的咖啡店24 分钟前
域名系统DNS
运维·云计算
巨懵32 分钟前
不使用dockerfile的方式制作一个Ubuntu20.04的镜像
docker
dessler33 分钟前
Kubernetes(k8s)-集群监控(Prometheus)
linux·运维·kubernetes
一夜沐白34 分钟前
Linux用户管理
linux·运维·服务器·笔记
Pasregret2 小时前
备忘录模式:实现对象状态撤销与恢复的设计模式
运维·服务器·设计模式
珹洺3 小时前
Linux红帽:RHCSA认证知识讲解(十 四)分区管理、交换分区,创建逻辑卷与调整逻辑卷的大小
linux·运维·服务器
DavidSoCool3 小时前
k8s生成StarRocks集群模版
云原生·容器·kubernetes
威桑3 小时前
解决Ubuntu下使用CLion构建Qt项目时找不到已安装的模块的问题
linux·运维·ubuntu
珹洺5 小时前
Linux操作系统从入门到实战(四)Linux基础指令(下)
linux·运维·服务器