Cloud DAY4
项目架构图:
环境准备:
主机名称 IP地址 配置 logstash 192.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地址 | 配置 |
---|---|---|
kibana | 192.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-0001 | 192.168.1.31 | 2CPU,4G内存 |
docker-0002 | 192.168.1.32 | 2CPU,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 的使用与配置。 需要多加练习,实用性较强。
(#^.^#)