Board logo

标题: 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 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a [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 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a [root@centos8 containers]# [root@centos8 containers]# cd 684a4e0497a78099364cb626550414653cb71ddefe828905ff115fdcab0ef00a/ [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 dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704 [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 dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704 [root@centos8 containers]# [root@centos8 containers]# cd dd2536d8ec294a8fde0c8e38a9c5f8d4332c98c51888e2c7558c9e650184d704/ [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 e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34 [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 e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34 [root@centos8 containers]# [root@centos8 containers]# cd e36c2c54cc72a50724c13318ee72f4552618e7e9ca49064b297dfa59e3e05c34/ [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