## 第二章:掌握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. Udacity机器人软件工程师课程笔记(二十一) - 对点云进行集群可视化 - 聚类的分割 - K-means|K均值聚类, DBSCAN算法
  2. Altium Designer 规则设置Advance(Query)的使用
  3. [ASP.net]TreeView(1)(一次性递归所有节点)
  4. 抽象类的实际应用--模版设计
  5. 使用PropertyPlaceholderConfigurer读取属性文件
  6. 笔记本电脑如何保养_嘉兴专业笔记本电脑喷漆加工厂价格实惠
  7. 使用Tab Bar切换视图
  8. C语言中简单的题目,C语言的一些简单题目,没有答案,哪位大神帮忙做一下!!!...
  9. Go Elasticsearch 查询快速入门
  10. 15. POSIX 线程
  11. 大数据科学相关岗位,我们需要具备哪些数学基础?
  12. word三线表标题两条线之间如何出现空白间隔(论文必备)
  13. 计算机科学与技术学科评估 第五轮,【学科评估】解读第五轮学科各学科评估变化(上)...
  14. android手机蓝牙连接扫码枪,android 扫码枪解惑
  15. linux用cat建文件,如何使用Linux cat命令
  16. CKeditor 插件
  17. “真智能”黑马杀出,智能家居的下一战要攻破场景化?
  18. 【论文笔记】Weakly Supervised Discriminative Feature Learning with State Information for Person ...
  19. 初探 spring data(一)--- spring data 概述
  20. GAN生成对抗网络综述

热门文章

  1. 首届中国智慧交通大会上,5000万用户的“乘车码”成了主角
  2. C# 使用反射调用方法_MethodInfo.Invoke方法
  3. 适合中小企业的知识库软件有哪些?
  4. php读写excel类,支持多工作簿和自定义样式
  5. extremedb--calc
  6. 苹果为什么这么红?——美国之行总结短评之一
  7. SSH Tunnels SOCKS 4/5
  8. Mac不使用时关机、睡眠、一直开机的利与弊
  9. Excel无法编辑单元格,如何撤销工作表或工作簿密码
  10. 计算机毕业设计ssm公交电子站牌管理系统软件9430l系统+程序+源码+lw+远程部署