当前位置: 首页 > article >正文

云计算第四阶段------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: 集群安装部署 filebeat
  hosts: web
  tasks:
  - name: 安装 filebeat
    dnf:
      name: filebeat
      state: latest
      update_cache: yes
  - name: 同步配置文件
    template:
      src: filebeat.j2
      dest: /etc/filebeat/filebeat.yml
      owner: root
      group: root
      mode: '0600'
  - name: 设置启动服务
    service:
      name: filebeat
      enabled: yes
  - name: 清理历史日志
    file:
      path: "{{ item }}"
      state: absent
    loop:
      - /var/log/httpd/access_log
      - /var/log/httpd/error_log
  - name: 重启服务
    service:
      name: "{{ item }}"
      state: restarted
    loop:
      - 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 - Community
 Version:           25.0.2
 ... ...
Server: Docker Engine - Community
 Engine:
  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/8
 Registry 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 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 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 0
        TX 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 1500
        inet 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.kler.cn/news/313192.html

相关文章:

  • SpringBoot实现OAuth客户端
  • SQL编程题复习(24/9/20)
  • FPGA基本结构和简单原理
  • Mac下nvm无法安装node问题
  • 设计模式-行为型模式-命令模式
  • 001.从0开始实现线性回归(pytorch)
  • 【Docker】安装及使用
  • EmguCV学习笔记 C# 12.3 OCR
  • Vue vs React vs Angular 的区别和选择
  • 数据结构-2.9.双链表
  • 周末愉快!——周复盘
  • 深度学习-03 Pytorch
  • Android 空气质量刻度
  • CleanClip For Mac 強大的剪貼簿助手Paste替代工具 v2.2.1
  • 学习笔记——EffcientNetV2
  • React——点击事件函数调用问题
  • Gradio离线部署到内网,资源加载失败问题(Gradio离线部署问题解决方法)
  • docker搭建个人网盘,支持多种格式,还能画图,一键部署
  • Matlab可视化│常用绘图全家桶
  • HTTP中的301、302实现重定向
  • ActivityManagerService 分发广播(6)
  • Vue3:reactive丢失响应式,数据有更新但表单没有更新
  • gin配置swagger文档
  • 树与图的深度优先遍历(dfs的图论中的应用)
  • 【CPP】类与继承
  • [原创]全新安装最新版Delphi 12.2之前, 如何正确卸载旧版Delphi 12.1?
  • 谈对象第二弹: C++类和对象(中)
  • SQLiteHelper
  • Java:List<String> 转换List<BigDecimal> 并求和
  • Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner