云计算第四阶段------CLOUD Day4---Day6

Cloud DAY4

项目架构图:

环境准备:

主机名称IP地址配置
logstash192.168.1.27最低配置4核8G

#书接上文,我们在华为云平台租了几台云服务器,这次买一台性能好的服务器,作为logstash软件部署的载体。 


今天给小伙伴们带来的是,ELK集群中的logstash部署。

#软件尽量自己去官网下,生产环境软件包的活,以后都是云计算运维来找的。

logstash概述


logstash配置管理

[root@logstash ~]# vim /etc/hosts
192.168.1.21    es-0001
192.168.1.22    es-0002
192.168.1.23    es-0003
192.168.1.24    es-0004
192.168.1.25    es-0005
192.168.1.27    logstash
[root@logstash ~]# dnf install -y logstash
[root@logstash ~]# ln -s /etc/logstash /usr/share/logstash/config

#给新租的logstash服务器,配置好hosts文件。方便网络与传输日志文件。

简单的配置

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input { stdin {}
}filter{ }output{ stdout{}
}
[root@logstash ~]# /usr/share/logstash/bin/logstash  #启动服务

#这是带着大家一起,一边配置一边学习logstash的三个模块具体功能设置。后面同理

插件与调试格式

  • json格式字符串: {"a":"1", "b":"2", "c":"3"}

#什么是json格式?  

   原理与数据库与shell代码编写过程中,常用的 key:value 格式一直。方便读写与分析错误。

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input { stdin { codec => "json" }
}filter{ }output{ stdout{ codec => "rubydebug" }
}
[root@logstash ~]# /usr/share/logstash/bin/logstash

#json格式图解

input 模块

file 插件
#想了解更多模块配置,可以去看看^_^

file插件基本配置

[root@logstash ~]# touch /tmp/{a,b}.log
[root@logstash ~]# echo 'string 01' >>/tmp/a.log
[root@logstash ~]# echo 'string 02' >>/tmp/a.log
[root@logstash ~]# echo 'string 03' >>/tmp/a.log
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/a.log", "/tmp/b.log"]}
}
# filter { 不做任何修改 }
# output { 不做任何修改 }# 启动程序,等待数据输出
[root@logstash ~]# /usr/share/logstash/bin/logstash#---------------------------------------------------
# 在另一个终端模拟写入日志
[root@logstash ~]# echo 'string 04' >>/tmp/b.log
[root@logstash ~]# echo 'string 05' >>/tmp/a.log
file插件高级配置
# 删除默认书签文件
[root@logstash ~]# rm -rf /var/lib/logstash/plugins/inputs/file/.sincedb_*
[root@logstash ~]# cat /tmp/{a.log,b.log} >/tmp/c.log
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]start_position => "beginning"sincedb_path => "/var/lib/logstash/sincedb"}
}
# filter { 不做任何修改 }
# output { 不做任何修改 }[root@logstash ~]# /usr/share/logstash/bin/logstash

filter 模块

        grok 插件

#这个插件可以用到云计算第二阶段,学习的正则表达式知识,不记得的可以去第二阶段看文档。

正则表达式分组匹配格式: (?<名字>正则表达式) 正则表达式宏调用格式: %{宏名称:名字} 宏文件路径 : /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.3.4/patterns


#先去访问下,配置好的任意web服务器。才能看到日志数据。
# 从 web 服务器查找一条日志写入到日志文件
[root@logstash ~]# echo '60.26.217.109 - admin [13/Jan/2023:14:31:52 +0800] "GET /es/ HTTP/1.1" 200 148209 "http://127.70.79.1/es/" "curl/7.61.1"' >/tmp/c.log# 调试技巧:设置路径为 /dev/null 可以多次反复测试
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input {file {path => ["/tmp/c.log"]start_position => "beginning"sincedb_path => "/dev/null"}
}
# filter { 不做任何修改 }
# output { 不做任何修改 }[root@logstash ~]# /usr/share/logstash/bin/logstash
 匹配IP地址测试
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
# input { 不做任何修改 }filter {grok {match => { "message" => "(?<userIP>((25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(25[0-5]|2[0-4]\d|1?\d?\d))" }}grok {match => { "message" => "%{IP:clientIP}" }}
}# output { 不做任何修改 }[root@logstash ~]# /usr/share/logstash/bin/logstash
使用宏格式化日志

#最好用的一集,就像CSGO里面写的cfg文件一样,直接从系统配置里面,读取内在配置,不用自己用正则去一点点敲,直接调用宏不香嘛。

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
# input { 不做任何修改 }filter{ grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }remove_field => ["message"]}
}# output { 不做任何修改 }[root@logstash ~]# /usr/share/logstash/bin/logstash

output 模块

elasticsearch 插件

#联动来了,就好像市面上的二次元手游,就会和同样属于二次元领域的角色联动,增强影响力。

这里的配置也是同样的道理。 最终达到 1+1 > 2的效果。

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
# input { 不做任何修改 }
# filter { 不做任何修改 }output{ stdout{ codec => "rubydebug" }elasticsearch {hosts => ["es-0002:9200","es-0003:9200"]index => "weblog-%{+YYYY.MM.dd}"}
}[root@logstash ~]# /usr/share/logstash/bin/logstash
  • 访问页面,查看 Head 插件,验证数据写入 Elasticsearch 成功 (p≧w≦q)

Cloud Day 5

一、获取WEB日志

存在问题:

思路图解:

#这里我们会用到beats插件,配置也是很简单的。

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input { beats {port => 5044}
} 
# filter { 不做任何修改 }
# output { 不做任何修改 }[root@logstash ~]# /usr/share/logstash/bin/logstash

 filebeat 安装配置

#去web服务器安装配置服务。

# 安装 filebeat 服务
[root@web-0001 ~]# dnf install -y filebeat
[root@web-0001 ~]# systemctl enable --now filebeat# 配置 filebeat
[root@web-0001 ~]# vim /etc/filebeat/filebeat.yml
25:  id: my-filestream-id # 如果同时配置多个收集器,id不能重复
28:  enabled: true # 打开收集模块
32:  - /var/log/httpd/access_log # 日志文件路径
135: # 注释掉 Elasticsearch 配置
137: # 注释掉 Elasticsearch 配置
148: output.logstash: # 设置输出模块
150:   hosts: ["192.168.1.27:5044"] # 输出给logstash
163: processors:
164:   - drop_fields:  # 删除冗余数据
165:      fields:
166:        - log
167:        - offset
168:        - agent
169:        - ecs
170: #   - add_host_metadata: 注释掉(收集主机信息)
171: #       when.not.contains.tags: forwarded 注释掉(判断是否为容器)
172: #   - add_cloud_metadata: ~  注释掉(收集 cloud 信息)
173: #   - add_docker_metadata: ~ 注释掉(收集 docker 信息)
174: #   - add_kubernetes_metadata: ~ 注释掉(收集 kubernetes 信息)[root@web-0001 ~]# rm -f /var/log/httpd/*
[root@web-0001 ~]# systemctl restart httpd filebeat# 测试验证: 访问页面,观察 logstash 是否能够获取数据
[root@web-0001 ~]# curl http://192.168.1.11/info.php

 

多日志标签

#记住日志标签是在fiter模块里配置的。

添加标签
[root@web ~]# vim /etc/filebeat/filebeat.yml
# 设置识别标签
49:  fields:
50:    logtype: apache_log[root@web ~]# systemctl restart filebeat# 测试验证: 访问页面,观察 logstash 输出的数据变化
[root@web-0001 ~]# curl http://192.168.1.11/info.php
匹配标签数据调试成功以后,可以把 logstash 作为后台服务运行
[root@logstash ~]# cat /etc/logstash/conf.d/my.conf
input { beats {port => 5044}
}filter{if [fields][logtype] == "apache_log" {grok {match => { "message" => "%{HTTPD_COMBINEDLOG}" }remove_field => ["message"]}}
}output{ stdout{ codec => "rubydebug" }if [fields][logtype] == "apache_log" {elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]index => "weblog-%{+YYYY.MM.dd}"}}
}[root@logstash ~]# /usr/share/logstash/bin/logstash

 

 ###############数据调试成功以后,可以把 logstash 作为后台服务运行##############

# 注释 stdout 优化性能
[root@logstash ~]# vim /etc/logstash/conf.d/my.conf
input { 不做任何修改 }
filter{ 不做任何修改 }output{ # stdout{ codec => "rubydebug" }if [fields][logtype] == "apache_log" {elasticsearch {hosts => ["es-0004:9200", "es-0005:9200"]index => "weblog-%{+YYYY.MM.dd}"}}
}
[root@logstash ~]# chown -R logstash.logstash /var/log/logstash /var/lib/logstash
[root@logstash ~]# systemctl enable --now logstash

 批量部署

#在跳板机上编写ansible 剧本,节省时间。

[root@ecs-proxy ~]# cd website
[root@ecs-proxy website]# rsync -av 192.168.1.11:/etc/filebeat/filebeat.yml filebeat.j2
[root@ecs-proxy website]# vim filebeat.yaml
---
- name: 集群安装部署 filebeathosts: webtasks:- name: 安装 filebeatdnf:name: filebeatstate: latestupdate_cache: yes- name: 同步配置文件template:src: filebeat.j2dest: /etc/filebeat/filebeat.ymlowner: rootgroup: rootmode: '0600'- name: 设置启动服务service:name: filebeatenabled: yes- name: 清理历史日志file:path: "{{ item }}"state: absentloop:- /var/log/httpd/access_log- /var/log/httpd/error_log- name: 重启服务service:name: "{{ item }}"state: restartedloop:- httpd- filebeat[root@ecs-proxy website]# ansible-playbook filebeat.yaml

 验证日志收集

# 删除日志数据
[root@ecs-proxy ~]# curl -XDELETE "http://192.168.1.21:9200/weblog-*"
{"acknowledged":true}
# 通过浏览器访问 Web 集群页面,观察 head 插件,是否有数据写入

二、kibana 安装部署

环境准备:

主机IP地址配置
kibana192.168.1.26最低配置2核4G

什么是K8S?

######################官网地址################

 #数据图例展示

 

 


#是ELK日志分析工具平台中,模块最丰富有用的一部分。

安装 kibana

[root@kibana ~]# vim /etc/hosts
192.168.1.21    es-0001
192.168.1.22    es-0002
192.168.1.23    es-0003
192.168.1.24    es-0004
192.168.1.25    es-0005
192.168.1.26    kibana
[root@kibana ~]# dnf install -y kibana
[root@kibana ~]# vim /etc/kibana/kibana.yml
02:  server.port: 5601
07:  server.host: "0.0.0.0"
23:  server.publicBaseUrl: "http://192.168.1.26:5601"
32:  elasticsearch.hosts: ["http://es-0004:9200", "http://es-0005:9200"]
115: i18n.locale: "zh-CN"
[root@kibana ~]# systemctl enable --now kibana

#测试

  • 使用 ELB 发布端口 5601,通过 WEB 浏览器访问验证
  • 使用 kibana 完成数据统计分析

 #图例仅供参考,具体输出需要看网站入站和出站的IP和流量情况。

其他格式 

 

 

 

 

 

 #上面的K8S配置好后,需要知道怎么去网站查看与配置。具体什么图展示日志数据,具体情况具体分析。


Cloud Day 6

#第一节是帮助小伙伴们理解。已经了解过相关历史的,可以直接跳到第二节实操。

环境准备:

主机名IP地址最低配置
docker-0001192.168.1.312CPU,4G内存
docker-0002192.168.1.322CPU,4G内存

一、linux容器技术概念

 

 

 

 


 #这三者,就是一个虚拟空间中,有一个虚拟仓库,虚拟仓库中有虚拟的容器介质。

#容器可以抽象理解为,这个镜像空间中的一个虚拟数据载体。

K8S 与 Docker的关系

# k8s 就是船长,而docker是那个船,需要船长带领才能更加灵活稳定。

里面的容器,像船舱内部一样是网格化管理的。其中一个服务失效,不影响另一个服务的工作,充分预留了系统服务的恢复时间。 #增加容错率,避免一个服务影响失效,影响其余服务工作。

作为行业老大哥,docker制定过一系列行业标准,但是由于自身不遵守标准,逐渐从行业引领者变为T2-T3级别的选择。podman就是完全照着它模样诞生的。

虚拟机与容器之间的区别 

二、docker管理

docker安装部署

[root@docker ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
[root@docker ~]# sysctl -p
[root@docker ~]# dnf install -y docker-ce
[root@docker ~]# systemctl enable --now docker
# 查看服务器与客户端版本
[root@docker ~]# docker version
Client: Docker Engine - CommunityVersion:           25.0.2... ...
Server: Docker Engine - CommunityEngine:Version:           25.0.2

#两台Docker云主机都是一样的操作

配置镜像仓库

#镜像加速地址, 云计算1—3节课讲过,不记得容器镜像加速地址的可以去看。

[root@docker ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["这里配置镜像仓库加速器地址"],"insecure-registries":[]
}
[root@docker ~]# systemctl restart docker
# 查看 docker 服务配置信息
[root@docker ~]# docker info
... ...Insecure Registries:127.0.0.0/8Registry Mirrors:https://镜像仓库加速器/Live Restore Enabled: false

容器管理 

镜像管理命令说明
docker images查看本机镜像
docker pull 镜像名称:标签下载镜像
docker save 镜像名称:标签 -o 文件名备份镜像为tar包
docker load -i 备份文件名称导入备份的镜像文件
docker history 镜像名称:标签查看镜像的制作历史
pull、images、history 使用列子
# 下载 busybox:latest 镜像
[root@docker ~]# docker pull busybox:latest
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
busybox      latest    a9d583973f65   2 years ago     1.23MB
# 查看镜像的制作历史
[root@docker ~]# docker history busybox:latest
IMAGE          CREATED      CREATED BY                                 SIZE
a9d583973f65   2 years ago   /bin/sh -c #(nop)  CMD ["sh"]             0B        
<missing>      2 years ago   /bin/sh -c #(nop)  ADD file:b4b40618f2…   1.23MB  

save、load  例子

  • 拷贝本阶段 public/myos.tar.xz 镜像包到 docker 主机
    [root@ecs-proxy s4]# rsync -av public/myos.tar.xz 192.168.1.31:./

#这个镜像包,你们可以去docker官网下收藏下载量高和的可靠镜像,打成tar 包 放到本地。工作的时候可以放到自己的私有仓库和 github上,方面随时使用。

# 导入镜像
[root@docker ~]# docker load -i myos.tar.xz
Loaded image: rockylinux:8.5
Loaded image: myos:8.5
Loaded image: myos:php-fpm
Loaded image: myos:nginx
Loaded image: myos:httpd
Loaded image: myos:latest
# 备份镜像为 tar 包
[root@docker ~]# docker save busybox:latest -o busybox.tar
# 查看本机镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myos         php-fpm   f70bdfd2042c   12 months ago   275MB
myos         nginx     10dc658da2fe   12 months ago   274MB
myos         latest    1de38c85c2d1   13 months ago   4.67MB
myos         httpd     9245e660f88f   13 months ago   299MB
myos         8.5       621bfd7f9b46   13 months ago   249MB
rockylinux   8.5       210996f98b85   2 years ago     205MB
busybox      latest    a9d583973f65   2 years ago     1.23MB
管理命令(2)
容器管理命令说明
docker run -it(d) 镜像名称:标签创建容器
docker ps查看容器的信息
docker inspect 镜像名称|容器名称查询(容器/镜像)的详细信息
docker [start|stop|restart] 容器id启动、停止、重启容器
docker exec -it 容器ID 启动命令在容器内执行命令
docker logs 容器ID查看容器日志
docker cp 路径1 路径2拷贝文件:路径格式(本机路径、容器ID/路径)

run 

# 创建一个容器
[root@docker ~]# docker run -it myos:8.5
[root@3aa1df05b795 /]# hostname
3aa1df05b795
[root@3aa1df05b795 /]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 15:13 pts/0    00:00:00 /bin/bash
root          19       1  0 15:13 pts/0    00:00:00 ps -ef
[root@3aa1df05b795 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@3aa1df05b795 /]# exit
# 创建后台容器
[root@docker ~]# docker run -itd myos:httpd
6d6884244a995791f8171efa3ce81be1e9e51bedf25c3a5a67bac8bb7bc019b0
# 创建名为web1的后台容器
[root@docker ~]# docker run -itd --name web1 myos:nginx
14b669a75a95e9ba590c37137abc9d828d2c769d46f69c35fb0e8cc98cc544c4 

ps

# 查询容器状态
[root@docker ~]# docker ps
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
[root@docker ~]# docker ps -aq
14b669a75a95
6d6884244a99
47ded92f442f

start、stop、restart

[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
# 启动容器
[root@docker ~]# docker start web1 47ded92f442f
web1
47ded92f442f
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Up 25 minutes   80/tcp    web1
6d6884244a99   myos:httpd   ... ...  Up 25 minutes   80/tcp    hawking
47ded92f442f   myos:8.5     ... ...  Up 2 seconds              yonath
# 停止容器
[root@docker ~]# docker stop web1 
web1
# 命令替换,停止所有容器
[root@docker ~]# docker stop $(docker ps -aq)
14b669a75a95
6d6884244a99
47ded92f442f
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Exited (0)                web1
6d6884244a99   myos:httpd   ... ...  Exited (0)                hawking
47ded92f442f   myos:8.5     ... ...  Exited (0)                yonath
# 重启容器
[root@docker ~]# docker restart web1
web1

inspect

# 查询镜像的详细信息
[root@docker ~]# docker inspect myos:httpd
{   ......"Cmd": ["httpd","-DFOREGROUND"],......
}
# 查询容器的详细信息
[root@docker ~]# docker inspect web1 6d6884244a99
[{ ... ..."Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,... ..."Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "","IPPrefixLen": 0,... ...}
]

exec、cp、logs

# 在容器内执行非交互命令
[root@docker ~]# docker exec -it web1 ls
50x.html  index.html
# 在容器内执行交互命令
[root@docker ~]# docker exec -it web1 bash 
[root@14b669a75a95 html]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255... ...
[root@14b669a75a95 html]# vim /usr/local/nginx/conf/nginx.conf
32:    listen    80
[root@14b669a75a95 html]# exit# 从容器内拷贝文件出来
[root@docker ~]# docker cp web1:/usr/local/nginx/conf ./
Successfully copied 45.6kB to /root/./
# 重启容器
[root@docker ~]# docker restart web1
web1
[root@docker ~]# docker ps -a
14b669a75a95   myos:nginx   ... ...  Exited (1)                web1# 查看日志拍错
[root@docker ~]# docker logs web1 
nginx: [emerg] invalid parameter "server_name" in /usr/local/nginx/conf/nginx.conf:33# 修复配置文件错误
[root@docker ~]# vim conf/nginx.conf
32:    listen    80;
[root@docker ~]# docker cp conf/nginx.conf web1:/usr/local/nginx/conf/nginx.conf
Successfully copied 4.61kB to web1:/usr/local/nginx/conf/nginx.conf[root@docker ~]# docker restart web1
web1
[root@docker ~]# docker ps
CONTAINER ID   IMAGE        ... ...  STATUS          PORTS     NAMES
14b669a75a95   myos:nginx   ... ...  Up 2 seconds    80/tcp    web1

rm、rmi、tag

# 删除容器
[root@docker ~]# docker rm 47ded92f442f
# 强制删除容器
[root@docker ~]# docker rm -f web1
# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
6d6884244a99# 删除一个镜像
[root@docker ~]# docker rmi -f busybox:latest
Untagged: busybox:latest
# 已经创建了容器的镜像无法删除
[root@docker-0001 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
... ...
myos         latest    1de38c85c2d1   13 months ago   4.67MB
<none>       <none>    a9d583973f65   2 years ago     1.23MB
# 给镜像设置一个新的名称标签
[root@docker ~]# docker tag a9d583973f65 busybox:latest
[root@docker ~]# docker images
[root@docker-0001 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
......
myos         latest    1de38c85c2d1   13 months ago   4.67MB
busybox      latest    a9d583973f65   2 years ago     1.23MB

信息查询命令

命令说明
docker version查看服务器与客户端版本
docker info查看 docker 服务配置信息

三、简单镜像制作

镜像制作

# 使用基础镜像创建一个容器
[root@docker ~]# docker run -itd --name linux rockylinux:8.5
# 删除容器内的Yum配置文件
[root@docker ~]# docker exec -it linux rm -rf /etc/yum.repos.d
# 拷贝宿主机的Yum配置文件到容器内
[root@docker ~]# docker cp /etc/yum.repos.d linux:/etc/
# 在容器内安装工具软件包
[root@docker ~]# docker exec -it linux dnf install -y net-tools vim-enhanced tree bash-completion iproute procps-ng psmisc
# 清理缓存文件
[root@docker ~]# docker exec -it linux dnf clean all
# 停止容器
[root@docker ~]# docker stop linux
# 把容器制作成镜像
[root@docker ~]# docker commit linux mylinux:latest
sha256:7a4449e20f4c59d1f6c4db838b4724cbf63c8f4195513c5f17d053c7752891d5
# 查看新制作的镜像
[root@docker ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mylinux      latest    b64da40467ae   3 seconds ago   249MB
rockylinux   8.5       210996f98b85   13 months ago   205MB
# 删除制作镜像的容器
[root@docker ~]# docker rm -f linux 
linux

容器部署应用

  • 部署 apache 服务
# 删除所有容器
[root@docker ~]# docker rm -f $(docker ps -aq)
# 创建一个名为 myweb 的容器
[root@docker ~]# docker run -it --rm --name myweb mylinux:latest
#-----------------------------------------------------------
# 在容器内安装部署 apache
[root@a7f9d0c3e3e2 /]# dnf install -y httpd
[root@a7f9d0c3e3e2 /]# echo "Hello World ." >/var/www/html/index.html
[root@a7f9d0c3e3e2 /]# cat /usr/lib/systemd/system/httpd.service
[root@a7f9d0c3e3e2 /]# export LANG=C
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
# 在另一个终端完成访问验证
  • 为 apache 添加解析 php 文件支持
# ctrl + c 终止 httpd 服务运行
[root@a7f9d0c3e3e2 /]# dnf install -y php
[root@a7f9d0c3e3e2 /]# vim /etc/httpd/conf.modules.d/00-mpm.conf
11: LoadModule mpm_prefork_module ... ... # 去掉注释 
23: # LoadModule mpm_event_module ... ... # 注释配置 
[root@a7f9d0c3e3e2 /]# /usr/sbin/httpd -DFOREGROUND
# 服务不要关闭,在其他终端完成测试
  • 验证配置
# 在另一个终端拷贝 public/info.php 到 docker 主机
[root@docker ~]# docker cp info.php myweb:/var/www/html/
[root@docker ~]# curl http://172.17.0.2/info.php
<pre>
Array
([REMOTE_ADDR] => 172.17.0.1[REQUEST_METHOD] => GET[HTTP_USER_AGENT] => curl/7.61.1[REQUEST_URI] => /info.php
)
php_host:   616e75df56ae
1229

课后总结:

  掌握docker中 镜像 ,容器,仓库的关系。

  掌握  docker 的管理命令。#命令多敲几遍,错多了就记住了

这期内容,主要介绍了K8S 与 DOCKER 的使用与配置。 需要多加练习,实用性较强。

(#^.^#) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/426359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

低代码门户技术:构建高效应用的全新方式

什么是低代码门户技术&#xff1f; 低代码门户技术是一种利用低代码平台构建企业门户网站或应用的技术。门户通常是企业内部和外部用户访问信息和应用的集中平台。低代码门户技术通过图形化界面和预置组件&#xff0c;允许用户快速搭建和定制这些门户平台&#xff0c;而无需深…

TCP并发服务器的实现

一请求一线程 问题 当客户端数量较多时&#xff0c;使用单独线程为每个客户端处理请求可能导致系统资源的消耗过大和性能瓶颈。 资源消耗&#xff1a; 线程创建和管理开销&#xff1a;每个线程都有其创建和销毁的开销&#xff0c;特别是在高并发环境中&#xff0c;这种开销…

性能测试的复习3-jmeter的断言、参数化、提取器

一、断言、参数化、提取器 需求&#xff1a; 提取查天气获取城市名请求的响应结果&#xff1a;城市对查天气获取城市名的响应结果进行响应断言和json断言对查天气获取城市名添加用户参数 1、步骤 查看天气获取城市名 json提取器&#xff08;对响应结果提取、另一个接口请求…

简单了解微服务--黑马(在更)

认识微服务 单体架构 不适合大型复杂项目 微服务架构 将单体结构的各个功能模块拆分为多个独立的项目 拆取的独立项目分别开发&#xff0c;在部署的时候也要分别去编译打包&#xff0c;分别去部署&#xff0c;不同的模块部署在不同的服务器上&#xff0c;对外提供不同的功能…

小间距LED显示屏的技术原理分析

在现代显示技术领域&#xff0c;小间距LED显示屏以其卓越的显示效果和灵活的应用场景&#xff0c;逐渐成为市场的新宠。本文将深入探讨小间距LED显示屏的技术原理&#xff0c;分析其在显示领域的应用优势。 A、小间距LED显示屏的基本概念 小间距LED显示屏是指LED灯珠之间的间距…

linux hadoop-3.3.6 hbase-2.5.7

软件下载 hadoop https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz 可以直接下载到本地&#xff0c;也可以直接下载进虚拟机中 如果速度较慢&#xff0c;可以用&#xff1b;另一个 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common…

spring-boot-maven-plugin插件打包和java -jar命令执行原理

文章目录 1. Maven生命周期2. jar包结构2.1 不可执jar包结构2.2 可执行jar包结构 3. spring-boot-maven-plugin插件打包4. 执行jar原理 1. Maven生命周期 Maven的生命周期有三种&#xff1a; clean&#xff1a;清除项目构建数据&#xff0c;较为简单&#xff0c;不深入探讨&a…

spring容器创建bean过程中使用到的几个factory

文章目录 前述BeanFactoryFactoryBeanObjectFactory 前述 spring我们可以理解为一个帮我们管理bean的容器&#xff0c;使用spring框架之前创建bean都是通过new的方式&#xff0c;使用spring框架之后&#xff0c; 我们只需要告诉spring框架我们有那些bean&#xff0c;它会帮我们…

k8s证书过期处理

证书一共分为 根CA&#xff08;ca.crt&#xff09; master各组件的证书&#xff08;包括etcd、apiserver、front-proxy、controller-manager等各种&#xff09; kubelet证书 k8s证书有效期说明&#xff1a; 1、原生版本有效期master节点&#xff1a; /etc/kubernetes/ssl/…

YOLOv10改进系列,YOLOv10损失函数更换为Powerful-IoU(2024年最新IOU),助力高效涨点

改进前训练结果: 改进后的结果: 摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针…

基于 K8S kubernetes 的常见日志收集方案

目录 1、日志对我们来说到底重不重要&#xff1f; 2、常见的日志收集方案 2.1 EFK 2.2 ELK Stack 2.3 ELKfilebeat 2.4 其他方案 2、elasticsearch组件介绍 3、filebeat组件介绍 3.1 filebeat和beat关系 3.2 filebeat是什么&#xff1f; 3.3 Filebeat工作原理 3.4 …

ELFK日志分析平台,架构和通信

整个架构&#xff0c;加上跳板机&#xff0c;总共12台机器 技术方案&#xff1a; 1. 配置nfs服务器&#xff0c;为web集群提供共享网络文件系统 # 部署 NFS 服务 [rootnfs ~]# dnf install -y nfs-utils [rootnfs ~]# vim /etc/exports /var/webroot 192.168.1.0/24(rw,…

xml重点笔记(尚学堂 3h)

XML:可扩展标记语言 主要内容(了解即可) 1.XML介绍 2.DTD 3.XSD 4.DOM解析 6.SAX解析 学习目标 一. XML介绍 1.简介 XML(Extensible Markup Language) 可扩展标记语言&#xff0c;严格区分大小写 2.XML和HTML XML是用来传输和存储数据的。 XML多用在框架的配置文件…

剖析 MySQL 数据库连接池(C++版)

目录 ☀️0. 前言 &#x1f324;️1. 数据库连接池概述 ⛅1.1 服务器与数据库交互 ⛅1.2 MySQL 数据库网络模型 ⛅1.3 MySQL 连接驱动安装 ⛅1.4 同步&#xff08;synchronous&#xff09;连接池与异步&#xff08;asynchronous&#xff09;连接池 ⛅1.5 同步连接池和异…

记录开发一个英语听力训练网站

背景 在当前全球经济衰退的背景下&#xff0c;IT相关的工作在国内的竞争也是越来越激烈&#xff0c;为了能够获得更多的可能性&#xff0c;英语的学习也许能为程序员打开一扇新的窗户&#xff0c;比如很多远程的工作尤其是国际化背景的工作团队&#xff0c;英语的协作沟通是必…

yolov8-obb中存在的一个bug

yolov8支持OBB目标检测,且能提供较好的性能。 但是最近在使用yolov8-obb的过程中,发现yolov8-obb存在一个bug。即训练数据如果包含不带旋转角度的水平目标时,训练出的模型,经常会输出垂直的检测框,需要旋转90度以后才能得到最终结果。把yolov8-obb相关的源码阅读一遍才发…

初始爬虫5

响应码&#xff1a; 数据处理&#xff1a; re模块&#xff08;正则表达式&#xff09; re模块是Python中用于正则表达式操作的标准库。它提供了一些功能强大的方法来执行模式匹配和文本处理。以下是re模块的一些常见用法及其详细说明&#xff1a; 1. 基本用法 1.1 匹配模式 …

STM32 的 RTC(实时时钟)详解

目录 一、引言 二、RTC 概述 三、RTC 的工作原理 1.时钟源 2.计数器 3.闹钟功能 4.备份寄存器 四、RTC 寄存器 1.RTC_TR&#xff08;Time Register&#xff0c;时间寄存器&#xff09; 2.RTC_DR&#xff08;Date Register&#xff0c;日期寄存器&#xff09; 3.RTC_S…

TCP 拥塞控制:一场网络数据的交通故事

从前有条“高速公路”&#xff0c;我们叫它互联网&#xff0c;而这条公路上的车辆&#xff0c;则是数据包。你可以把 TCP&#xff08;传输控制协议&#xff09;想象成一位交通警察&#xff0c;负责管理这些车辆的行驶速度&#xff0c;以防止交通堵塞——也就是网络拥塞。 第一…

【MPC】无人机模型预测控制复现Data-Driven MPC for Quadrotors项目(Part 1)

无人机模型预测控制复现Data-Driven MPC for Quadrotors项目 参考链接背景和问题方法与贡献实验结果安装ROS创建工作空间下载RotorS仿真器源码和依赖创建Python虚拟环境下载data_driven_mpc仓库代码下载并配置ACADO求解器下载并配置ACADO求解器的Python接口下载并配置rpg_quadr…