一、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日志系统

  1. 将容器的日志记录到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

五、谢谢观看

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐