## 第二章:掌握Docker数据卷

#### Docker容器数据卷

**容器存在的问题**

- 容器删除后,在容器中产生的数据默认也会被删除

- 容器与外部主机无法直接交换文件

- 容器与容器之间无法相互交换数据

**容器数据卷**

- 数据卷可以是宿主机中的一个目录或文件,通过将目录或文件挂载到容器中实现容器数据与宿主机数据立即同步
- 数据卷可以解决容器删除后容器数据丢失的问题,实现数据持久化
- 数据卷可以间接的将外部主机数据传输到宿主机目录,解决容器与外部主机之间数据交换的问题
- 一个数据卷目录可以同时挂载多个容器,解决多容器之间数据交换的问题

**配置数据卷**

> 在创建启动容器时,使用-v参数设置数据卷
>
> docker  run  参数   -v  宿主机目录/文件:容器内目录/文件...

**注意事项**

> 1.目录必须是绝对路径
>
> 2.如果目录不存在,会自动创建
>
> 3.可以挂载多个数据卷

#### 配置容器数据卷

```shell
#创建容器并挂载数据卷
[root@localhost ~]# docker run -it --name=centos3 -v /root/test:/root/test_container centos:7 /bin/bash

#容器内查看数据卷目录
[root@8cf8fcdb6e52 /]# ls /root
anaconda-ks.cfg  test_container

#验证数据同步,在宿主机数据卷目录创建文件
[root@localhost ~]# touch test/xxxx.txt
[root@localhost ~]# ls test/
xxxx.txt

#验证数据同步,容器查看数据是否同步
[root@8cf8fcdb6e52 /]# ls /root/test_container/
xxxx.txt

#验证数据同步,容器数据卷发生变化,宿主机也会立刻同步
[root@8cf8fcdb6e52 /]# touch /root/test_container/abc.txt
[root@8cf8fcdb6e52 /]# ls /root/test_container/
abc.txt  xxxx.txt

#验证数据同步,宿主机验证数据是否同步
[root@localhost ~]# ls test/
abc.txt  xxxx.txt

#退出并删除容器
[root@8cf8fcdb6e52 /]# exit
[root@localhost ~]# docker rm centos3

#宿主机验证数据卷目录数据是否存在
[root@localhost ~]# ls test/
abc.txt  xxxx.txt

#重新创建容器,并将数据卷目录同步到容器中
[root@localhost ~]# docker run -it --name=centos3 -v /root/test:/root/test_container centos:7 /bin/bash

#容器验证数据是否同步
[root@9a48ae7d7eb3 /]# ls /root/
anaconda-ks.cfg  test_container
[root@9a48ae7d7eb3 /]# ls /root/test_container/
abc.txt  xxxx.txt
```

#### 容器挂载多个数据卷

```shell
#创建容器并同时挂载多个数据卷目录
[root@localhost ~]# docker run -it --name=centos4 \
> -v /root/test:/root/test \
> -v /root/test1:/root/test1 \
> centos:7

#容器查看数据卷目录
[root@2e975255d526 /]# ls /root
anaconda-ks.cfg  test  test1
```

#### 多容器挂载同一个数据卷

```shell
#创建容器并挂载数据卷
[root@localhost ~]# docker run -it --name=centos5 -v /root/test:/root/test_container centos:7

#创建容器并挂载数据卷
[root@localhost ~]# docker run -it --name=centos6 -v /root/test:/root/test_container centos:7

#在容器数据卷创建文件
[root@dec4ecc23b61 test_container]# touch test.txt
[root@dec4ecc23b61 test_container]# ls
abc.txt  test.txt  xxxx.txt

#另一个容器验证数据是否同步
[root@448a180cc6c8 ~]# ls test_container/
abc.txt  test.txt  xxxx.txt

#宿主机验证数据是否同步
[root@localhost ~]# ls test
abc.txt  test.txt  xxxx.txt
```

**数据卷总结:**

>1. 把容器内的相应目录的数据持久化到宿主机 
>
>2. 数据卷可以间接的将外部主机数据传输到宿主机目录,解决容器与外部主机之间数据交换的问题
>
>3. 一个数据卷目录可以同时挂载多个容器,解决多容器之间数据交换的问题

## 第三章:掌握Docker应用部署

#### 1.Docker部署MySQL

> 在Docker容器中部署MySQL数据库,并通过外部MySQL客户端管理MySQL数据库

```shell
#下载MySQL镜像文件(不了解版本的可以从Docker Hub上提前查看MySQL的版本信息)
[root@localhost ~]# docker pull mysql:5.7

#在宿主机创建目录用于存储MySQL数据
[root@localhost ~]# mkdir /mysql

#创建容器,设置端口映射、目录映射(需要映射的目录或文件就是传统部署方式的所在位置,所以需要有传统部署方式的基础)
[root@localhost mysql]# docker run -id -p 3306:3306 --name=mysql \   #映射端口
 -v /mysql/conf:/etc/mysql/conf.d \      #映射配置文件目录
 -v /mysql/logs:/logs \                  #映射日志目录
 -v /mysql/data:/var/lib/mysql \         #映射数据目录
 -e MYSQL_ROOT_PASSWORD=123456 \
 mysql:5.7

#进入MySQL容器
[root@localhost mysql]# docker ps
[root@localhost mysql]# docker exec -it mysql /bin/bash

#进入容器中的MySQL数据库
root@43f0946f3e6c:/# mysql -uroot -p123456
mysql> 
mysql> create database db1;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

#宿主机查看数据卷目录
[root@localhost ~]# ll /mysql/data
-rw-r----- 1 polkitd input       56 7月  20 23:05 auto.cnf
-rw------- 1 polkitd input     1680 7月  20 23:05 ca-key.pem
-rw-r--r-- 1 polkitd input     1112 7月  20 23:05 ca.pem
-rw-r--r-- 1 polkitd input     1112 7月  20 23:05 client-cert.pem
-rw------- 1 polkitd input     1676 7月  20 23:05 client-key.pem
drwxr-x--- 2 polkitd input       20 7月  20 23:08 da1
-rw-r----- 1 polkitd input     1359 7月  20 23:05 ib_buffer_pool
-rw-r----- 1 polkitd input 79691776 7月  20 23:05 ibdata1
-rw-r----- 1 polkitd input 50331648 7月  20 23:05 ib_logfile0
-rw-r----- 1 polkitd input 50331648 7月  20 23:05 ib_logfile1
-rw-r----- 1 polkitd input 12582912 7月  20 23:05 ibtmp1
drwxr-x--- 2 polkitd input     4096 7月  20 23:05 mysql
drwxr-x--- 2 polkitd input     8192 7月  20 23:05 performance_schema
-rw------- 1 polkitd input     1680 7月  20 23:05 private_key.pem
-rw-r--r-- 1 polkitd input      452 7月  20 23:05 public_key.pem
-rw-r--r-- 1 polkitd input     1112 7月  20 23:05 server-cert.pem
-rw------- 1 polkitd input     1676 7月  20 23:05 server-key.pem
drwxr-x--- 2 polkitd input     8192 7月  20 23:05 sys
```

#### 2.Docker部署tomcat

>在Docker容器中部署tomcat,并通过外部机器访问tomcat部署的项目

```shell
#下载tomcat镜像文件(不了解版本的可以从Docker Hub上提前查看tomcat的版本信息)
[root@localhost ~]# docker pull tomcat:10

#在宿主机创建数据卷目录用于存储tomcat容器数据
[root@localhost ~]# mkdir /tomcat

#创建容器,设置端口映射、目录映射
[root@localhost ~]# docker run -id --name=tomcat1 -p 8080:8080 \  #映射端口
-v /tomcat:/usr/local/tomcat/webapps   #映射网页根目录
tomcat:10

#宿主机在tomcat数据卷目录创建测试页面
[root@localhost ~]# mkdir /tomcat/test
[root@localhost ~]# vim /tomcat/test/index.html
hello tomcat

#外部主机通过浏览器访问容器tomcat服务
http://192.168.0.41:8080/test/
```

#### 3.Docker部署nginx

> 在Docker容器中部署nginx,并通过外部主机访问nginx服务

```shell
#下载nginx镜像文件(不了解版本的可以从Docker Hub上提前查看nginx的版本信息)
#宿主机创建nginx数据卷目录
[root@localhost ~]# mkdir /nginx

#在数据卷目录创建conf目录用于存放nginx的主配置文件
[root@localhost ~]# mkdir /nginx/conf

#提前准备好nginx.conf主配置文件(将以下内容复制到nginx.conf文件)
[root@localhost ~]# vim /nginx/conf/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
    #tcp_nopush     on;
    
    keepalive_timeout  65;
    
    #gzip  on;
    
   include /etc/nginx/conf.d/*.conf;
}

#创建容器,设置端口映射、目录与配置文件映射
[root@localhost ~]# docker run -id --name=nginx -p 80:80 \   #映射端口
-v /nginx/conf/nginx.conf:/etc/nginx/nginx.conf \   #映射配置文件
-v /nginx/logs:/var/log/nginx \                     #映射日志目录
-v /nginx/html:/usr/share/nginx/html                #映射网页根目录

#宿主机在/html数据卷目录为nginx创建测试
[root@localhost ~]# vim /nginx/html/index.html
hello nginx

#外部主机通过浏览器访问nginx服务
http://192.168.0.41/
```

#### 4.Docker部署Prometheus+Gfafana监控

```shell
#下载prometheus镜像
[root@localhost ~]# docker search prometheus

#创建数据卷目录
[root@localhost ~]# mkdir /prom

#创建容器(创建容器为了拷贝prometheus配置文件)
[root@localhost ~]# docker run -id --name=prom prom/prometheus

#拷贝配置文件到宿主机目录
[root@localhost ~]# docker cp prom:/etc/prometheus/prometheus.yml /prom

#停止容器
[root@localhost ~]# docker stop prom

#删除容器
[root@localhost ~]# docker rm prom

#创建Prometheus容器并挂载数据卷
[root@localhost ~]# docker run -id --name=prom -p 9090:9090 \
-v /prom/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus

#查看容器状态并访问Prometheus
[root@localhost ~]# docker ps

http://192.168.0.24:9090

#下载node-exporter用于获取主机指标数据
[root@localhost ~]# docker pull prom/node-exporter

#创建node-exporter容器
[root@localhost ~]# docker run -id --name=node-export -p 9100:9100 prom/node-exporter

#修改Prometheus.yml配置文件定义监控
[root@localhost ~]# vim /prom/prometheus.yml 
...
  - job_name: "node-exporter"
    static_configs:
      - targets: ["192.168.0.24:9100"]
      
#重启Prometheus      
[root@localhost ~]# docker restart prom

#创建grafana容器
[root@localhost ~]# docker run -d --name=grafana -p 3000:3000 grafana/grafana

#访问grafana添加数据源与监控模板
http://192.168.0.24:3000

#部署cadvisor(开源的容器度量和可视化系统)用于获取容器内的指标数据
具体部署地址可参考:https://github.com/google/cadvisor

#下载cadvisor镜像
[root@localhost ~]# docker pull google/cadvisor

#创建cadvisor容器
[root@localhost ~]# docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8888:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor

#访问cadvisor
http://192.168.0.24:8888

#cadvisor为prometheus提供了时序数据格式(该格式为prometheus识别的格式)
http://192.168.0.24:8888/metrics

#修改promethes.yml文件采集cadvisor数据
[root@localhost ~]# vim /prom/prometheus.yml
...
  - job_name: "docker"
    static_configs:
      - targets: ["192.168.0.24:8888"]

#重启prometheus容器
[root@localhost ~]# docker restart prom

#为grafana导入容器监控模板
具体模板可参考地址:https://grafana.com/grafana/dashboards/?search=docker
```

安装完docker命令后,通过安装mysql、tomcat、nignx,安装普罗米修斯监控软件相关推荐

  1. 普罗米修斯监控docker 服务

    环境 192.168.254.127 (监控服务器) 192.168.254.128 (被监控机器) 首先在监控服务器安装: 1.安装Node Exporter 来收集硬件信息 所有节点运行以下命令安 ...

  2. Prometheus企业级监控、普罗米修斯监控他来啦,配置邮箱报警、安装篇

    文章目录 Prometheus企业级监控 1. Prometheus架构介绍 ### 1.1 组件说明 1.2 总结: 1.3 对比Zabbix 1.4 环境介绍 Prometheus部署 2.2 配 ...

  3. linux安装Promethus普罗米修斯监控

    1.Node_export 下载地址:Releases · prometheus/node_exporter · GitHub node_export 用来监控主机信息,每台机器上都要部署一个该组件 ...

  4. 普罗米修斯监控mysql数据库实战

    目录 前言 一 实验环境 1.1 前期准备 1.2 确认IP地址 1.3 关闭SELinux和防火墙 二 配置prometheus监控 2.1 使用rz上传prometheus压缩包 2.2 解压包并 ...

  5. prometheus(普罗米修斯监控)部署、主机监控及docker容器监控

    部署前准备 prometheus相关材料下载 官方下载地址: Prometheus下载地址:https://prometheus.io go下载地址:https://golang.org Grafan ...

  6. 普罗米修斯-docker安装

    1.只有一台服务器,所以使用docker来进行试验 #安装docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliy ...

  7. 普罗米修斯 软件_监控神器-普罗米修斯Prometheus的安装

    搬砖党的福音:普罗米修斯-监控神器 功能: 在业务层用作埋点系统 Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端).我们可以通过客户 ...

  8. 普罗米修斯 mysql监控_Promethus(普罗米修斯)监控Mysql数据库

    Promethus(普罗米修斯)监控Mysql数据库 这个是基于上面环境搭建的,需要的可以访问方面连接查看. 监控远程MySQL 服务器 IP地址 Prometneus服务器 192.168.116. ...

  9. Linux 普罗米修斯 docker容器

    两台都要操作: 关闭防火墙: [root@localhost ~]# iptables -F [root@localhost ~]# iptables-save 启动dockers服务: [root@ ...

最新文章

  1. php curl 句柄 复用,PHP-curl multi批处理CPU负载过高的解决办法
  2. 【EOJ Monthly 2018.10 - A】oxx 的小姐姐们(模拟,水题,填充矩阵,输出格式有坑)
  3. Flask学习记录之Flask-SQLAlchemy
  4. RS错误RSV-VAL-0032之项目未在布局中引用的3种解决办法
  5. TYVJ P1083 分糖果 Label:bfs
  6. win7 64位运行不了服务器,G6-e标准包可以装在win7 64位系统上吗?现在提示不能登陆到服务器...
  7. 华为机试HJ108:求最小公倍数
  8. IntelliJ IDEA下使用JSTL标签库方法
  9. Linux中的Tomcat500异常,Linux处理Tomcat异常的方法
  10. 【java】随机分组:设计一个GUI程序,可以用来随机分组功能,如小组作业、球赛赛程
  11. 计算机系统操作中级工试题及答案,计算机系统操作中级工试题附答案.doc
  12. Unity3d学习笔记-Demo实现
  13. Java原始数据类型
  14. 积目服务器维护,搭建经济高效的制作网络服务器群试验平台
  15. VUE设置浏览器icon图标
  16. linux 垃圾桶命令,linux下的一些好用的命令行
  17. 完美支持--WIN11--Crack--LightningChart-10.3.2.2
  18. AB153x(检测洛达芯片) 专治华强北
  19. ASP.NET幼儿园连锁管理系统源码
  20. u盘魔术师给服务器装系统,小白也能学会的U盘魔术师重装系统教程

热门文章

  1. 胡须linux教程,一步步教你钩织hellokitty猫毛线拖鞋教程(儿童拖鞋)
  2. 鼠标滑轮滚动实现换页
  3. 专精特新“小巨人”企业申报条件和侧重点有哪些?
  4. SSML语音合成标记语言详解
  5. RX 7900XT和RX 7900XTX有什么区别 RX 7900XT和RX 7900XTX差距
  6. Trucksim横纵坡场景搭建
  7. Ubuntu18.1 中、英文输入法切换总结
  8. Excel中几个常用的函数
  9. 347-linux虚拟地址空间
  10. 学习技术领导力(一)