教你用100 行shell实现Docker详解

yizhihongxing

教你用100行Shell实现Docker详解

什么是Docker

Docker是一种容器化平台,可以将应用及其依赖打包到一个可移植的容器中,然后部署到任意主机上运行,而不需要担心环境的差异。

容器和虚拟机的区别

容器和虚拟机都是实现虚拟化的技术,但是有很大的不同。虚拟机是模拟物理硬件,每个虚拟机都有自己的操作系统、进程和资源管理,因此会占用很大的资源。而容器是在同一个操作系统上运行,它们共享同一个内核和系统资源,因此占用的资源更少。

如何使用Shell实现Docker

在《100行shell实现Docker》这篇文章中,作者通过Shell脚本来模拟Docker的基本功能,让读者更深入了解Docker的实现原理。

示例一:实现容器的隔离

容器的隔离是Docker非常核心的功能之一。在Shell中,可以通过namespace来实现进程、网络、文件系统等方面的隔离。以下是示例代码:

cur_dir=$(pwd)
mkdir -p ${cur_dir}/mnt
busybox mount -t tmpfs tmpfs ${cur_dir}/mnt
unshare -p -f --mount-proc=$cur_dir/proc chroot ${cur_dir}/ /bin/sh

这个脚本会创建一个临时目录,并将其挂载为tmpfs文件系统。然后通过unshare命令来创建新的namespace,并在其中使用chroot命令来隔离文件系统。最后,在这个新的namespace中启动一个新的shell。

运行这个脚本后,可以看到当前目录已经被隔离,而且在新的shell中无法访问到外部的文件系统。

示例二:实现镜像的打包和下载

镜像指的是包含应用及其依赖的文件系统,可以被打包后上传到Docker Hub等镜像仓库中,也可以从镜像仓库中下载到本地并运行。

在Shell中,可以通过tar命令来打包、解压镜像文件,并通过curl命令下载镜像:

# 打包镜像
tar -C ${linux_root} -c . | gzip > $cur_dir/ubuntu.tar.gz
# 上传镜像
curl --upload-file $cur_dir/ubuntu.tar.gz https://transfer.sh/ubuntu.tar.gz
# 下载镜像
curl https://transfer.sh/ubuntu.tar.gz | gzip -d | tar -C ${linux_root} -x

这个脚本会将当前系统中的文件打包为一个tar.gz文件,并上传到transfer.sh这个临时文件仓库中。然后使用curl命令下载该文件,并解压到Linux系统根目录下。

通过这两个示例,我们了解了如何使用Shell脚本模拟Docker的核心功能,希望这篇文章能够帮助您更深入地了解Docker的实现原理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:教你用100 行shell实现Docker详解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • shell脚本之安装docker

    shell脚本之安装docker 新建文本文件 # 文件名可以任意命名 [root@aliyun01 t01]# vim install_docker 编写脚本 #!/bin/sh # 安装Docker-CE yum install -y yum-utils device-mapper-persistent-data lvm2 # 增加最新版本的Docker…

    Docker 2023年4月11日
    00
  • Docker和k8s的区别与介绍

    本文来源:鲜枣课堂 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。 这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。 LXC,就是Linux容器虚拟技术(Linux container) 后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。 Dock…

    Docker 2023年4月13日
    00
  • 阿里云安装docker全过程

    下面是“阿里云安装docker全过程”的详细攻略: 准备 在安装docker之前,您需要在阿里云上启动一台Linux云服务器,并使用root权限登录。 安装docker 更新软件包索引 运行以下命令以更新软件包索引并确保所有依赖项都是最新的: bash sudo apt-get update sudo apt-get install apt-transpor…

    Docker 2023年5月16日
    00
  • Docker 安装后 报 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 解决办法

    1.看 /etc/docker/daemon.json 的配置 { “registry-mirrors”:[“https://—.mirror.ali—yuncs.com”] }         解决办法 $ systemctl daemon-reload $ sudo service docker restart $ sudo service do…

    Docker 2023年4月12日
    00
  • docker安装单机hadoop

    安装环境 centos7.2 docker 18.06.0-ce(这个安装参考我的另外一篇博客 首先关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 下载hadoop镜像 docker pull sequ…

    Docker 2023年4月13日
    00
  • Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介

    简介 Grafana Labs 简介 Grafana 是用于时序数据的事实上的仪表盘解决方案。它支持近百个数据源。Grafana Labs 想从一个仪表盘解决方案转变成一个可观察性 (observability) 平台,成为你需要对系统进行调试时的首选之地。 完整的可观察性 可观察性。关于这意味着什么,有很多的定义。可观察性就是对你的系统以及它们的行为和表现…

    2023年4月10日
    00
  • K8S 性能优化 – OS sysctl 调优

    前言 K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践。 参数一览 sysctl 调优参数一览 # Kubernetes Settings vm.max_map_count = 262144 kernel.softlockup_panic = 1 kernel.softlockup_all_cpu_backtrace = 1 …

    Docker 2023年4月9日
    00
  • Python项目编译Docker镜像

    docker已经安装好,docker的安装,请见另一篇博客: https://blog.csdn.net/u013282737/article/details/85246755   序言:介绍一下需要运行的Python项目的结构:   平时在PyCharm里面运行该工程,只要直接运行server.py文件即可   现在希望将该工程,部署到docker里面,使…

    Docker 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部