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/
登录后点击控制台

控制台搜索"容器镜像服务ACR"

点击红框位置

镜像⼯具

⾃⼰的加速器地址:

红框内代码复制到终端(每个⼈的不⼀样,要复制⾃⼰)

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、镜像操作




docker run 的逻辑原理:执⾏此命令后,docker 后台会检测此容器
需要的
镜像是否存在
,如果本地不存在则去公共仓库下载。下载完
毕后,根据镜像创建⼀个容器,分配⼀个⽂件系统给容器,在只读
的镜像层外边挂载⼀层可读写层 ,从宿主机配置的⽹桥接⼝中桥接
⼀个虚拟机接⼝ 到容器中,分配⼀个地址池中的ip地址给容器执⾏⽤
户所执⾏的命令,执⾏完成后将容器终⽌运⾏。如果想让容器执⾏
完命令后继续运⾏,选项加 -d,此容器会在执⾏完命令后在后台运⾏

相关推荐
隔振消音专家3 分钟前
冷水机组振动传导影响及专业化减振适配治理方案
大数据·运维
Brilliantwxx4 分钟前
【Linux】 软件包管理器(yum)+ Vim使用
linux·运维·服务器·开发语言·编辑器·vim
skywalk81639 分钟前
在FreeBSD的Uubntu兼容环境下安装Reasonix
linux·运维·freebsd
^yi24 分钟前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
Kina_C40 分钟前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
Android洋芋1 小时前
PrintFriendly网页文章转PDF插件工具及技术分析
运维·服务器·pdf·网页转pdf
Elastic 中国社区官方博客1 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索
RoboWizard1 小时前
金士顿高速闪存盘 单双接口适配多元存储需求
大数据·运维·人工智能·智能手机·云计算
hkj88081 小时前
Ubuntu 20.04 安装 OpenJDK 17
linux·运维·ubuntu
sulikey2 小时前
服务器安装Docker教程。如何在云服务器安装Docker容器?
运维·服务器·ubuntu·docker·安装教程·云服务器