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无法获取相关数据)

浙公网安备 33010602011771号