Docker---数据持久--docker-file

Docker提供三种方式将数据从宿主机挂载到容器中:

• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。

• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。

• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用

tmpfs,同时避免写入容器可写层提高性能。  

docker volume ls //查看当前的卷

docker vloume create  卷名字

将宿主机的卷映射到容器目录中

使用 docker volume ls 查了创建的卷

 

我们知道创建的卷,还需要这个卷在宿主机那个目录。

我们可以使用 docker volume  inspect  卷的名字

 

 

docker run -d -v 卷名字:容器目录  镜像名字 

 docker  还可以免交互在容器里面执行命令 

docker  exec 容器ID   commd

指定宿主机目录或者文件,映射到容器中

docker run -d -v 宿主机目录或者文件:容器目录

ps :如果docker数据卷里面如果有数据的话,宿主机数据卷则会覆盖容器里面的目录

volume数据卷的是:如果你宿主机挂载目录是空的话,挂载到容器那个目录是有文件,则容器的是文件会映射到宿主机挂载的目录中。
反之如果数据卷中有数据,容器的目录则以宿主机的数据卷为准。(不灵活,你不可以指定目录)

-v 数据卷名称或者源目录:容器目标

bind mounts 需要注意点(也就是指定宿主机任务的路径和位置):(你可以指定目录,方便快捷。宿主机内容会覆盖容器里面的文件,如果宿主机映射的文件是空的,容器
的文件就是空的)
1、宿主机文件或者目录必须存在才能成功挂载
2、宿主机文件或者目录会覆盖容器中的内容

 

构建基础的docker-file 

指令             描述
FROM     构建新镜像是基于哪个镜像
LABEL     标签
RUN     构建镜像时运行的Shell命令
COPY     拷贝文件或目录到镜像中
ENV     设置环境变量
USER     为RUN、CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE     声明容器运行的服务端口
WORKDIR     为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录
ENTRYPOINT     运行容器时执行,如果有多个ENTRYPOINT指令,最后一个生效
VOLUME 映射目录 CMD 运行容器时执行,如果有多个CMD指令,最后一个生效

  

镜像分类

1、基础镜像:centos(YUM)、ubuntu(apt)、alpine(apk)

2、环境镜像:  php、jdk、python

3、项目镜像:打包好的可部署镜像

制作镜像:

1、选择一个符合线上操作系统基础镜像

2、用基础镜像创建一个容器,手动在容器里面部署你要部署的应用

3、确认启动应用前台运行命令

docker-file 文件格式

FROM :用于基础镜像

label 标签

RUN 执行shell 命令

cpoy :复制文件

expose:暴露端口

cmd :[ "nginx","-g","daemon off;"] //配置守护进程,前台启动命令

docker 复制文件用法

docker cp 宿主机文文件名   容器名:/容器目录

源码安装:

1、安装相关依赖包 ,gcc 、make

2、./configure

3、 make  // make -j 4 表示多线程去工作

4、make install  

构建nginx 镜像

nginx 相关依赖 :yum install -y gcc gcc-c++ make openssl-decel pcre-decel  iproute net-tools wget curl  //openssl 是https  ,后面两个都是正则匹配

编写Dockerfile技巧:

1、如果想镜像很小,可以选择alpine基础镜像

2、RUN 执行 shell 命令,尽可能写到一个run里面  使用 &&  \    

减少镜像层

3、清理部署遗留文件或者缓存

构建镜像命令 : docker build -t nginx:v1 (起一个镜像名字,已经版本号) -f dockerfile-文件名 .   //点 表示你需要引用文件的文件名

  -t 就是表示指定一个镜像名字

FROM centos:7
LABEL 
RUN yum install -y gcc gcc-c++ make openssl-decel pcre-decel  iproute net-tools wget curl && \
ls 
COPY 本地文件:容器目录
expose:8080 //暴露容器端口
CMD: ["xxxx"]  容器运行时的命令,也就是前台命令 

构建PHP镜像

 

1、PHP环境

2、PHP-FPM //动态解析

设置系统时区 

timedatectl set-timezone 'Asia/Shanghai' 

 

构建docker File 需要注意的事项

1、在使用tar解压的时候,最好加上文件路径。

 

 2、在dockerfile 里面所执行的命令,最好在容器里跑一遍确保没问题。

 

单台容器进行监控

cAdvisor

cadvisor是一个谷歌开发的容器监控工具。

我们可以容器化安装相关监控工具,我们只需要映射需要采集的相关目录,之后直接pull 拉取镜像、暴露端口就ok了

它相当于一个Agent,cadvisor 只采集不存储。

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest
  

动态展示容器内容 

 

Prometheus 

我们可以将cadvisor指标让promethes 收集;

 

docker run -d 
--name=prometheus  -p 9090:9090  
// -v  /root/prometheus/prometheus.yaml:/etc/prometheus/prometheus.yml \
prom/prometheus  

 

容器运行成功后,我们还需要修改

prometheus.yml 配置文件 
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['192.168.1.11:8080'] //这里修改cadvisor 的地址

  

 

 

Grafana

因为prometheus展示不太好,就是一些指标,所以我们可以结合Gragana来显示我们采集测数据

docker run -d 
--name=grafana  
-p 3000:3000 
grafana/grafana

  

  

首先我们需要创建数据源

 

选择prometheus,修改可以根据自己的需要做一下修改就好了。,最后点击savetest.

 

 

填写地址prometheus的地址

 

 

 接下来设置一个仪表板dashbord

我们可以自定义,也可以导入已有的模板,例如193 容器监控模板

 

 最后导入之后就能看的相关信息了。

 

 

 

 

总结:

1、编写dockerfile 其实很简单,就是在写你的dokcerfile之前先在你们容器里跑一遍你需要运行的命令。

2、在部署promethues的时候,要修改配置文件制定cadvisor地址

3、promethues主机必须要被监控端的主机的时区,时间必须保持一致,不然会出问题。(promethues无法获取相关数据)

 

posted @ 2020-04-02 10:39  菜菜920  阅读(215)  评论(0)    收藏  举报