【docker】容器与守护进程运维
文章目录
一、docker架构
docker守护进程:也称为 dockerd,是 Docker 的后台服务,负责管理 Docker 对象,如镜像、容器、网络和卷。它监听 Docker 客户端的请求,执行这些请求,并返回响应。
docker客户端:也称为 docker 命令行工具,是用户与 Docker 守护进程交互的方式。客户端发送请求到守护进程,并显示守护进程返回的结果。
docker镜像:镜像是 Docker 世界的静态构建,它们是只读的模板,用于创建容器。镜像由一系列层组成,每一层代表 Dockerfile 中的一个指令。
docker容器:容器是镜像的运行实例,是 Docker 架构中的运行时组件。
docker Registry:是存储 Docker 镜像的服务。最知名的公共 Registry 是 Docker Hub,但用户也可以设置私有 Registry。
二、容器自启动
<1>守护进程开机自启
容器自启动,无需人工手动执行
systemctl enable docker.service;
<2>容器自启动
希望守护进程启动时容器也随之启动
# 注意`--restart unless-stopped`是能够实现自启动的关键参数
docker run -d --restart unless-stopped nginx
当容器正在运行,可以改变属性
docker update --restart unless-stopped nginx #nginx为要启动的容器
<3>守护进程停止期间保证容器服务正常
cd /etc/docker/daemon.json
vim daemon.json #加入一下内容
{
"live-restore": true
}
三、容器的资源限制
容器可使用的内存有:物理内存和交换(Swap)空间
<1>容器的内存限制
只设置内存限制
docker run -it -m 300M ubuntu:22.04 /bin/bash
<2>设置内存和交换空间限制
docker run -it -m 300M --memory-swap 1G ubuntu:22.04 /bin/bash
<3>内核内存限制
docker run -it -m 500M --kernel-memory 50M ubuntu:22.04 /bin/bash
<4>内存软限制
docker run -it -m 500M --memory-reservation 200M ubuntu:22.04 /bin/bash
四、任务
<1>任务4.1.1 配置容器的自动重启策略
注意:要想容器自动重启就使用–restart:

docker run -d --name testredis --restart=always redis
docker container ls
systemctl stop docker
systemctl stop docker.socket
docker container ls
systemctl start docker
docker container ls
docker update --restart=on-failure:3 testredis testredis
<2>任务4.1.2 在容器中使用supervisord 管理PHP和Nginx服务
Supervisor是Linux系统下的一个进程管理工具,该工具具有实现进程自动回复的功能,不需要编写shell脚本。
- 创建配置文件
mkdir php-nginx-supervisord
cd php-nginx-supervisord
mkdir nginx
cd nginx
touch nginx.conf
touch conf.d/site.conf
cd php-nginx-supervisord
mkdir supervisor
cd supervisor
mkdir conf.d
cd conf.d
mkdir supervisord.conf
vim supervisord.conf
- 写入

- 切回php-nginx-supervisord,编写dockerfile,以php:7.3-fpm为父镜像,安装nginx和supervisor

- 基于dockerfile构建镜像
docker build -t php-nginx-supervisord
- 基于构建的镜像启动容器
docker run -itd --rm -p 8080:80 php-nginx-supervisord
- 实际测试web服务
curl 127.0.0.1:8080
<3>任务4.2.1 熟悉docker监控命令的使用
查看容器中正在运行的进程的信息
docker run --rm -d --name redis redis
docker top redis
查看容器的资源使用情况
docker stats --format ''table {{.Name}} \t {{.CPUPerc}} \t {{.MemUsage}}''
注意:
all (-a) :显示所有的容器,包括未运行的
format:根据指定格式显示内容
no-stream:仅显示第一条记录
no-trunc:不截断输出,显示完整的信息
<4>任务4.2.3 将容器的日志记录到Linux日志系统
- 将容器的日志记录到syslog
syslog记录的日志文件是/var/log/messages
打开终端,使用tail实时监控系统日志文件/var/log/message
tail -f /var/log/massages
打开另一个终端,将redis容器的日志记录在syslog日志系统
docker run --rm -d --log-driver syslog --name redis redis
2.将容器的日志记录到journald:journald是systemd日志系统
选择journald作为日志驱动可将日志定向输出到systemd日志系统
docker run --rm -d ---log-driver journald --name redis redis
使用journalctl命令查看该容器的日志信息
journaldctl connainer_name=redis
<5>任务4.3.1 从docker守护进程获取实时事件
- 在一个终端上
docker events
- 在另一个终端上
docker create --name test alpine:lastest top
docker start test
docker start test
<6>任务4.3.2 查看docker守护进程(本身的)日志
journalctl -u docker.service
<7>任务4.3.3 测试docker的实时恢复能力
- 编辑docker守护进程配置文件
vim /etc/docker/daemon.json
加入:''live-restore'':true
- 重启docker守护进程
systemctl restart docker
docker info
- 基于httpd镜像创建一个运行Apache服务容器,然后查看正在运行的容器
docker run --rm -d --name web1 -p 8080:80 httpd
docker ps
- 重新加载docker守护进程,然后查看正在运行的容器
systemctl reload docker
docker ps
- 使用kill结束docker守护进程,然后查看正在运行的容器
kill -SIGHUP $(pidof dockerd)
docker ps
- 访问该服务提供的Apache服务,结果表示该服务正常
curl 127.0.0.1:8080
<8>任务4.3.4 启动docker守护进程的远程访问
- 编辑override文件
cd /etc/systemd/system/docker.service.d
systemctl edit docker.service
添加
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
- 重新加载systemctl配置
systemctl daemon-reload
- 重启docker
systemctl restart docker.service
- 检查docker守护进程是否在所配置的端口上监听
netstst -lntp | grep dockerd
- 可以在docker服务端命令中通过-H选项指定要连接的远程主机
docker -H tcp://192.168.10.51:2375 info
五、谢谢观看
更多推荐
所有评论(0)