搜索
首页运维Docker最系统的掌握Docker核心技术(总结分享)

本篇文章给大家带来了关于docker核心技术之容器操作,以及Dockerfile详解等等相关问题,希望对大家有帮助。

最系统的掌握Docker核心技术(总结分享)

一. Docker

1. 简介

  • 基于Linux内核的Cgroup, Namespace, 以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟技术,由于隔离的进程独立于宿主和其它的隔离进程,因此称为容器
  • 最初实现是基于LXC, 从0.7以后开始去除LXC, 转而使用自行开发的Libcontainer, 从1.11开始, 则进一步演进为使用runC和Containerd
  • Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker技术比虚拟机技术更为轻便、快捷

2. Docker优势

  • 更高效地利用系统资源
  • 更快速的启动时间
  • 一致的运行环境
  • 持续交付和部署
  • 更轻松的迁移
  • 更轻松地维护和扩展

3. Docker与虚拟机对比

二. Docker安装

参考文章安装: Install Docker Engine on Ubuntu | Docker Documentation

三. 容器操作

  • 启动:

docker run:

                -it 交互

                -d 后台运行

                -p 端口映射

                -v 磁盘挂载

  • 启动已终止容器

docker start

  • 停止容器

docker stop

  • 查看容器进程

docker ps

  • 查看容器细节

docker inspect 

  •  拷贝文件到容器内

docker cp file1 :/file_to_path

  • docker退出容器,而不关闭容器: ctrl+q+p

  • docker退出容器,而关闭容器: exit

  • 查询docker所有镜像

docker images

  • Docker镜像仓库

Docker hub: https://hub.docker.com

创建私有镜像仓库: docker run -d -p 5000:5000 registry

四. Dockerfile详解

Dockerfile一般分为四个部分:基础镜像信息、维护信息、镜像操作指令和容器启动时操作指令

  • 常用命令

FROM:指定基础镜像, 必须为第一个指令

格式:

        FROM

        FROM :

        FROM @

示例:

        FROM ubuntu

MAINTAINER: 维护信息

格式:

        MAINTAINER

示例

        MAINTAINER ribbon

RUN:构建镜像时执行的命令

格式:

        shell执行:RUN

        exec执行:RUN ["executable", "param1", "param2"]

示例:

        RUN apk update

        RUN ["/etc/execfile", "arg1", "arg2"]

        RUN apt-get update && apt-get install这两条命令永远用&&连接,否则apt-get update构建层被缓存,会导致新package无法安装

ADD: 将本地文件添加到容器中,tar等类型会自动解压,可以访问网络资源,类似于wget

格式:

        ADD ...

示例:

        ADD bin/amd64/httpserver /httpserver

COPY: 功能类似于ADD,但是不会解压缩文件,不能访问网络资源

在Dockerfile中使用multi-stage: Dockerfile 中的 multi-stage(多阶段构建) - sparkdev - 博客园

格式:

        COPY ...

示例:

        COPYbin/amd64/httpserver /httpserver

CMD: 构建容器后调用,也就是在容器启动时才进行调用

格式:

        CMD ["executable","param1","param2"] (执行可执行文件,优先)
        CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
        CMD command param1 param2 (执行shell内部命令)

示例:

        CMD ["ethtool", "--help"]

        CMD echo "1111"

ENTRTPOINT: 配置容器,使其可执行化

格式:

        ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
        ENTRYPOINT command param1 param2 (shell内部命令)

范例:

        ENTRYPOINT /httpserver

        CMD [-c]

LABAL: 用于为镜像添加源数据

格式:

        LABEL = = = ...

范例:

        LABEL multi.label1="value1" multi.label2="value2" other="value3"

ENV: 设置环境变量

格式:

        ENV

范例:

        ENV MY_SERVICE_PORT=80 UDP_PORT=90

EXPOSE: 指定外界交互的端口

格式:

        EXPOSE [...]

示例:

        EXPOSE 80

        EXPOSE 80/tcp

        EXPOSE 80 90

VOLUME: 用于指定持久化目录

格式:

        VOLUME []

范例:

        VOLUME ["/data", "/usr1/jenkins"]

USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。

格式:
  USER user
  USER user:group
  USER uid
  USER uid:gid
  USER user:gid
  USER uid:group

 示例:
  USER www

ARG: 用于指定传递给构建运行时的变量

格式:
    ARG [=]
示例:
    ARG build_user=ribbon

五. Linux NameSpace详解

  •  NamesSpace详解:

Linux NameSpace_Frank_Abagnale的博客-CSDN博客 这篇文章比较详细的介绍,可以参考这篇

  • NameSpace的常用操作

  • 查看当前系统的namespace:

lsns -t

  • 查看某进程的namespace:

ls -la /proc//ns/

  •  查看某namespace运行命令

nsenter -t -n 

六. Linux Cgroups详解

  • Cgroups详解

容器核心:cgroups - 简书 可以参考这篇文章来进行了解

  • 模拟Cgroups控制CPU资源

通过模拟来更好的熟悉Cgroups控制资源的效果, 首先创建cpudemo文件夹

 执行top可以看到busyloop占用两个CPU资源

 将进程添加进cgroup进程配置组

 设置cpuquota

 可以看到成功将占用200%CPU资源的降低成1%

  • 模拟Cgroups超过限定memory资源被OOM kill

/sys/fs/cgroup/memory目录下创建memorydemo文件夹

 运行消耗内存程序, 使用watch查询内存使用情况

 将进程配置进cgroups配置组

 设置最大内存大小

 等待程序被OOM kill, dmesg可以看到杀死信息

备注:删除自主创建的cgroup文件夹, 需要使用cgroup-tools

七. Union FS

Docker前面使用的技术都是源于linux的技术并没有创新,而Docker的创新正是文件系统。 

1.  概念: 

  • 将不同目录挂载在同一个虚拟文件系统下的文件系统
  • 支持为每一个成员目录设定readonly、readwrite和without-able权限
  • 文件系统分层,对readonly权限的目录可以进行逻辑上的修改,这里的修改属于增量的,不影响readonly部分
  • 通常Union FS的用途: 多个disk挂载到同一个目录下, 另一个是将readonly部分和writeable的目录联合在一起

2. 图解Union FS

       Docker镜像的设计中,引入了层(layer)的概念,也就是说,用户制作镜像的每一步操作,都会生成一个层,也就是一个增量rootfs(一个目录),这样应用A和应用B所在的容器共同引用相同的ubuntu操作系统层、Golang环境层(作为只读层),而各自有各自应用程序层,和可写层。启动容器的时候通过UnionFS把相关的层挂载到一个目录,作为容器的根文件系统。

3. 容器存储驱动

4. 模拟Union FS更好理解效果

       由于docker当前版本上使用的是overlayFS的存储驱动,所以我们就以overlay挂载方式来进行实验, overlayfs通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,work目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为为merged目录。

执行如下命令:

mkdir upper lower merged work
echo "lower" > lower/in_lower.txt
echo "from lower" > lower/in_both.txt
echo "from upper" > upper/in_both.txt
echo "upper" > upper/in_upper.txt
path=$(pwd)
mount -t overlay overlay -o lowerdir=${path}/lower,upperdir=${path}/upper,workdir=${path}/work ${path}/merged

       可以看到使用overlay存储驱动文件挂载实现的效果。实验完成后恢复环境需要先umount merged目录后, 再将四个目录进行删除操作,先删除其他的可能会出现rm: cannot remove 'merged/': Device or resource busy,导致merged目录删除不掉。

八. Docker网络

1. 安装工具

Centos系统:

        $ yum install bridge-utils

Ubuntu系统:

        $ apt-get  install bridge-utils

2. Docker网络模式

  •  查询docker内置的网络模式

  • docker run选择运行的网络模式 

        1)host模式:使用 --net=host 指定。 跟host公用一套net

        2)none模式:使用 --net=none 指定。网络配置需要由自己来进行配置

        3)bridge模式:使用 --net=bridge 指定,默认设置。

docker网络逻辑图 网桥和NAT

        4)container模式:使用 --net=container:NAME_or_ID 指定。使用其他容器的网络配置

 网络模式图大概如下图所示

3. 模拟Docker起网桥的操作

  • 创建--net=none nginx 

  •  创建network namespace

  •  建立网络namespace链接

  •  检查当前已经创建的网桥设备

  •  创建veth对

  •  进行A网络配置

  • 进行B网络配置 

生成eth0网络设备在nginx docker中

给eth0配置ip 网关 

  •  nginx可以访问

  • 配置nat, 让windows通过ip也可以访问

  • 使用完删除指定nat规则

推荐学习:《docker视频教程

以上是最系统的掌握Docker核心技术(总结分享)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
Linux容器:Docker的基础Linux容器:Docker的基础Apr 14, 2025 am 12:14 AM

LXC是Docker的基础,通过Linux内核的cgroups和namespaces实现资源和环境隔离。1)资源隔离:cgroups限制CPU、内存等资源。2)环境隔离:namespaces提供独立的进程、网络、文件系统视图。

Linux上的Docker:最佳实践和技巧Linux上的Docker:最佳实践和技巧Apr 13, 2025 am 12:15 AM

在Linux上使用Docker的最佳实践包括:1.使用dockerrun命令创建和运行容器,2.利用DockerCompose管理多容器应用,3.定期清理未使用的镜像和容器,4.采用多阶段构建优化镜像大小,5.限制容器资源使用提升安全性,6.遵循Dockerfile最佳实践提高可读性和维护性。这些实践能帮助用户高效使用Docker,避免常见问题并优化容器化应用。

将Docker与Linux一起使用:综合指南将Docker与Linux一起使用:综合指南Apr 12, 2025 am 12:07 AM

在Linux上使用Docker可以提高开发和部署效率。1.安装Docker:使用脚本在Ubuntu上安装Docker。2.验证安装:运行sudodockerrunhello-world。3.基本用法:创建Nginx容器dockerrun--namemy-nginx-p8080:80-dnginx。4.高级用法:创建自定义镜像,使用Dockerfile构建并运行。5.优化与最佳实践:使用多阶段构建和DockerCompose,遵循编写Dockerfile的最佳实践。

Docker监视:收集指标和跟踪集装箱健康Docker监视:收集指标和跟踪集装箱健康Apr 10, 2025 am 09:39 AM

Docker监控的核心在于收集和分析容器的运行数据,主要包括CPU使用率、内存使用、网络流量和磁盘I/O等指标。通过使用Prometheus、Grafana和cAdvisor等工具,可以实现对容器的全面监控和性能优化。

Docker群:建筑物可扩展和弹性的容器簇Docker群:建筑物可扩展和弹性的容器簇Apr 09, 2025 am 12:11 AM

DockerSwarm可用于构建可扩展和高可用性的容器集群。1)初始化Swarm集群使用dockerswarminit。2)加入Swarm集群使用dockerswarmjoin--token:。3)创建服务使用dockerservicecreate--namemy-nginx--replicas3nginx。4)部署复杂服务使用dockerstackdeploy-cdocker-compose.ymlmyapp。

Kubernetes的Docker:用于企业应用程序的集装箱编排Kubernetes的Docker:用于企业应用程序的集装箱编排Apr 08, 2025 am 12:07 AM

如何利用Docker和Kubernetes进行企业应用的容器编排?通过以下步骤实现:创建Docker镜像并推送到DockerHub。在Kubernetes中创建Deployment和Service以部署应用。使用Ingress管理外部访问。应用性能优化和最佳实践,如多阶段构建和资源限制。

Docker故障排除:诊断和解决常见问题Docker故障排除:诊断和解决常见问题Apr 07, 2025 am 12:15 AM

Docker常见问题可以通过以下步骤诊断和解决:1.查看容器状态和日志,2.检查网络配置,3.确保卷挂载正确。通过这些方法,可以快速定位并修复Docker中的问题,提升系统稳定性和性能。

Docker面试问题:Ace您的DevOps工程采访Docker面试问题:Ace您的DevOps工程采访Apr 06, 2025 am 12:01 AM

Docker是DevOps工程师必备的技能。1.Docker是开源的容器化平台,通过将应用程序及其依赖打包到容器中,实现隔离和可移植性。2.Docker的工作原理包括命名空间、控制组和联合文件系统。3.基本用法包括创建、运行和管理容器。4.高级用法包括使用DockerCompose管理多容器应用。5.常见错误有容器无法启动、端口映射问题和数据持久化问题,调试技巧包括查看日志、进入容器和查看详细信息。6.性能优化和最佳实践包括镜像优化、资源限制、网络优化和使用Dockerfile的最佳实践。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境