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. vivo 制品管理在 CICD 落地实践

    作者:vivo 互联网效能平台团队 - Chen Lingling 在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量.高可靠性的软件,本文将介绍在 DevOps 领域, ...

  2. docker——容器的基本操作

    docker 容器的基本操作 run 格式 docker run [选项] 镜像 [命令] [参数...] 选项 选项 解释 -d 后台运行 -i 交互模式 -t 分配一个伪终端 -p 设置端口 -- ...

  3. 使用极限网关助力 ES 集群无缝升级、迁移上/下云

    在工作中大家可能会遇到以下这些场景: 自建 ES 集群需要平滑迁移到 XX 云: 从 XX 云将 ES 集群迁移到自建机房: ES 集群进行跨版本升级,同时保留回退能力: 这些场景往往都还有个共同的需 ...

  4. 微信支付(付款码支付,条码支付,刷卡支付)左上角LOGO显示

    微信支付(付款码支付,条码支付,刷卡支付)左上角LOGO显示 如果你上送的sub_appid 公众号(小程序),优先显示你公众号(小程序)的LOGO,如果你的公众号(小程序)未设置LOGO,会显示上游 ...

  5. django通过channels实现websocket

    WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex ...

  6. Idea克隆检出git项目

    1.我这里假设你已经安装好了Idea和Git环境 2. .

  7. python类和对象初识

    # python类和对象初识 a = 2 b = 3 print(id(a)) print(type(a)) print(a) print(id(b)) print(type(b)) print(b) ...

  8. http请求方式-RestTemplate

    http请求方式-RestTemplate import com.alibaba.fastjson.JSON; import com.example.core.mydemo.http.OrderReq ...

  9. #PowerBi Superchange PowerBi 开篇(1)

    本书由B站京西漫步老师推荐,并提供了相应的学习资源,有同感兴趣的朋友,可以加我好友免费分享资源. 本书主要以总结笔记,原文+译文+部分案例实操为主. 预计更新时间为23年6月-23年7月. 本系列笔记 ...

  10. Jenkins的搭建及配置

    一.搭建Jenkins及Jenkins的配置 1.从搭建Jenkins开始: 采用的时下载jenkins.msi,下载安装包,然后进行安装的方式,下载Jenkins的地址:https://www.je ...