如果您对docker基础之监控和docker监控系统感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解docker基础之监控的各种细节,并对docker监控系统进行深入的分析,此外还有关于167d
如果您对docker 基础之监控和docker 监控系统感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解docker 基础之监控的各种细节,并对docker 监控系统进行深入的分析,此外还有关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Docker (十九)-Docker 监控容器资源的占用情况、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker Day 1 Docker基础之常用操作指令的实用技巧。
本文目录一览:- docker 基础之监控(docker 监控系统)
- 167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
- Docker (十九)-Docker 监控容器资源的占用情况
- Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
- Docker Day 1 Docker基础之常用操作指令
docker 基础之监控(docker 监控系统)
docker 容器监控命令
docker ps 命令(查看所有的运行中的容器)
docker stats 命令(容器状态监控)
[root@bogon ~]# docker stats container1
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
container1 0.10% 138.4MiB / 15.52GiB 0.87% 2.13kB / 934B 57.3kB / 0B 41
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
container1 0.10% 138.4MiB / 15.52GiB 0.87% 2.13kB / 934B 57.3kB / 0B 41
通过 stats 的 api 查看更多详细信息
echo -e "GET /containers/3b7ef4fd7de1(container name或者id)/stats HTTP/1.0\r\n"|nc -U /var/run/docker.sock
docker inspect 命令(查看镜像或者容器的底层信息)
docker inspect -f docker inspect -f {{.NetworkSettings.IPAddress}} container3
例如:.NetworkSettings.IPAddress 表示要查看的字段名,container3 为容器名称
docker port (用于查看容器与主机之间的端口映射关系)
docker port <container id| container name>
容器监控工具
cAdvisor
用于分析运行中容器的资源占用和性能指标的开源工具
Datadog
利用内核结构 cgroups 获取 docker 的性能指标
Prometheus
开源服务监控系统和时间序列数据库
167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo
background : 最近为小伙伴们筹划docker系列的技术分享,研究了一会docker相关技术, 在此记录一下构建nginx容器时候的坑
1.nginx服务器根目录问题
docker 官方镜像提供的nginx基于debian/jessie平台,其文件结构和ubuntu中的nginx中并不相同
eg:
run一个niginx容器
<span>//80端口被占用,so...</span> $ sudo docker run <span>-it</span><span>-p</span><span>800</span>:<span>800</span> nginx $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES <span>1801</span>a32aab54 nginx <span>"nginx -g ''daemon off"</span><span>2</span> minutes ago Up <span>2</span> minutes <span>80</span>/tcp, <span>443</span>/tcp, <span>0.0</span><span>.0</span><span>.0</span>:<span>800</span><span>-></span><span>800</span>/tcp berserk_kare
进入容器内部
<span>$ </span>sudo docker exec -it <span>1801</span>a32aab54 /bin/bash root<span>@1801a32aab54</span><span>:/</span><span># </span>
查看nginx目录
<span># cd /etc/nginx/</span> conf<span>.d</span>/ koi-utf mime<span>.types</span> nginx<span>.conf</span> uwsgi_params fastcgi_params koi-win modules/ scgi_params win-utf
可以看到不仅没有熟悉的 /sites-available,也没有 /sites-enabled
继续查看nginx配置
<span># cat /conf.d/default.conf</span><span>server</span> { listen <span>80</span>; server_name localhost; <span>#charset koi8-r;</span><span>#access_log /var/log/nginx/log/host.access.log main;</span> location / { root /usr/share/nginx/html; <span>index</span><span>index</span>.html <span>index</span>.htm; } <span>#error_page 404 /404.html;</span><span># redirect server error pages to the static page /50x.html</span><span>#</span> error_page <span>500</span><span>502</span><span>503</span><span>504</span> /<span>50</span>x.html; location = /<span>50</span>x.html { root /usr/share/nginx/html; } <span>#...省略php-fpm配置,好长..</span> }
根目录配置: root /usr/share/nginx/html;
测试
<span># cd /usr/share/nginx/html</span><span># touch index.html</span><span># echo "test nginx in docker" >index.html</span>
php-fpm配置相关
'').addClass(''pre-numbering'').hide(); $(this).addClass(''has-numbering'').parent().append($numbering); for (i = 1; i '').text(i)); }; $numbering.fadeIn(1700); }); });以上就介绍了167 docker docker构建nginx容器系列问题,包括了docker,nginx方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
Docker (十九)-Docker 监控容器资源的占用情况
启动一个容器并限制资源
启动一个 centos 容器,限制其内存为 1G ,可用 cpu 数为 2
[root@localhost ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash
启动容器后,可以使用 docker 的监控指令查看容器的运行状态
- docker top 容器名: 查看容器的进程,不加容器名即查看所有
- docker stats 容器名:查看容器的 CPU,内存,IO 等使用信息
[root@localhost ~]# docker stats os1
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f9420cbbd2a9 os1 45.94% 47.09MiB / 1GiB 4.60% 54.6MB / 352kB 0B / 21.1MB 3
安装 stress
在容器中安装 docker 容器压测工具 stress
#先安装一些基础工具
[root@f9420cbbd2a9 /]# yum install wget gcc gcc-c++ make -y
#下载stress
[root@f9420cbbd2a9 ~]# wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
#安装 [root@f9420cbbd2a9 ~]# tar zxf stress-1.0.4.tar.gz [root@f9420cbbd2a9 ~]# cd stress-1.0.4 [root@f9420cbbd2a9 stress-1.0.4]./configure [root@f9420cbbd2a9 stress-1.0.4]# make [root@f9420cbbd2a9 stress-1.0.4]# make install
stress 压测
在容器使用 stress 指令进行负载压测
[root@f9420cbbd2a9 ~]# stress -m 1204m --vm 2
#模拟出4个繁忙的进程消耗cpu,然后使用-m 模拟进程最大使用的内存数1024,使用--vm 指定进程数
使用 docker 指令查看容器运行状态,可以 os1 容器的内存和 cpu 都得到了限制,即使给压测时超出了最大内存,也不会额外占用资源
[root@localhost ~]# docker stats os1
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
f9420cbbd2a9 os1 127.46% 319.7MiB / 1GiB 31.22% 54.8MB / 356kB 0B / 33.6MB 9
Stress 参数说明
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n,--dry-run 显示已经完成的指令执行情况
-t --timeout N 指定运行N秒后停止
--backoff N 等待N微妙后开始运行
-c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根
-i --io 产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器
-d --hadd n 产生n个执行write和unlink函数的进程
--hadd-bytes B 指定写的字节数,默认是1GB
--hadd-noclean 不要将写入随机ASCII数据的文件Unlink
时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G
Stress 使用实例
-
产生 13 个 cpu 进程 4 个 io 进程 1 分钟后停止运行
$ stress -c 13 -i 4 --verbose --timeout 1m
-
产生 3 个 cpu 进程、3 个 io 进程、2 个 10M 的 malloc ()/free () 进程,并且 vm 进程中 malloc 的字节不释放
$ stress --cpu 3 --io 3 --vm 2 --vm-bytes 10000000 --vm-keep --verbose
-
测试硬盘,通过 mkstemp () 生成 800K 大小的文件写入硬盘,对 CPU、内存的使用要求很低
$ stress -d 1 --hdd-noclean --hdd-bytes 800k
-
产生 13 个进程,每个进程都反复不停的计算由 rand () 产生随机数的平方根
$ stress -c 13
-
产生 1024 个进程,仅显示出错信息
$ stress --quiet --cpu 1k
-
产生 4 个进程,每个进程反复调用 sync (),sync () 用于将内存上的内容写到硬盘上
$ stress -i 4
-
向磁盘中写入固定大小的文件,这个文件通过调用 mkstemp () 产生并保存在当前目录下,默认是文件产生后就被执行 unlink (清除) 操作,但是可以使用
--hdd-bytes
选项将产生的文件全部保存在当前目录下,这会将你的磁盘空间逐步耗尽
# 生成小文件
$ stress -d 1 --hdd-noclean --hdd-bytes 13
# 生成大文件
$ stress -d 1 --hdd-noclean --hdd-bytes 3G
Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
Docker 学习路线 11:Docker命令行
Docker CLI (命令行界面) 是一个强大的工具,可让您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在其开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。
安装
要开始使用 Docker CLI,您需要在计算机上安装 Docker。您可以从 Docker 文档的官方安装指南中按照您所使用的操作系统进行安装。
基本命令
以下是一些基本的 Docker CLI 命令,供您熟悉:
docker run
:从 Docker 映像创建并启动容器docker container
:列出正在运行的容器docker image
:列出系统中所有可用的映像docker pull
:从 Docker Hub 或其他注册表拉取映像docker push
:将映像推送到 Docker Hub 或其他注册表docker build
:从 Dockerfile 构建映像docker exec
:在正在运行的容器中运行命令docker logs
:显示容器的日志
Docker Run 选项
docker run
是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:
d, --detach
:在后台运行容器e, --env
:为容器设置环境变量v, --volume
:绑定挂载卷p, --publish
:将容器的端口发布到主机name
:为容器指定名称restart
:指定容器的重启策略rm
:容器退出时自动删除容器
Dockerfile
Dockerfile 是一个包含构建 Docker 映像的指令的脚本。您可以使用 Docker CLI 使用 Dockerfile 构建、更新和管理 Docker 映像。
以下是 Dockerfile 的一个简单示例:
# Set the base image to use
FROM alpine:3.7
# Update the system and install packages
RUN apk update && apk add curl
# Set the working directory
WORKDIR /app
# Copy the application file
COPY app.sh .
# Set the entry point
ENTRYPOINT ["./app.sh"]
要构建映像,请使用以下命令:
docker build -t my-image .
Docker Compose
Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协作,提供了一种一致的方式来管理多个容器及其依赖项。
使用官方的安装指南安装 Docker Compose,然后您可以创建一个 docker-compose.yml
文件来定义和运行多容器应用程序:
version: ''3''
services:
web:
image: webapp-image
ports: - "80:80"
database:
image: mysql
environment: - MYSQL_ROOT_PASSWORD=my-secret-pw
使用以下命令运行应用程序:
docker-compose up
总之,Docker CLI 是管理 Docker 容器和资源的强大而多才多艺的工具。一旦熟悉其命令和功能,您将能够轻松开发、维护和部署使用 Docker 的应用程序。
Docker镜像
Docker镜像是一种轻量级、独立、可执行的软件包,其包含了运行应用程序所需的所有组件。这些组件包括:依赖项、库、运行时、系统工具和代码等,以确保应用程序在不同的环境中可以保持一致地运行。
Docker镜像是使用Dockerfile进行构建和管理的。Dockerfile是一个包含了创建Docker镜像所需指令的脚本,提供了一个逐步设置应用程序环境的指南。
使用Docker镜像
Docker CLI提供了多个命令来管理和使用Docker镜像。其中一些重要的命令包括:
docker image ls
:列出本地系统上所有可用的镜像。docker build
:从Dockerfile构建镜像。docker image rm
:删除一个或多个镜像。docker pull
:从注册表(如Docker Hub)将镜像拉到本地系统。docker push
:将镜像推送到仓库。
例如,要从Docker Hub拉取官方的Ubuntu镜像,可以运行以下命令:
docker pull ubuntu:latest
拉取镜像后,可以使用docker run
命令创建和运行一个使用该镜像的容器:
docker run -it ubuntu:latest /bin/bash
这个命令将创建一个新的容器,并使用**/bin/bash
** shell在容器内启动一个交互式会话。
共享镜像
Docker镜像可以使用容器注册表(如Docker Hub、Google Container Registry或Amazon Elastic Container Registry(ECR))共享和分发。一旦将您的镜像推送到注册表中,其他人就可以轻松地访问和使用它们。
要共享您的镜像,您首先需要使用适当的命名格式对其进行标记:
docker tag <image-id> <username>/<repository>:<tag>
然后,您可以使用以下命令将标记的镜像推送到注册表中:
docker push <username>/<repository>:<tag>
总之,Docker镜像是Docker生态系统中不可或缺的一部分,允许开发人员打包其应用程序、轻松地共享它们,并在不同的环境中确保一致性。通过理解Docker镜像和管理它们的命令,您可以利用容器化的力量,增强您的开发工作流程。在您的开发过程中使用Docker镜像可以大大提高开发效率,减少开发过程中的问题,让您能够更好地专注于应用程序的核心开发。
容器
容器可以被视为轻量级的、独立的可执行软件包,包括运行所需的所有东西,包括代码、运行时、库、环境变量和配置文件。容器将软件与其环境隔离开来,确保其在不同环境下工作一致。
为什么使用容器?
- 可移植性:容器确保应用程序在不同平台上一致工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上运行”的问题。
- 效率:容器很轻量级,因为它们使用共享资源,没有完整操作系统的开销。这使得启动时间更快,减少资源使用。
- 可扩展性:容器可以根据工作量轻松地进行缩放,因此非常适合分布式应用程序和微服务。
- 一致性:容器使得开发人员、QA 和运维团队在整个应用程序生命周期中拥有一致的环境,从而加快了部署流程。
- 安全性:容器提供了一定程度的隔离,使其与其他容器和底层主机系统隔离开来,有助于维护应用程序的安全性。
使用 Docker CLI 工作
Docker CLI 提供了多个命令,可帮助您创建、管理和与容器交互。一些常用命令包括:
docker run
:用于创建和启动新容器。docker container ls
:列出运行中的容器。docker container stop
:停止运行中的容器。docker container rm
:删除已停止的容器。docker exec
:在运行中的容器中执行命令。docker logs
:获取容器的日志,有助于调试问题。
Docker卷
Docker卷是一种用于存储Docker容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。
卷的重要性
Docker容器本质上是暂时的,这意味着它们可以轻松地停止、删除或替换。尽管这对应用程序开发和部署非常有利,但处理持久性数据时会带来挑战。这就是卷的作用。它们提供了一种将数据存储和管理与容器的生命周期分开的方法。
卷的类型
Docker中有三种类型的卷:
- 主机卷:它们存储在主机机器的文件系统中,通常位于
/var/lib/docker/volumes
目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性问题。 - 匿名卷:这些是在运行容器时没有指定卷时自动生成的。它们的ID由Docker生成,也存储在主机机器的文件系统中。
- 命名卷:与匿名卷类似,命名卷也存储在主机机器的文件系统中。但是,您可以提供自定义名称,这样在其他容器中引用或备份时更容易。
使用Docker CLI管理卷
Docker CLI提供了各种命令来管理卷:
docker volume create
: 使用给定的名称创建新卷。docker volume ls
: 列出系统中的所有卷。docker volume inspect
: 提供有关特定卷的详细信息。docker volume rm
: 删除卷。docker volume prune
: 删除所有未使用的卷。
要在容器中使用卷,可以在docker run
命令期间使用-v
或--volume
标志。例如:
docker run -d --name my-container -v my-named-volume:/var/lib/data my-image
此命令使用“my-image”映像创建一个名为“my-container”的新容器,并在容器内部将“my-named-volume”卷挂载到/var/lib/data
路径。
Docker 网络
Docker 网络提供了管理容器通信的重要方法。它允许容器使用各种网络驱动程序相互通信并与主机机器通信。通过理解和利用不同类型的网络驱动程序,您可以设计容器网络以适应特定的场景或应用程序需求。
网络驱动程序
Docker 中有几个可用的网络驱动程序。这里,我们将介绍四个最常见的驱动程序:
- bridge:容器的默认网络驱动程序。它创建了一个私有网络,容器可以相互通信并与主机机器通信。在此网络上的容器可以通过主机网络访问外部资源。
- host:该驱动程序取消了网络隔离并允许容器共享主机的网络。在网络性能至关重要的情况下,它非常有用,因为它最小化了容器网络的开销。
- none:该网络驱动程序禁用容器网络。使用此驱动程序的容器在没有任何网络访问的隔离环境下运行。
- overlay:该网络驱动程序使部署在不同主机上的容器能够相互通信。它专为 Docker Swarm 设计,并且非常适合多主机或基于集群的容器部署。
管理 Docker 网络
Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:
- 列出所有网络:
docker network ls
- 检查网络:
docker network inspect <network_name>
- 创建新网络:
docker network create --driver <driver_type> <network_name>
- 将容器连接到网络:
docker network connect <network_name> <container_name>
- 将容器与网络断开连接:
docker network disconnect <network_name> <container_name>
- 删除网络:
docker network rm <network_name>
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
Docker Day 1 Docker基础之常用操作指令
[TOC]
GitHub Docker 技术文档:https://github.com/hangyan/docker-resources/blob/master/README_zh.md
如果不想每次运行Docker都使用sudo权限,可以把用户加到Docker组中。
例如: 我的用户名为 user,则添加命令如下;
sudo usermod -aG docker user
重启后生效,再次执行Docker指令,直接输入docker xx ,不需要加 sudo 了。
使用docker ps 下面的命令查看 镜像跟容器
docker ps | awk ''{print $2, $NF}''
Docker 三大基础组件
仓库(Repository)
镜像(Image)
容器(Container)
查询
查看正在运行的容器和所有运行的容器
docker ps
docker ps -a
查看镜像
docker images
docker images -a
停止
停止容器与停止所有正在运行的容器
docker stop 想要停止的容器ID
docker stop $(sudo docker ps -aq )
删除
删除停止运行的容器与所有停止运行的容器
docker rm 想要停止的容器ID
docker rm $(docker ps -a -q) # 删除所有停止运行的容器(使用须小心)。用到了Docker指令嵌套功能
删除镜像
docker rmi 想要停止的镜像ID
docker rmi $(sudo docker images -a -q)
查询镜像
docke search lnmp
下载镜像
docker pull idiswy/lnmp
运行镜像
docker run 命令是用来创建运行Docker容器。它至少需要两个参数,一个是镜像名,一个是容器中需要运行的命令
docker run idiswy/lnmp echo "Hello World"
修改容器
在 learn/tutorial 容器中安装一个ping工具,由于镜像是ubuntu操作系统构建的,所以可以通过在容器中运行 apt-get install -y ping, 一旦ping工具安装完毕,容器会立刻停止运行,但容器中安装的软件包会一直保留。
docker run learn/tutorial apt-get install -y ping
创建新镜像
上面修改容器是已经安装了 ping程序包,想要保存这个变更,以便于以后启动容器时不需要重复安装ping程序包。Docker支持在原有镜像基础上,只提交增量修改部分,形成一个新镜像。以后使用新镜像为模板启动容器,容器中就会存在ping软件包,于是就不需要重复安装了。
首先用docker ps -l 找到安装过ping包的容器ID号,然后把这个容器提交为新镜像,镜像名为 learn/ping , 使用 docker commit 把容器提交为新镜像
docker ps -l
docker commit c61223a01f49 learn/ping
使用新镜像
上面基于容器生成了新的镜像,这个镜像包含ping软件包,这个新镜像可以运行在任何装有Docker引擎的机器上
测试刚才提交的新镜像中安装的ping工具 ping Docker网站
docker run learn/ping ping www.docker.com
查询容器信息
用 docker ps 查看当前运行的容器, 使用docker inspect 可以看到单个容器的详细信息
可以使用容器ID来指定容器,也可以只是用容器的前3 ~ 4 个字符来指定
docker inspect 36964c6571ba
docker inspect 3696
关于docker 基础之监控和docker 监控系统的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于167 docker docker构建nginx容器系列问题 docker registry docker run docker toolbo、Docker (十九)-Docker 监控容器资源的占用情况、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker Day 1 Docker基础之常用操作指令的相关知识,请在本站寻找。
本文标签: