文章目录
- 一、资源限制
-
- 1.1CPU资源控制
-
- [1.1.1 设置CPU使用率上限](#1.1.1 设置CPU使用率上限)
- [1.1.2 绑定指定CPU](#1.1.2 绑定指定CPU)
- [1.2 内存使用限制](#1.2 内存使用限制)
- [1.3 磁盘IO控制](#1.3 磁盘IO控制)
- 二、数据卷容器
-
- [2.1 数据卷](#2.1 数据卷)
- [2.2 数据卷容器](#2.2 数据卷容器)
- 三、端口映射
-
- [3.1 随机端口映射](#3.1 随机端口映射)
- [3.2 指定端口映射](#3.2 指定端口映射)
- 四、容器互联(使用CentOs镜像)
一、资源限制
1.1CPU资源控制
概述(cgroups)
- cgroups (Control Groups)是 Linux 内核提供的资源控制机制。对容器非常重要,可控制:资
源限制、优先级分配、资源统计、任务控制(挂起/恢复/终止)。 - Docker 通过 cgroups 来实现 CPU、内存、IO 等限制与度量。
cgroups 的 4 大功能(简要)
资源限制:限制任务使用的总资源量。
优先级分配:如通过 cpu 时间片和 IO 带宽分配优先级。
资源统计:统计 cpu 时长、内存用量等。
任务控制:对 cgroup 中的进程执行挂起/恢复等操作。
1.1.1 设置CPU使用率上限
1、实例: 限制容器为50%的一个CPU
bash
docker run -itd --name cputest --cpus="0.5" centos:7 /bin/bash
2、在名称为cputest里面下载yum,如果有就不用下,下载empl-release,和stress。
3、运行压力程序(stress -c N),然后用docker stats观察CPU倾向于50% 。

1.1.2 绑定指定CPU
用途:把容器进程绑定到宿主机的指定CPU核上(硬亲核性)
实例:将容器绑定到第1和第3个核:
bash
docker run -itd --name test7 --cpuset-cpus "1,3" centos:7 /bin/bash
验证:进入容器运行taskset -pc

1.2 内存使用限制
-m ,-memory:限制容器可用的物理内存(例如:-m 512m)
-memory-swap:限制容器可用的物理内存+swap总量量(必须与 -m 一起使用以明确 swap 上限)。
示例: -m 300m --memory-swap=1g
含义:容器可用物理内存 = 300 MB;物理 + swap 总共 = 1 GB → swap 可用 = 700 MB(1G- 300M)。
1、实例命令:
bash
docker run -itd --name test8 -m 512m centos:7 /bin/bash
用docker stats 查看centos:7的内存限额为512mb

1.3 磁盘IO控制
二、数据卷容器
2.1 数据卷
数据卷是Docker中专门为容器提供持久化存储的机制,它是容器内的特殊目录。可以和宿主机或其他容器共享数据。通过使用数据卷,容器可以在其生命周期内访问和修改数据,而不会影响镜像本身。数据卷能够保持数据持久性,即使容器被删除或重建,数据依然能保留。
1、创建与挂载数据卷
使用docker run 命令启动一个容器,可以通过-v或-mount选项将宿主机的目录挂载到容器中的数据卷。
bash
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
- -v /var/www:/data1:将宿主机的目录挂载到容器中的/data1目录,这样容器/data1的修改会同步到宿主机上的/var/www
在容器里写文件内容,宿主机目录下也同步

修改容器数据退出容器,宿主机目录下文件内容相应做出改变。

2.2 数据卷容器
数据卷容器是一种专门用于共享数据的容器,避免每个容器都需要挂载宿主机目录,使用--volumes-from可以让多个容器共享同一数据卷。
1、创建一个数据卷容器web2,挂载多个数据卷。
bash
docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
-v /data1 -v /data2:在容器内挂载两个数据卷/data1,/data2,这些数据卷不依赖于宿主机,而是仅仅存在于容器内。
2、在数据卷中写入数据,进入web2容器,在/data1和/data2下写入数据
web2 容器内的 /data1/abc.txt 和 /data2/ABC.txt 文件已经被创建。

3、使用--volumes-from共享数据卷
bash
docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
--volumes-from web2 : 这表示将容器 web2 中的所有数据卷挂载到新容器 web3 中。

三、端口映射
在Docker中,容器内部运行的服务是不能被外部网络访问的。如果需要让外部网络能够访问容器中的服务,就需要用到端口映射机制,端口映射将宿主机的端口映射到容器内的端口,使得外部网络能够通过访问宿主机的端口,进而访问容器内的服务。
3.1 随机端口映射
如果不指定一个端口,Docker会自动为容器分配一个随机端口(通常从32768开始)。这种方式适用于无需指定端口好的场景。
bash
docker run -d --name test1 -P nginx
-P : 自动将容器内部暴露的端口映射到宿主机上的随机端口。
nginx : 使用 nginx 镜像启动容器。


test1 容器内部的端口 80 被映射到宿主机的端口 49170 。可以通过浏览器访问192.168.10.2:32770。

3.2 指定端口映射
如果是容器内的服务映射到宿主机上的指定端口,可以使用-p选项手动指定端口映射。
bash
docker run -d --name test2 -p 43000:80 nginx
-p 43000:80 : 将宿主机的端口 43000 映射到容器内的端口 80 。这意味着你可以通过访问宿主机
的 43000 端口来访问容器中的 Nginx 服务

浏览器访问192.168.10.2:12345访问。

四、容器互联(使用CentOs镜像)
容器互联是一种让容器之间能够通过网络相互通信的机制。通过在容器间建立网络通信隧道,源容器和接收容器可以相互看到对方的指定信息。Docker提供了--link选项来实现容器互联,在一个容器中可以通过另一个容器的名称来访问。
1、创建并运行源容器web1,作为通信的源容器。(web1已经创建)
bash
docker run -itd -P --name web1 centos:7 /bin/bash
2、创建并运行接收容器web01,使用--link选项连接容器web1,实现容器间的通信。
bash
docker run -itd -P --name web01 --link web1:web1 centos:7 /bin/bash
#--link web1:web1 : 通过 --link 选项连接 web1 容器,将 web1 容器暴露给 web2 容器,并在
--link 目标容器名:当前容器内的别名;web01 中将 web1 显示为别名 web1 。这样 web01 容器就可以通过 web1 访问源容器的信息。
web01访问web1如下:

3、在接收容器 web01 中测试连接
进入容器 web2 ,然后尝试 ping web1 容器,验证是否可以与 web1 容器通信:
进入web2容器的bash环境,测试web2能否与web1通信。
bash
1、docker exec -it web01 bash
2、ping web1
