标题:
CentOS8_在Docker中限制容器可用的CPU个数和内存量
[打印本页]
作者:
admin
时间:
2023-1-20 00:15
标题:
CentOS8_在Docker中限制容器可用的CPU个数和内存量
笺注:Docker的安装可参考
CentOS8_使用Docker安装Python3
查看Docker的版本信息: [root@centos8 ~]# docker -v Docker version
20.10.21
, build baeda1f [root@centos8 ~]# 从公网下载镜像:( 以下是下载MariaDB10.1的镜像 ) [root@centos8 ~]# docker pull
mariadb:10.1
查看宿主机的所有镜像: [root@centos8 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 10.1 895244a22f37 21 months ago 352MB
[root@centos8 ~]# 使用镜像“mariadb:10.1”创建并启动容器“MariaDB_1”: [root@centos8 ~]# docker run -itd --name
MariaDB_1
-p 3306:3306 -e MYSQL_ROOT_PASSWORD=888 -v /opt/database_1:/home/database_1
mariadb:10.1
684a4e0497a7
8099364cb626550414653cb71ddefe828905ff115fdcab0ef00a [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 第一个3306是宿主机的端口,暴露给外部直接访问;第二个3306是容器的端口。 -e 环境配置 : 指定数据库管理员root@localhost的密码为888 -v 挂载目录 : 这里是把宿主机的目录/opt/database_1挂载到容器的目录/home/database_1;假如目录不存在,就会自动创建。
mariadb:10.1
: 镜像名称:版本号 在宿主机查看所有的容器:(无论是否正在运行) [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
684a4e0497a7
mariadb:10.1 "docker-entrypoint.s…" About a minute ago Up About a minute
0.0.0.0:3306->3306/tcp, :::3306->3306/tcp
MariaDB_1
[root@centos8 ~]# 注释:宿主机的TCP 3306端口,映射到容器“MariaDB_1”的TCP 3306端口。 ### 容器“MariaDB_1”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls
684a4e0497a7
8099364cb626550414653cb71ddefe828905ff115fdcab0ef00a [root@centos8 containers]# [root@centos8 containers]# cd
684a4e0497a7
8099364cb626550414653cb71ddefe828905ff115fdcab0ef00a/ [root@centos8 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a]# ls 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a-json.log
hostconfig.json
mounts checkpoints hostname resolv.conf config.v2.json hosts resolv.conf.hash [root@centos8 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a]# 容器“MariaDB_1”的文件hostconfig.json中的一些信息: 容器“MariaDB_1”不随宿主机的启动而启动: "RestartPolicy":{"Name":"
no
","MaximumRetryCount":0}, 端口映射 : "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3306"}]}, 不限制容器“MariaDB_1”可用的CPU个数 : "NanoCpus":
0
, 不限制容器“MariaDB_1”可用的内存量 : "Memory":
0
, 不限制容器“MariaDB_1”可用的交换分区量 : "MemorySwap":
0
, ##### 使用镜像“mariadb:10.1”创建并启动容器“MariaDB_2”: [root@centos8 ~]# docker run -itd --name
MariaDB_2
-p 3307:3306 -e MYSQL_ROOT_PASSWORD=P@ssw0rd -v /opt/database_2:/home/database_2 --cpus=2 -m 200m
mariadb:10.1
dd2536d8ec29
4a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 3307是宿主机的端口,暴露给外部直接访问;3306是容器的端口。 -e 环境配置 : 指定数据库管理员root@localhost的密码为P@ssw0rd -v 挂载目录 : 这里是把宿主机的目录/opt/database_2挂载到容器的目录/home/database_2;假如目录不存在,就会自动创建。 --cpus=
2
: 限制容器可用的CPU个数为2个 -m
200m
: 限制容器可用的内存量为200M
mariadb:10.1
: 镜像名称:版本号 在宿主机查看所有的容器: [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd2536d8ec29
mariadb:10.1 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes
0.0.0.0:3307->3306/tcp, :::3307->3306/tcp
MariaDB_2
684a4e0497a7 mariadb:10.1 "docker-entrypoint.s…" 2 hours ago Up 8 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp MariaDB_1 [root@centos8 ~]# 注释:宿主机的TCP 3307端口,映射到容器“MariaDB_2”的TCP 3306端口。 ### 容器“MariaDB_2”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a
dd2536d8ec29
4a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704 [root@centos8 containers]# [root@centos8 containers]# cd
dd2536d8ec29
4a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704/ [root@centos8 dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704]# ls checkpoints
hostconfig.json
mounts config.v2.json hostname resolv.conf dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704-json.log hosts resolv.conf.hash [root@centos8 dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704]# 容器“MariaDB_2”的文件hostconfig.json中的一些信息: 容器“MariaDB_2”不随宿主机的启动而启动: "RestartPolicy":{"Name":"
no
","MaximumRetryCount":0}, 端口映射 : "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3307"}]}, 限制容器“MariaDB_2”可用的CPU个数为2个 : "NanoCpus":
2000000000
, 限制容器“MariaDB_2”可用的内存量为200M : "Memory":
209715200
, 限制容器“MariaDB_2”可用的交换分区量为400M : (默认为可用内存量的两倍) "MemorySwap":
419430400
, ##### 使用镜像“mariadb:10.1”创建并启动容器“MariaDB_3”: [root@centos8 ~]# docker run -itd --name
MariaDB_3
-p 3308:3306 -e MYSQL_ROOT_PASSWORD=P@ssw12 --cpus=3 -m 500m
mariadb:10.1
e36c2c54cc72
a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34 [root@centos8 ~]# 注释: -itd : 以交互模式情况下后台运行。 --name : 指定容器名称。 -p 端口映射 : 3308是宿主机的端口,暴露给外部直接访问;3306是容器的端口。 -e 环境配置 : 指定数据库管理员root@localhost的密码为P@ssw12 --cpus=
3
: 限制容器可用的CPU个数为3个 -m
500m
: 限制容器可用的内存量为500M
mariadb:10.1
: 镜像名称:版本号 在宿主机查看所有的容器: [root@centos8 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e36c2c54cc72
mariadb:10.1 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes
0.0.0.0:3308->3306/tcp, :::3308->3306/tcp
MariaDB_3
dd2536d8ec29 mariadb:10.1 "docker-entrypoint.s…" 20 minutes ago Up 20 minutes 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp MariaDB_2 684a4e0497a7 mariadb:10.1 "docker-entrypoint.s…" 2 hours ago Up 25 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp MariaDB_1 [root@centos8 ~]# 注释:宿主机的TCP 3308端口,映射到容器“MariaDB_3”的TCP 3306端口。 ### 容器“MariaDB_3”在宿主机的存放目录: [root@centos8 ~]# cd /var/lib/docker/containers/ [root@centos8 containers]# ls 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704
e36c2c54cc72
a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34 [root@centos8 containers]# [root@centos8 containers]# cd
e36c2c54cc72
a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34/ [root@centos8 e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34]# ls checkpoints
hostconfig.json
mounts config.v2.json hostname resolv.conf e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34-json.log hosts resolv.conf.hash [root@centos8 e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34]# 容器“MariaDB_3”的文件hostconfig.json中的一些信息: 容器“MariaDB_3”不随宿主机的启动而启动: "RestartPolicy":{"Name":"
no
","MaximumRetryCount":0}, 端口映射 : "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"3308"}]}, 限制容器“MariaDB_3”可用的CPU个数为3个 : "NanoCpus":
3000000000
, 限制容器“MariaDB_3”可用的内存量为500M : "Memory":
524288000
, 限制容器“MariaDB_3”可用的交换分区量为1000M : (默认为可用内存量的两倍) "MemorySwap":
1048576000
, ### 进入容器“MariaDB_3”: [root@centos8 ~]# docker exec -it
MariaDB_3
/bin/bash root@e36c2c54cc72:/# 在容器里看到的是宿主机的内存总量、交换分区总量: root@e36c2c54cc72:/#
free -m
total used free shared buff/cache available Mem:
1800
854 267 8 679 779 Swap:
4095
0 4095 root@e36c2c54cc72:/# ###### 在宿主机查看各个容器的CPU使用率、内存使用率情况等: [root@centos8 ~]# docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS e36c2c54cc72
MariaDB_3
0.03% 140.9MiB / 500MiB 28.18% 1.01kB / 0B 45.8MB / 250MB 26 dd2536d8ec29
MariaDB_2
0.04% 133.4MiB / 200MiB 66.70% 1.08kB / 0B 52.5MB / 250MB 26 684a4e0497a7
MariaDB_1
0.03% 140.5MiB / 1.758GiB 7.80% 1.08kB / 0B 17.5MB / 176kB 26 ### 在宿主机查看各个容器的可用CPU个数: [root@centos8 ~]# docker inspect
MariaDB_1
| grep -i
NanoCpus
"NanoCpus": 0, [root@centos8 ~]# [root@centos8 ~]# docker inspect
MariaDB_2
| grep -i
NanoCpus
"NanoCpus": 2000000000, [root@centos8 ~]# [root@centos8 ~]# docker inspect
MariaDB_3
| grep -i
NanoCpus
"NanoCpus": 3000000000, [root@centos8 ~]# ### 在宿主机查看各个容器的可用内存量、可用交换分区量: [root@centos8 ~]# docker inspect
MariaDB_1
| grep -i
Memory
"Memory":
0
, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap":
0
, "MemorySwappiness": null, [root@centos8 ~]# [root@centos8 ~]# docker inspect
MariaDB_2
| grep -i
Memory
"Memory":
209715200
, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap":
419430400
, "MemorySwappiness": null, [root@centos8 ~]# [root@centos8 ~]# docker inspect
MariaDB_3
| grep -i
Memory
"Memory":
524288000
, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap":
1048576000
, "MemorySwappiness": null, [root@centos8 ~]# ###### 让容器“MariaDB_3”随宿主机的启动而启动:(会自动启动MariaDB数据库) [root@centos8 ~]# docker update
--restart=always
MariaDB_3
MariaDB_3
[root@centos8 ~]# 容器“MariaDB_3”的文件hostconfig.json会自动发生变化: "RestartPolicy":{"Name":"
always
","MaximumRetryCount":0}, 在宿主机查看容器“MariaDB_3”是否会随宿主机的启动而启动: [root@centos8 ~]# docker inspect
MariaDB_3
| grep -i -A2
RestartPolicy
"RestartPolicy": { "Name": "
always
", "MaximumRetryCount": 0 [root@centos8 ~]# 笺注,要设置开机自动启动docker服务: [root@centos8 ~]# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@centos8 ~]# [root@centos8 ~]# systemctl is-enabled docker
enabled
[root@centos8 ~]# ### 不让容器“MariaDB_3”随宿主机的启动而启动: [root@centos8 ~]# docker update
--restart=no
MariaDB_3
MariaDB_3
[root@centos8 ~]# 容器“MariaDB_3”的文件hostconfig.json会自动发生变化: "RestartPolicy":{"Name":"
no
","MaximumRetryCount":0}, 在宿主机查看容器“MariaDB_3”是否会随宿主机的启动而启动: [root@centos8 ~]# docker inspect
MariaDB_3
| grep -i -A3
RestartPolicy
"RestartPolicy": { "Name": "
no
", "MaximumRetryCount": 0 }, [root@centos8 ~]# ###### 修改限制容器“MariaDB_3”可用的CPU个数为4个: [root@centos8 ~]# docker update
--cpus=4
MariaDB_3
MariaDB_3
[root@centos8 ~]# 容器“MariaDB_3”的文件hostconfig.json会自动发生变化: "NanoCpus":
4000000000
, ### 修改限制容器“MariaDB_3”可用的内存量为600M: [root@centos8 ~]# docker update
-m 600m
MariaDB_3
MariaDB_3
[root@centos8 ~]# 容器“MariaDB_3”的文件hostconfig.json会自动发生变化: "Memory":
629145600
, 此时,容器“MariaDB_3”可用的交换分区量没有发生变化 : "MemorySwap":
1048576000
, ### 修改限制容器“MariaDB_3”可用的交换分区量为800M: [root@centos8 ~]# docker update
--memory-swap 800m
MariaDB_3
MariaDB_3
[root@centos8 ~]# 容器“MariaDB_3”的文件hostconfig.json会自动发生变化: "MemorySwap":
838860800
, ### 查看容器“MariaDB_3”的全部配置信息:(显示有省略) [root@centos8 ~]# docker inspect
MariaDB_3
"Memory":
629145600
, "NanoCpus":
4000000000
, "MemorySwap":
838860800
, ###### 以下是重新把宿主机的TCP 3309端口,映射到容器“MariaDB_3”的TCP 3306端口: 先停止docker服务: [root@centos8 ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by: docker.socket
[root@centos8 ~]# [root@centos8 ~]# systemctl stop docker.socket [root@centos8 ~]# 修改容器“MariaDB_3”的文件hostconfig.json : "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"
3308
"}]}, 更改为: "PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"
3309
"}]}, 启动docker服务: [root@centos8 ~]# systemctl start docker [root@centos8 ~]# 启动容器“MariaDB_3”: [root@centos8 ~]# docker start
MariaDB_3
MariaDB_3
[root@centos8 ~]# 在宿主机查看正在运行的容器: [root@centos8 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e36c2c54cc72
mariadb:10.1 "docker-entrypoint.s…" 21 minutes ago Up 2 minutes
0.0.0.0:3309->3306/tcp, :::3309->3306/tcp
MariaDB_3
[root@centos8 ~]# 注释:宿主机的TCP 3309端口,映射到容器“MariaDB_3”的TCP 3306端口。 相关文章:
CentOS8_在Docker中安装MariaDB
CentOS8_在Docker中安装MySQL
CentOS8_在Docker中安装Oracle11gR2
CentOS8_在Docker中安装LNMP(使用参数--link)
CentOS8_在Docker的容器内自动启动服务
欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/)
Powered by Discuz! 7.2