dockerstats详解(docker stdin)

本篇文章给大家谈谈dockerstats详解,以及docker stdin对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Docker iptables 详解

该环境安装了docker ,并启动了一个容器做了端口映射

iptables 里raw、mangle 表都是空的

接着来梳理,数据经过iptables 是如何处理的。首先需要了解iptables 的组成:

iptables 有4表(raw、mangle、nat、filter)5链(prerouting、input、forward、output、postrouting),数据经过iptables 需要按顺序经过5链进行处理。看下图:

1、首先数据经过prerouting表,由于 raw、mangle表都为空,所以可以直接看nat表的prerouting 链:

从这里可以看到通过nat表中的prerouting链,将所有访问本地地址的数据都匹配到Docker 链;

而Docker 这里有DNAT 规则,将访问宿主机 9525端口枝念的数据转发到 172.17.0.6:9525

2、再到input链,其中mangle表为空,直接看nat、filter表中的input链:

从【1】可以看到nat 中input链以及filter表的input链都没做任何规则芦族

3、再接着到output链,raw、mangle为空,直接查看nat、filter表中的output 链

从上可以看到 nat 表中的output链将所有目的地址为非环回地址的本地地址数据匹配到Docker链,然后重复DNAT;

再到filter表中的output链没有做任何规则

4、 最后到postrouting 链,mangle 为空,nat 表将目标地址为0.0.0.0 数据通过SNAT做动态转发出去,而目标地址为172.17.0.6 的则转发到9525 端口

PS:

这是经过朋友的讲解和自己一些理解,猛哗困如有错误请指正。

[img]

06-Docker资源限制

默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源,Docker 提供了控制容器可以限制容器使用多少内存或CPU 的方法,设置 docker run 命令的运行时配置标志。

其中许多功能都要求宿主机的内核支持Linux 功能,要检查支持,可以使用 docker info 命令,如果内核中禁用了某项功能,可能会在输出结尾处看到警告,如下所示:

对于Linux 主机,如果没有足够的内存来执行其他重要的系统任务,将会抛出OOM (Out of Memory Exception,内存溢出、内存泄漏、内存异常), 随后系统会开始杀死进程以释放内存,凡是运行在宿主机的进程都有可能被kill,包括Dockerd和其它的应用程序,如果重要的系统进程被Kill,会导致和该进程相关的服务全部宕机。

linux 会为每个进程算一个分数,最终它会将分数最高的进程kill。

Docker 可以强制执行硬性内存限制,即只允许容器使用给定的内存大小。

Docker 也可以执行非硬性内存限制,即容器可以使用尽可能多的内存,除非内核检测到主机上的内存不够用了。

这些选项中的大多数采用正整数,后跟 b、k、m、g 后缀,蚂姿棚以表示字节、千字节、兆字节或千兆字节。

--memory-swap , 只有在设置了 --memory 后才会有意义。使用Swap,可以让容器将超出限制部分的内存置换到磁盘上,

不同闷则的 --memory-swap 设置会产生不同的效果:

假如一个容器未做内存使用限制,则该容器可以利用到系统内存最大空间,默认创建的容器没有做内存资源册散限制。

启动两个工作进程,每个工作进程最大允许使用内存256M,且宿主机不限制当前容器最大内存:

接着宿主机限制容器最大内存使用:

宿主机cgroup 验证:

--memory-reservation

宿主机cgroup 验证:

一个宿主机,有几十个核的CPU,但是宿主机上可以同时运行成百上千个不同的进程用以处理不同的任务,多进程共用一个CPU 的核心依赖计数就是为可压缩资源,即一个核心的CPU 可以通过调度而运行多个进程,但是同一个单位时间内只能有一个进程在CPU 上运行,那么这么多的进程怎么在CPU 上执行和调度的呢?

Linux kernel 进程的调度基于CFS(Completely Fair Scheduler),完全公平调度

默认情况下,每个容器对主机CPU 周期的访问权限是不受限制的,但是我们可以设置各种约束来限制给定容器访问主机的CPU周期,大多数用户使用的是默认的CFS 调度方式,在Docker 1.13 及更高版本中,还可以配置实时优先级。

参数 :

对于一台2核的服务器,如果不做限制,容器会把宿主机的CPU 全部占完:

在宿主机使用 dokcer stats 命令查看容器运行状态:

在宿主机查看CPU 限制参数:

宿主机CPU 利用率:

只给容器分配最多1核宿主机CPU 利用率

宿主机cgroup 验证:

当前容器状态:

宿主机CPU利用率:

容器运行状态:

宿主机CPU利用率:

启动两个容器,stress1 的 --cpu-shares 值为1000 , stress2 的 --cpu-shares 为500,观察最终效果, --cpu-shares 值为1000 的 stress1的CPU 利用率基本是 --cpu-shares 为500 的 stress1的 2 倍:

验证容器运行状态:

宿主机cgroups验证:

动态修改CPU shares的值

--cpu-shares 的值可以在宿主机cgroup 动态修改,修改完成后立即生效,其值可以调大也可以减小。

验证修改后的容器运行状态:

怎样使用Docker帮助

一 直接输入docker命令来查看Docker客户端的所有命令选项。

[root@localhost ~]# docker

Usage: docker [OPTIONS] COMMAND [arg...]

docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

--config=~/.docker              Location of client config files

-D, --debug                     Enable debug mode

-H, --host=[]                   Daemon socket(s) to connect to

-h, --help                      Print usage

-l, --log-level=info            Set the logging level

--tls        明凯歼                   Use TLS; implied by --tlsverify

--tlscacert=~/.docker/ca.pem    Trust certs signed only by this CA

--tlscert=~/.docker/cert.pem    Path to TLS certificate file

--tlskey=~/.docker/key.pem      Path to TLS key file

--tlsverify                     Use TLS and verify the remote

-v, --version                   Print version information and quit

Commands:

attach    Attach to a running container

build     Build an image from a Dockerfile

commit    Create a new image from a container's changes

cp        Copy files/folders between a container and the local filesystem

create    Create a new container

diff      Inspect changes on a container's filesystem

events    Get real time events from the server

exec      Run a command in a running container

export    Export a container'孙瞎s filesystem as a tar archive

history   Show the history of an image

images    List images

import  激冲  Import the contents from a tarball to create a filesystem image

info      Display system-wide information

inspect   Return low-level information on a container, image or task

kill      Kill one or more running containers

load      Load an image from a tar archive or STDIN

login     Log in to a Docker registry.

logout    Log out from a Docker registry.

logs      Fetch the logs of a container

network   Manage Docker networks

node      Manage Docker Swarm nodes

pause     Pause all processes within one or more containers

port      List port mappings or a specific mapping for the container

ps        List containers

pull      Pull an image or a repository from a registry

push      Push an image or a repository to a registry

rename    Rename a container

restart   Restart a container

rm        Remove one or more containers

rmi       Remove one or more images

run       Run a command in a new container

save      Save one or more images to a tar archive (streamed to STDOUT by default)

search    Search the Docker Hub for images

service   Manage Docker services

start     Start one or more stopped containers

stats     Display a live stream of container(s) resource usage statistics

stop      Stop one or more running containers

swarm     Manage Docker Swarm

tag       Tag an image into a repository

top       Display the running processes of a container

unpause   Unpause all processes within one or more containers

update    Update configuration of one or more containers

version   Show the Docker version information

volume    Manage Docker volumes

wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.

二 通过命令docker command --help更深入的了解指定的Docker命令使用方法。

[root@localhost ~]# docker version --help

Usage:docker version [OPTIONS]

Show the Docker version information

Options:

-f, --format string   Format the output using the given go template

--help            Print usage

docker 如何限制和查看container 内存 和cpu

1. 通过top命令查看机器目前已消耗内存及cpu使用数量,linux下输入top,然后在输入1就会物陵塌出现cpu使用情况

2. docker 启动时限制cpu 和内存,--cpus 设置使用cpu数量 -m 设置使用内存

设置目的是为了不影响其他服务正常运行罩圆。

docker run -i -d --cpus 4 -m 12GB  -v $PWD:/celery_works/aa  image ID jupyter notebook --allow-root  --ip 0.0.0.0

备注:通过top命令查看cpu和内存使用情况,设置合理的cpu和内存确保不影响正常服务的运行

3. 查看 启动的container占用cpu 和内存

docker stats contrainer id

4. 容器用汪渣完后记得删除,使用docker kill contrainer id命令删除不用的container

5. 总结:

1. top命令查看空闲的内存和cpu

2.  docker 启动时限制cpu和内存

3. docker stats 查看容器消耗cpu和内存

4. 容器用完后记得删除,通过docker kill 命令删除

docker stats 这问题的原因是什么?Is the docker daemon running?

有两种可能性:

如果当前运行的用户不是 root,可能是没有权限执行 docker 命令。可以使用 sudo docker stats --no-stream ,或者使用 su - 命令切换到 root 用户,再执行 docker stats --no-stream。

如果使用 sudo 或者切换到 root 用户还是无法执行 docker 命令,那么就应蔽芹该是 docker 服务没有正常运行前圆,可以执行宏悔毕 systemctl restart docker ; systemctl enable docker

详解Docker——你需要知道的Docker进阶知识三

我们可以将数据保存在容器中,但是这样存在一些缺点:

针对上述的缺点,有些数据,例如数据库文件,我们不应该将其保存在镜像或者容器的可写层中。Docker 提供三种不同的方式将数据从 Docker 主机挂载到容器中,分别为卷( volumes ),绑定挂载( bind mounts ),临时文件系统( tmpfs )。很多时候, volumes 总是正确的选择。

无论使用上述的哪一种方式,数据在容器内看上去都是一样的。它被认为是容器文件系统的目录或文件。

对于三种不同的存储数据的方式来说,卷是唯一完全由 Docker 管理的。它更容易备份或迁移,并且我们可以使用 DockerCLI 命令来管理卷。

列出本地可用的卷列表:

这种由系统随机生成名称的卷称为 匿名卷 ,匿名卷名称不具备可读性,使用起来不太方便,所以创建卷时一般会指定其 name 。例如我们创建一个名为 volume1 的卷。

创建好卷之后,我们可以用卷来启动一个容器,这里首先需要学习 docker container run 命令的两个参数:

对于前面创建的卷 volume1 ,可使用如下命令来在容器中使用:

使用 --mount 的命令如下:

上述操作,我们运行了两个容器,并分别挂渗行载了一个卷。对于这两个容器来说,由于挂载的是同一个卷,所以它们将共享该数据卷。多个容器共享数据卷时,需要注意并发读写问题。可以分别连接到两个容器中,操作数据来验证数据是同步的。

绑定挂载( bind-mounts )通过将主机上的目录挂载到容器中,使得容器可以操作和修改主机上的文件。

例如,我们将 /home/hellodocker 目录挂载到容器中的 /home/hellodocker 目录下,使用的命令如下:

而如果使用 --mount ,相应的语句如下:

上述两个操作针对的是目录,而对于挂载文件来说,可能会出现一些特殊情况,涉及到绑定挂载和使用卷的区别。下面我们重现这一操作:

首先在当前目录,即 /home/hellodocker 目录下,创建一个 test.txt 文件。并向其中写入文本内容 "test1":

接着创建一个容器 hellodocker6 ,将 test.txt 文件挂载到容器中的 /test.txt 路径,并查看容器中 /test.txt 文件的内容:

这时新打开一个终端,通过 echo 命令向 /home/hellodocker/test.txt 文件追加内容 "test2",并在容器中查看 /test.txt 文件的内容:

这时无论是在容器中还是主机上都能查看到该文件的最新内容。接下来在主机上查看 test.txt 的 inode 号,并使用 vim 编辑该文件丛渣哗,添加 "test3",并查看该文件的内容:

在主机上使用 vim 编辑后,通过 vim 做出的修改并不能在容器中查看到

这是因为 vim 编辑文件的时候,会将文件内容暂存到一个临时文件中,退出保存后会删除原来的文件,并将临时文件重命名为原文件。但是我们标识文件是通过 inode ,因此 Docker 绑定的依然是旧的主机文件,所以容器中看到的依然是旧的内容。

对于数据卷来说,由 docker 完全管理,而绑定挂载需要我们自己去维护。我们需要自己手动去处理这些问题,这些问题并不仅仅是上面演示的这些,还有用户权限, SELINUX 等。

tmpfs 只存梁姿储在主机的内存中。当容器停止时,相应的数据就会被移除。

关于dockerstats详解和docker stdin的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表