https://www.cnblogs.com/xiugeng/p/10193333.html#_label1

1.设置重启策略

[root@docker ~]# cat /etc/docker/daemon.json
{
"live-restore":true
}

测试重启策略

[root@docker ~]# docker run --rm -d -p 8080:80 httpd
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fe86710d030 httpd "httpd-foreground" 5 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp affectionate_mclean
[root@docker ~]#
杀死进程容器仍在运行
[root@docker ~]# ps -e | grep dockerd
1588 ? 00:00:07 dockerd
[root@docker ~]# kill -SIGHUP 1588
[root@docker ~]# curl 127.0.0.1:8080
<html><body><h1>It works!</h1></body></html>
[root@docker ~]#

在容器中使用supervisord管理PHP和Nginx服务

创建文件编写dockerfile

mkdir web-supervisord

cd web-supervisord/

[root@docker web-supervisord]# cat  Dockerfile
FROM centos:7
MAINTAINER mqy@163.com
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
COPY nginx_install.sh /tmp/nginx_install.sh
RUN sh /tmp/nginx_install.sh; \rm -rf /usr/local/src/*
RUN sed -i -e '/worker_processes/a daemon off;' /usr/local/nginx/conf/nginx.conf;
COPY jdk-8u152-linux-x64.tar.gz /usr/local/src/jdk-8u152-linux-x64.tar.gz
COPY tomcat_install.sh /tmp/tomcat_install.sh
RUN sh /tmp/tomcat_install.sh; \rm -rf /usr/local/src/*
COPY supervisor_install.sh /tmp/supervisor_install.sh
COPY supervisord.conf /etc/supervisord.conf
COPY start_tomcat.sh /usr/local/tomcat/bin/mystart.sh
RUN sh /tmp/supervisor_install.sh; \rm -rf /tmp/*.sh

更改yum源地址

[root@docker ~]# cat /web-supervisord/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
gpgcheck=0
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

准备nginx脚本

[root@docker web-supervisord]# cat nginx_install.sh
yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel
cd /usr/local/src
wget 'http://nginx.org/download/nginx-1.12.2.tar.gz'
tar -zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_ssl_module
make
make install
exit 0

准备tomcat脚本

[root@docker web-supervisord]# cat tomcat_install.sh
yum install -y wget tar
cd /usr/local/src/
tar -zxvf jdk-8u152-linux-x64.tar.gz
mv jdk1.8.0_152 /usr/local/

配置java环境变量

[root@docker web-supervisord]# echo 'JAVA_HOME=/usr/local/jdk1.8.0_152/' >>/etc/profile
[root@docker web-supervisord]# echo 'PATH=$PATH:$JAVA_HOME/bin' >>/etc/profile
[root@docker web-supervisord]# echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH' >>/etc/profile
[root@docker web-supervisord]# source /etc/profile

获取tomcat

wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78.tar.gz
tar -zxvf apache-tomcat-8.5.38.tar.gz
mv apache-tomcat-8.5.38 /usr/local/tomca

上传jdk

[root@docker web-supervisord]# ls
apache-tomcat-8.5.78.tar.gz jdk-8u152-linux-x64.tar.gz supervisord.conf
CentOS-Base.repo nginx_install.sh supervisor_install.sh
Dockerfile start_tomcat.sh tomcat_install.sh

准备supervisor安装脚本

vi supervisor_install.sh
yum -y install epel-release
yum -y install python2-pip
pip install supervisor

准备supervisor配置文件

vi supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file [supervisord]
logfile=/tmp/supervisord.log ; # 日志
logfile_maxbytes=50MB ; # 最大50M日志
logfile_backups=10 ; # 轮循日志备份10个
loglevel=info ; # 日志等级记录info的
pidfile=/tmp/supervisord.pid ;pid
nodaemon=true ; # 在前台启动
minfds=102400 ; # 文件描述符限制
minprocs=2000 ; # 进程数 [rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket [program:nginx]
command=/usr/local/nginx/sbin/nginx ; # 前台启动nginx
autostart=true ; # 随着supervisor自动启动
startsecs=10 ; # 启动10s后算正常启动
autorestart=true ; # 程序退出后自动重启
startretries=3 ; # 启动失败自动重试次数
stdout_logfile_maxbytes=20MB ;stdout # 日志文件大小最大20Mb
stdout_logfile=/usr/local/nginx/logs/out.log [program:tomcat]
command=sh /usr/local/tomcat/bin/mystart.sh ; # 前台启动tomcat
autostart=true ; # 随着supervisor自动启动
startsecs=10 ; # 启动10s后算正常启动
autorestart=true ; #程序退出后自动重启
startretries=3 ; # 启动失败自动重试次数
stdout_logfile_maxbytes=20MB ;stdout 日志文件大小最大20Mb
stdout_logfile=/usr/local/tomcat/logs/catalina.out

9.tomcat启动脚本准备

由于supervisor无法使用source,需要编写个脚本来启动
[root@hecs-hqs-01 web-supervisord]# vi start_tomcat.sh
source /etc/profile
/usr/local/tomcat/bin/catalina.sh run

构建镜像

docker build -t web-supervisor .

启动容器

docker run -d web-supervisor /bin/bash -c 'supervisord -c /etc/supervisord.conf'

Step 11/14 : COPY supervisord.conf /etc/supervisord.conf
---> Using cache
---> 9c67a01652a7
Step 12/14 : COPY start_tomcat.sh /usr/local/tomcat/bin/mystart.sh
---> Using cache
---> dbf34e7080d6
Step 13/14 : COPY apache-tomcat-8.5.78.tar.gz apache-tomcat-8.5.78.tar.gz
---> Using cache
---> b74cf8c7864d
Step 14/14 : RUN sh /tmp/supervisor_install.sh; \rm -rf /tmp/*.sh
---> Using cache
---> 94cdb52e263b
Successfully built 94cdb52e263b
Successfully tagged web-supervisor:latest
[root@docker web-supervisord]#

使用docker top

[root@docker tomcat]# docker top dfec7ef8cf423e9dd
UID PID PPID C STIME TTY TIME CMD
root 10963 10943 0 17:45 ? 00:00:00 httpd -DFOREGROUND
33 10994 10963 0 17:45 ? 00:00:00 httpd -DFOREGROUND
33 10995 10963 0 17:45 ? 00:00:00 httpd -DFOREGROUND
33 10996 10963 0 17:45 ? 00:00:00 httpd -DFOREGROUND
[root@docker tomcat]#

使用docker stats

docker stats   xxxx
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
dfec7ef8cf42 loving_lewin 0.00% 24.93MiB / 3.84GiB 0.63% 656B / 0B 2.73MB / 0B 82

使用cAdvisor案例

[root@docker tomcat]# docker run --rm -d --name redis redis
7e704959de96d942a5e03d4e8518e7394a91d7409ce260b19d33146e8b321880
[root@docker tomcat]# docker run --rm -d --name myweb -p 80:80 httpd
70086c61a85820d34f8bb04908bf9d1b86de7a8ff4e3f0cd4299247454319e8c
[root@docker tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70086c61a858 httpd "httpd-foreground" 2 seconds ago Up 1 second 0.0.0.0:80->80/tcp, :::80->80/tcp myweb
7e704959de96 redis "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 6379/tcp redis
[root@docker tomcat]#

拉取镜像

[root@docker tomcat]# docker pull google/cadvisor
Using default tag: latest
latest: Pulling from google/cadvisor
ff3a5c916c92: Pull complete
44a45bb65cdf: Pull complete
0bbe1a2fe2a6: Pull complete
Digest: sha256:815386ebbe9a3490f38785ab11bda34ec8dacf4634af77b8912832d4f85dca04
Status: Downloaded newer image for google/cadvisor:latest
docker.io/google/cadvisor:latest
[root@docker tomcat]#

启动容器

[root@docker tomcat]# docker run --privileged \
> --volume /:/rootfs:ro --volume /var/run:/var/run:rw \
> --volume /sys:/sys:ro --volume /var/lib/docker/:/var/lib/docker:ro \
> --publish 8080:8080 --detach --name cadvisor google/cadvisor:latest
a8101914262cbd398d512d520f4af6966d39a63f86f3407bc2968d2a96b740de
[root@docker tomcat]#

启动容器,查看限制

[root@docker tomcat]# docker run -m 300M --memory-swap 500M --memory-reservation 200M -c 512 -tid  ubuntu
4ca6f26a402a91c21260da7a9f18b2acdd1c4b9803c8b306564c1b11888fa9cc

进入web 查看容器情况

http://192.168.3.131:8080/containers/

Weave Scope

上传scope
[root@docker ~]# chmod a+x scope
[root@docker ~]# ls
anaconda-ks.cfg docker-hello mqy.easy test
axe hello.c mqy.heihei web-supervisord
CentOS-Base.repo jdk-8u152-linux-x64.tar.gz scope
[root@docker ~]# scp scope /usr/local/bin/
[root@docker ~]# scope launch [root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ec619e6f4cd0 weaveworks/scope:1.13.2 "/home/weave/entrypo…" About a minute ago Up About a minute weavescope
[root@docker ~]#

使用docker logs

[root@docker ~]# docker logs ec619e
warning: I'm not PID 1, I'm PID 13262
/sbin/runsvdir started
<app> INFO: 2022/06/01 10:16:00.818444 app starting, version 1.13.2, ID 478733b882d27ef1
<app> INFO: 2022/06/01 10:16:00.818502 command line args: --mode=app --probe.docker=true
<app> INFO: 2022/06/01 10:16:00.818809 Basic authentication disabled
time="2022-06-01T10:16:00Z" level=info msg="publishing to: 127.0.0.1:4040"
<probe> INFO: 2022/06/01 10:16:00.819600 Basic authentication disabled
<probe> INFO: 2022/06/01 10:16:00.820484 command line args: --mode=probe --probe.docker=true

配置日志驱动

[root@docker ~]# docker run --rm -d --log-driver none --name redis redis
9aa4286b3e8902882aeed4aa5260aebc28662ccd801e825d1693deed082fd69a
[root@docker ~]# docker inspect -f='{{.HostConfig.LogConfig.Type}}' redis
none
[root@docker ~]# docker run --rm -d --log-driver syslog --log-opt env=os,customer --log-opt labels='test' --name redis02 redis
edf59ae2516cbf005d54bdf5009ef1a9723b30c71f1841cd4ce771c918c2ded9
[root@docker ~]# docker inspect -f='{{.HostConfig.LogConfig.Type}}-{{.HostConfig.LogConfig.Config}}' redis02
syslog-map[env:os,customer labels:test]
[root@docker ~]#

容器日志清理

[root@docker ~]# chmod a+x  abc
[root@docker ~]# bash abc
[root@docker ~]# cat abc
#!/bin/sh
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
[root@docker ~]#

将容器的日志重定向到Linux日志系统

从Docker守护进程获取实时事件

使用dockerd

[root@docker ~]# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
[root@docker ~]# dockerd
INFO[2022-06-01T18:34:36.108607493+08:00] Starting up
INFO[2022-06-01T18:34:36.111402427+08:00] parsed scheme: "unix" module=grpc
INFO[2022-06-01T18:34:36.111421117+08:00] scheme "unix" not registered, fallback to default scheme module=grpc
INFO[2022-06-01T18:34:36.111443196+08:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock <nil> 0 <nil>}] <nil> <nil>} module=grpc

docker 6.1测试的更多相关文章

  1. selenium结合docker构建分布式测试环境

    selenium是目前web和app自动化测试的主要框架.对于web自动化测试而言,由于selenium2.0以后socker服务器由本地浏览器自己启动且直接通过浏览器原生API操作页面,故越来越多的 ...

  2. selenium 结合 docker 构建分布式测试环境 (初学者视角)

    前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...

  3. docker实战——在测试中使用Docker

    在之前几章中介绍的都是Docker的基础知识,了解什么是镜像,docker基本的启动流程,以及如何去运作一个容器等等. 接下来的几个章节将介绍如何在实际开发和测试过程中使用docker. 将Docke ...

  4. DockerScan:Docker安全分析&测试工具

    DockerScan:Docker安全分析&测试工具 今天给大家介绍的是一款名叫DockerScan的工具,我们可以用它来对Docker进行安全分析或者安全测试. 项目主页 http://gi ...

  5. Docker标准化开发测试和生产环境

    对于大部分企业来说,搭建 PaaS 既没有那个精力,也没那个必要,用 Docker 做个人的 sandbox 用处又小了点. 可以用 Docker 来标准化开发.测试.生产环境. Docker 占用资 ...

  6. docker安装与测试 及 安装docker compose

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口 ...

  7. docker tmpfs 的测试结果

    创建 2G 内存的 Container 使用tmpfs挂载到 /tmp docker run --rm -it --memory 2g --mount type=tmpfs,destination=/ ...

  8. golang+docker 进入镜像测试本地通信

    首先进入docker镜像: docker-compose exec 镜像 sh //进入镜像 然后添加curl命令 apk add curl 最后在使用 curl  -d  localhost:809 ...

  9. kind:Kubernetes in Docker,单机测试 Kubernetes 群集的最佳方案

    请访问原文发布链接:https://sysin.org/article/kind/,查看最新版. 作者:gc(at)sysin.org,主页:www.sysin.org 2021.04.28 更新,k ...

  10. 自动化运维:使用Maven与Docker运行Selenium测试

    在这篇文章中,我们将向您展示如何创建交付流水线并实现以下目标: 使用Web应用程序构建Docker镜像 在Docker容器中运行该应用程序 从不同的容器中使用Maven运行Selenium测试 出于本 ...

随机推荐

  1. 系统镜像烧写及U-Boot编译

    1 系统镜像烧写 1.1 工具介绍 烧写软件:使用NXP的MfgTool2工具烧写,工具路径:[正点原子]阿尔法Linux开发板(A盘)-基础资料\05.开发工具\04.正点原子MFG_TOOL出厂固 ...

  2. CF1815

    CF1815 Div. 1 确实难,Virtual Contest 上只完成了两道题,想出来了三道题. A. Ian and Array Sorting 秒切题--考虑将前 \(n - 1\) 个数变 ...

  3. 你知道键盘是如何工作的吗?(xv6键盘驱动程序)

    键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ...

  4. Windows 预览体验计划显示空白

    Open PowerShell as Administator.In the elevated PowerShell window, copy and paste the following comm ...

  5. 《Android开发卷——HTTP网络通信,HTTP网络连接》

    为了访问互联网,需要设置应用程序获取"androd.permission.INTERNET"权限的许可. 一.使用Apache接口(org.apache.http)并实现网络连接的 ...

  6. 关于编译告警 C4819 的完整解决方案 - The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.

    引言 今天迁移开发环境的时候遇到一个问题,同样的操作系统和 Visual Studio 版本,原始开发环境一切正常,但是迁移后 VS 出现了 C4819 告警,上网查了中文的一些博客,大部分涵盖几种解 ...

  7. libevent之bufferevents

    目录 Bufferevents:概念和基础知识 Bufferevents 和 evbuffers 回调和水印 延迟回调 缓冲区事件的选项标志 使用基于套接字的缓冲区事件 创建基于套接字的缓冲区事件 在 ...

  8. 创龙科技位居头版,2023深圳elexcon电子展为智能化赋能!

    紧跟前沿技术应用及市场发展热点,elexcon2023聚焦三大展示板块:"嵌入式与AIoT展""电源与储能展""SiP与先进封装展",吸引了 ...

  9. 嵌入式ARM端测试手册——全志T3+Logos FPGA评估板(下)

    前 言 本指导文档适用开发环境: Windows开发环境:Windows 7 64bit.Windows 10 64bit Linux开发环境:Ubuntu18.04.4 64bit 虚拟机:VMwa ...

  10. Spring之拦截器和过滤器

    Spring拦截器 拦截器简介 Spring拦截器是一种基于AOP的技术,本质也是使用一种代理技术,它主要作用于接口请求中的控制器,也就是Controller. 因此它可以用于对接口进行权限验证控制. ...