返回列表 发帖

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的容器内自动启动服务

返回列表