前端学习Docker(一)

前言

docker主要用于运维,当然了,开发也可以用,可以在启动应用项目的时候使用docker方式,docker是虚拟化技术,每一个docker容器都是一个linux虚拟机,而且还可以根据不同的应用定制,最小的可以直接依赖linux内核,仅仅几M就可以运行。这个技术解决了软件的部署问题。

布署软件的问题

  • 如果想让软件运行起来要保证操作系统的设置,各种库和组件的安装都是正确的
  • 热带鱼&冷水鱼 冷水鱼适应的水温在 5-30 度,而热带鱼只能适应 22-30 度水温,低于 22 度半小时就冻死了

虚拟机

  • 虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统
    • 资源占用多
    • 冗余步骤多
    • 启动速度慢

Linux 容器

  • 由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
  • Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
    • 启动快
    • 资源占用少
    • 体积小

什么是Docker

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

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

  • Docker 是一个开源的、轻量级的容器引擎,主要运行于 Linux 和 Windows,用于创建、管理和编排容器。它是目前最流行的 Linux 容器解决方案。
  • Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样

docker 和 KVM

  • 启动时间
    • Docker 秒级启动
    • KVM 分钟级启动
  • 轻量级 容器镜像通常以 M 为单位,虚拟机以 G 为单位,容器资源占用小,要比虚拟要部署更快速
    • 容器共享宿主机内核,系统级虚拟化,占用资源少,容器性能基本接近物理机
    • 虚拟机需要虚拟化一些设备,具有完整的 OS,虚拟机开销大,因而降低性能,没有容器性能好
  • 安全性
    • 由于共享宿主机内核,只是进程隔离,因此隔离性和稳定性不如虚拟机,容器具有一定权限访问宿主机内核,存在一下安全隐患
  • 使用要求
    • KVM 基于硬件的完全虚拟化,需要硬件 CPU 虚拟化技术支持
    • 容器共享宿主机内核,可运行在主机的 Linux 的发行版,不用考虑 CPU 是否支持虚拟化技术

Docker通常用于如下场景:

  • web应用的自动化打包和发布
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
  • 节省项目环境部署时间
    • 单项目打包
    • 整套项目打包
    • 新开源技术
  • 环境一致性
  • 持续集成
  • 微服务
  • 弹性伸缩

Docker 体系结构

  • containerd 是一个守护进程,使用 runc 管理容器,向 Docker Engine 提供接口
  • shim 只负责管理一个容器
  • runC 是一个轻量级工具,只用来运行容器

1629640331571.png

Docker 内部组件

  • namespaces 命名空间,Linux 内核提供的一种对进程资源隔离的机制,例如进程、网络、挂载等资源
  • cgroups 控制组,linux 内核提供的一种限制进程资源的机制,例如 cpu 内存等资源
  • unonFS 联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型

docker 安装

安装

yum install -y yum-utils   device-mapper-persistent-data   lvm2
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
yum install -y yum-utils   device-mapper-persistent-data   lvm2
yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y

启动

systemctl start docker
systemctl start docker

查看 docker 版本

$ docker version
$ docker info
$ docker version
$ docker info

卸载

docker info
yum remove docker
rm -rf /var/lib/docker
docker info
yum remove docker
rm -rf /var/lib/docker

Docker 架构

1629640331876.jpg

Docker 镜像加速

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,登陆后,左侧菜单选中镜像加速器就可以看到你的专属地址了

2021-09-30 153630.png

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
//daemon-reload: 重新加载某个服务的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
# 重载所有修改过的配置文件
//daemon-reload: 重新加载某个服务的配置文件
sudo systemctl daemon-reload
sudo systemctl restart docker