Docker知识基础

本文详细介绍了Docker容器技术的应用背景、与虚拟机的区别,以及核心概念如镜像、网络模式和资源限制(包括CPU、内存和磁盘I/O)。涵盖了dockerrun命令及其参数的详解,帮助读者掌握Docker在IT技术中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

为什么要用到容器?

docker是什么?

容器与虚拟机的区别?

docker的三个核心概念:

docker容器操作

docker网络模式

bridge

host

container

none

自定义网络

CPU限制

内存限制

磁盘IO限制                                


为什么要用到容器?

1)容器可以屏蔽底层操作系统的差异性,让业务应用不管在哪里都是使用容器的环境运行,从而保证开发测试环境与生产环境的一致性
2)容器部署起来非常便捷和迅速,缩短开发测试部署的周期时间


容器引擎:docker   containered   podman   rocket

虚拟化软件:Windows   VMware Workstation   个人工作站版        VMware Sphere + ESXI  企业版    XEN
            Linux     KVM (基于linux内核的虚拟机)  ->  Openstack


docker是什么?

docker是用go语言开发并开源的容器引擎,用来运行容器里的应用。docker也是可用来管理容器和镜像的一种工具。


容器与虚拟机的区别?

容器                                                                    虚拟机
所有容器共享宿主机的内核                                                每个虚拟机都有独立的操作系统和内核
通过namespace实现资源隔离,通过cgroup实现限制资源的最大使用量            完全隔离。每个虚拟机都有独立的硬件资源
秒级启动速度                                                            分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗                                需要通过hypervisor虚拟机管理程序对宿主机资源虚拟访问,有一定的性能损耗
单机容量能支持成百上千个容器                                            单机只能支持最多几十个虚拟机


docker的三个核心概念:

镜像:是创建容器的基础,是一个只读的模板文件,里面包含运行容器中的应用程序所需要的所有内容(应用程序文件、配置文件、运行库文件、依赖包等)
容器:是用镜像运行的实例,容器可以被创建、启动、停止、删除,每个容器之间默认是相互隔离的
仓库:是用来集中保存镜像的地方,有公有仓库和私有仓库之分


docker version
docker info

docker镜像操作
docker search 仓库|镜像的关键词
       pull 仓库名/镜像名:标签               #如果不指定标签默认使用 :latest 标签
       images [-q]
       inspect 镜像名|镜像ID
       tag 旧镜像名:旧标签  新镜像名:新标签
       rmi 镜像名|镜像ID [-f]
       save -o 镜像文件  镜像名|镜像ID
       load -i|< 镜像文件
       login                                #默认登录官方公有仓库
       push 仓库名/镜像名:标签


docker容器操作

docker create [-i -t] [--name 容器名]  镜像名:标签  [容器启动命令]
       start 容器名|容器ID
       ps [-a -q]
       inspect 容器名|容器ID
       stop 容器名|容器ID        #发送 SIGTERM 信号,默认等待10s
       kill 容器名|容器ID        #发送 SIGKILL 信号,强制停止容器
       rm 容器名|容器ID [-f]
       exec -it 容器名|容器ID  bash|sh
       logs 容器名|容器ID                            #查看容器中PID=1的主进程的日志
       cp 宿主机文件路径  容器名|容器ID:绝对路径
       cp 容器名|容器ID:绝对路径  宿主机文件路径
docker export -o 容器模板文件 容器名|容器ID            docker export 容器名|容器ID > 容器模板文件
docker import 容器模板文件 -- 镜像名:标签              cat 容器模板文件 | docker import - 镜像名:标签
       
docker run -d [-i -t --name --rm]  镜像名:标签  [容器启动命令]
              -P                                                #使用从32768开始的随机端口映射容器
              -p 宿主机端口:容器端口                            #使用指定的宿主机端口映射容器
              -v 宿主机绝对路径:容器绝对路径[:ro]               #将宿主机目标|文件挂载到容器的数据卷
              --volumes-from 数据卷容器名                       #共享数据卷容器的数据卷
              --link 目标容器名:连接别名                        #可实现在容器内通过目标容器名或连接别名与目标容器通信
              --network bridge|host|none|container:容器名或ID   #设置容器的网络模式

docker run 的启动过程:1)检查本地是否有镜像,如果有则直接使用本地镜像创建容器,如果没有则从仓库拉取镜像再创建容器
                       2)在只读的镜像层上挂载一层可读可写的容器层
                       3)从docker网桥给容器分配一个虚拟接口和IP
                       4)使用镜像的默认启动命令或者指定的启动命令启动容器,直到容器中PID=1的主进程退出为止


docker网络模式

bridge

docker的默认网络模式。使用此模式的每个容器都有独立的网络命名空间namespace,即每个容器都有独立的IP、端口范围(每个容器可以用同一个端口)、路由、iptables规则等网络资源。
docker run [--network=bridge] ....

host

容器与宿主机共享网络namespace,即容器和宿主机使用同一个IP、端口范围(容器与宿主机或其它使用host模式的容器不能用同一个端口)、路由、iptables规则等网络资源。
docker run --network=host ....

container

和指定已存在的容器共享网络namespace,即这两个容器使用同一个IP、端口范围(容器与指定的容器不能用同一个端口)、路由、iptables规则等网络资源。
docker run --network=container:容器名|容器ID ....

none

每个容器都有独立的网络namespace,但是容器没有自己的eth0网卡、IP、端口等,只有lo网卡。
docker run --network=none ....

自定义网络

可以用来自定义创建一个网段、网桥、网络模式,从而可以创建容器时自定义容器IP
docker network create --subnet 自定义网段 --opt "com.docker.network.bridge.name"="自定义网桥名"  自定义网络模式名
docker run --network 自定义网络模式名  --ip 自定义容器IP ....


cgroup资源限制(限制容器进程对CPU 内存 磁盘IO 等资源的最大使用量)

CPU限制

设置单个容器进程能够使用的CPU使用率上限
针对新建的容器:
docker run --cpu-period 单个CPU调度周期时间(1000~1000000)  --cpu-quota 容器进程能够使用的最大CPU时间(>=1000)

针对已存在的容器:
修改 /sys/fs/cgroup/cpu/docker/容器ID/ 目录下的 cpu.cfs_period_us(单个CPU调度周期时间)  cpu.cfs_quota_us(容器进程能够使用的最大CPU时间)  文件的值


设置多个容器的CPU占用份额(只能在多个容器同时运行且CPU资源紧张时生效)
docker run --cpu-shares 容器进程最大占用CPU的份额(值为1024的倍数)

设置容器绑定指定的CPU
docker run --cpuset-cpus CPUID1[,CPUID2,....]


内存限制

设置容器能够使用的内存和swap的值
docker run -m 内存值  --memory-swap 内存和swap的总值
                                    设置 0 或 不设置,表示swap为内存的2倍
                                    设置 -1,表示不限制swap的值,宿主机有多少容器即可使用多少
                                    设置 与 -m 一样的值,表示不使用swap
                                    
                                    

磁盘IO限制                                

docker run --device-read-bps    磁盘设备文件路径:速率                  #限制容器在某个磁盘上读的速度
           --device-write-bps   磁盘设备文件路径:速率                  #限制容器在某个磁盘上写的速度
           --device-read-iops   磁盘设备文件路径:次数                  #限制容器在某个磁盘上读的次数
           --device-write-iops  磁盘设备文件路径:次数                  #限制容器在某个磁盘上写的速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值