Dockert--DockerFile-Docker网络-Docker-compose容器编排-portainer-GAdvisor监控收集+InfluxDB存储数据+Granfana展示图表

一:什么是DockerFile

  • DockerFile是用来构建Docker的文本文件,是由一条条构建镜像所需的指令参数构成的脚本
    在这里插入图片描述

二:DockerFile构建过程解析

  • 每条保留字指令时都必须为大写字母且后面要很一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像并对镜像进行提交

2.1:DockerFile的执行大致流程

  • docker从基础镜像运行一个容器
  • 执行一条指令并对容器进行修改
  • 执行类似于docker commit的操作提交一个新的镜像层
  • docker再基于刚提交的镜像运行一个容器
  • 执行dockerfile中的下一条指令直到所有指令都加载完毕
    在这里插入图片描述
    在这里插入图片描述

2.2:FROM

  • 基础镜像,当前的新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

2.3:MAINTAINER

  • 镜像维护者的姓名和邮箱地址

2.4:RUN

  • 容器构建时需要运行的命令
  • 两种格式:shell格式 exec格式
  • run是在docker build时运行

2.5:EXPOSE

  • 当前容器对外暴露的端口

2.6:WORKDIR

  • 指定容器创建后,终端默认登录的进来工作目录,一个落脚点

2.7:USER

  • 指定镜像以什么样的用户去执行,如果不指定,默认是root

2.7:ENV

  • 用来构建镜像过程中,设置环境变量

2.8:VOLUME

  • 容器卷,用于保存数据和持久化工作

2.9:ADD

  • 将宿主目录下的文件拷贝镜像且会自动处理URL和解压缩tar 压缩包

2.10:CMD

  • 指定容器启动后要干的事情
  • 可以有一个cmd命令,但只有最后一个会生效,cmd会被之前docker run之后的参数替换
  • CMD和RUN的区别
  • cmd是在docker run时运行
  • run 是在docker build时运行

2.10:ENTRYPOINT

  • 也是用来指定一个容器启动时要运行的命令
  • 类似于cmd命令但是ENTRYPOINT不会被docker run后面的命令覆盖,而这些命令行参数会被当做参数传递给ENTRYPOINT指令指定的程序
    在这里插入图片描述

三:自定义功能增强版centos7镜像

#下载
 docker pull centos
#运行
 docker run -it 5d0da3dc9764
 #里面vim  ifconfig  等等什么命令都没有,接下来用dockerfile来进行一个功能的增强
 # 创建文件夹
 mkdir myfile
-将java的安装包拷贝到目录下
#在当前目录
vim Dockerfile



#这边拉取了一个7的centos
FROM centos:7
MAINTAINER lxy<2050298183.com>
#落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH

#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u241-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_241
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 80

CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash



  • 升级版1.5个g
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三:虚悬镜像

构建或者删除的时候出现一些错误,会出现徐悬镜像

  • docker image ls -f dangling=true
    查看本地的徐悬镜像
  • docker image prune
  • 删除

四:Docker部署Springboot项目

  • 打成jar包,先本地跑一下,可以跑起来那ok
    在这里插入图片描述
  • 将jar包直接拖进来
    在这里插入图片描述
  • 编写dockerfile
  • vim Dockerfile
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER lxy
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD Workpase-1.0-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 8081


- 构建镜像
docker build -t zzyy_docker:1.6 .
- 查看构建的镜像
 docker images
- 启动
docker run -d -p 8081:8081 19b0ffd318f1
-查看
docker ps
  • 运行成功
    在这里插入图片描述

五:Docker网络

在这里插入图片描述
ifconfig 之后会产生一个虚拟的docker网桥

  • 查看docker网络
    docker network ls

  • 创建一个网络
    docker network create lxy_docker
    在这里插入图片描述

  • 删除网络
    docker network rm lxy_docker

  • 查看网络数据源
    docker network inspect bridge

4.1:Docker网络作用

  • 容器之间的互联通信和端口映射
  • 容器ip变动时候可以通过服务名直接网络通信而不受影响
    在这里插入图片描述
    a的dockermysql想访问b的dockermysql
    如果把地址写死了,docker重启一下他的ip地址会变更
    通过网络去调用服务名,随便重启,不受影响

在这里插入图片描述
在这里插入图片描述

4.2底层容器的变化

- 启动一个ubuntu
docker run -it --name u1 ubuntu  /bin/bash
- 在启动一个
docker run -it --name u2 ubuntu  /bin/bash
  • docker inspect u1
    在这里插入图片描述

  • docker inspect u1
    在这里插入图片描述
    bridge 是默认的桥接网络,人手一份,u1和u2的网络不一样

  • 将u2杀掉

  • docker rm -f u2

  • docker run -it --name u3 ubuntu /bin/bash
    在启动一个u3
    在这里插入图片描述

  • 发现u3还是和已经被被杀掉的u2一样

  • 我们的u2挂了,但是这个ip被u3复用了,内容就会有变更,所以很麻烦

  • 会发生的问题:docker容器内的ip是有可能发生变化的

4.3docker的bridge

在这里插入图片描述
名字是bridge
范围是local
网络驱动模式bridge

在这里插入图片描述
名字是host
范围是local
网络驱动模式host

在这里插入图片描述
名字是none
范围是local
网络驱动模式没有

  • 接下来创建一个
  • ocker network create docker_lxy

-
名字是docker_lxy
范围是local
网络驱动模式bridge (默认就是bridge)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

- 创建两个容器
docker run -d -p 8081:8080 --name tom1 tomcat:8.5
 docker run -d -p 8089:8080 --name tom2 tomcat:8.5

在这里插入图片描述

  • 查看ip 发现 100和101哪去了,说明了
  • docker0创建了一对虚拟接口一个是veth 一个是etho
  • veth是暴露在外面的
  • etho 是在容器内部访问ip adder就可以看到。这就是一个容器与宿主机通信的桥梁

4.3docker的host

  • 直接使用主机的ip,地址与外面的设备进行通信,不需要额外的NAT转换
    在这里插入图片描述
通过 host启动一个tomcat
docker run -d -p 8087:8080 --network host --name tom7 tomcat:8.5
  • 启动完毕之后会有警告,不推荐你这么做。
  • 为什么配置了-p但是还没有映射关系,因为host是直接通过宿主机映射过去的,所以不显示,在显示没有意义
    在这里插入图片描述
- 没有警告的启动
docker run -d -p --network host --name tom7 tomcat:8.5
- 查看tom7发下是空的ip,因为host启动的没有ip,是和主任同用的一个ip,所以是空

在这里插入图片描述

4.3docker的none

  • none就是没有网络配置(了解即可)

4.3docker的container

在这里插入图片描述

新建自定义网络

#创建网络
docker network create lxy_docker
#将两台tomcatt装入到我们新自定义的网络中
docker run -d -p 8081:8080 --network lxy_docker --name tomat81 tomcat:8.5
docker run -d -p 8082:8080 --network lxy_docker --name tomat82 tomcat:8.5

在这里插入图片描述
在这里插入图片描述

  • 在81里面ping 82完全可以ping通
    在这里插入图片描述

六:Docker-compose容器编排

  • 通俗来说 容器台多了你怎么管理
  • Docker-compose是docker官方提供的开源项目,负责实现对容器的快速编排
  • compose是Docker公司退出的一个工具软件,可以管理多个Docker容器组成的一个应用,你需要定义一个Yam格式的配置文件
  • docker-compose.yml
  • 然后只要一声令下就能启动和关闭这些容器
    在这里插入图片描述
    在这里插入图片描述
    下载地址
    API文档
#一次没成功多试几次
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker/docker-compose
 * sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose  若是github访问太慢,可以用daocloud下载
    * sudo chmod +x /usr/local/bin/docker-compose 添加可执行权限
    * sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose root用户无法使用 
    * docker-compose --version 查看版本

6.1:Docker-compose核心概念

  • 一文件 -->docker-compose.yml
  • 2要素–>服务(service)和工程(project)
    • 服务:一个个的容实例,比如订单微服务,库存微服务,mysql容器,nginx容器或者redid容器
    • 工程:由一组关联的应用程序组成的一个完整的业务单元,在docker-compost.yml上定义

6.2:Docker-compose使用的三个步骤

  • 编写dockerfile定义的各各微服务应用并构建出对应的镜像文件
  • 使用docker-compose.yml定义一个完整的业务单元,安排好整体应用中的各个容器服务
  • 最后执行docker-compose up命令,来启动并运行整个程序,完成一键部署上线

6.3 普通部署项目

#正常情况需要先将mysql启动
docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/log:/var/log/mysql -v/usr/local/mysql/data:/var/lib/mysql -v/usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123321 --name mysql mysql:5.7

#在启动redis
docker run -d -p 6379:6379  --privileged=true -v/usr/local/redis/redis.conf:/etc/redis/redis.conf -v/usr/local/redis/data:/data  redis:6.2 redis-server /etc/redis/redis.conf

#在把java项目跑起来
docker run -d -p 8081:8081 19b0ffd318f1

在这里插入图片描述

  • 一个springboot就得启动3个容器,如果是分布式项目,不得启动30几个java程序,直接就累死了

6.3 docker-compose部署项目

#创建yml文件

vim docker-compose.yml
#写入如下内容

version: "3"

services:
  microService:
    image: zzyy_docker:1.6
    container_name: ms01
    ports:
      - "8081:8081"
    volumes:
      - /usr/local/microServic:/data
    networks:
      - lxy
    depends_on:
      - redis
      - mysql

  redis:
    image: redis:6.2
    ports:
      - "6379:6379"
    volumes:
      - /usr/local/redis/redis.conf:/etc/redis/redis.conf
      - /usr/local/redis/data:/data
    networks:
      - lxy
    command: redis-server /etc/redis/redis.conf

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'db2021'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: '123321'
    ports:
       - "3306:3306"
    volumes:
       - /usr/local/mysql/data:/var/lib/mysql
       - /usr/local/mysql/conf/my.cnf:/etc/my.cnf
       - /usr/local/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - lxy
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

networks:
   lxy:




#查看配置文件是否写的对自我效验
docker-compose config -q

#启动命令
docker-compose up -d
  • 如何和spring项目联系呢,我在yml文件中定义了redis和mysql,我可以再springboot的ym文件

  • 比如 如下是我们的mysq连接我们镜像的docker地址

  • 可以将192.168.116:3306 替换为mysql,只要在docker-compose配置了的启动容器都可以这样配置,就不用担心ip变了,还得改源码了

  • url: jdbc:mysql://192.168.116:3306/xxxx?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&rewriteBatchedStatements=true&allowMultiQueries=true

  • 全部启动成功

  • 启动成功
    在这里插入图片描述

  • 脚本说明
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6.3 docker-compose常用命令

Compose常用命令
docker-compose -h # 查看帮助
docker-compose up # 启动所有docker-compose服务
docker-compose up -d # 启动所有docker-compose服务并后台运行
docker-compose down # 停止并删除容器、网络、卷、镜像。

docker-compose exec yml里面的服务id # 进入容器实例内部 docker-compose exec docker-compose.yml文件中写的服务id /bin/bash
docker-compose ps # 展示当前docker-compose编排过的运行的所有容器
docker-compose top # 展示当前docker-compose编排过的容器进程

docker-compose logs yml里面的服务id # 查看容器输出日志
dokcer-compose config # 检查配置
dokcer-compose config -q # 检查配置,有问题才有输出

docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务

七:docker轻量级可视化工具portainer

#安装
docker run -d -p 8000:8000 -p 9000:9000 --name portainer     --restart=always     -v /var/run/docker.sock:/var/run/docker.sock     -v portainer_data:/data     portainer/portainer
#查看
docker ps
第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000

在这里插入图片描述
在这里插入图片描述

7.1:portainer操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2:portainer安装nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.1:GAdvisor监控收集+InfluxDB存储数据+Granfana展示图表

docker stats
查看内存使用cpu啊等等很不方便
在这里插入图片描述

  • 资料不能一直实时,没有健康指标警戒线等等

在这里插入图片描述

7.1.1 GAdvisor

在这里插入图片描述

7.1.1 InfluxDB

在这里插入图片描述

7.1.3 Granfana

在这里插入图片描述

在这里插入图片描述

7.1.4 compose一键部署

#新建文件夹
 mkdir cig
cd cig
vim dokcer-compose.yml
#复制


version: '3.1'

volumes:
  grafana_data: {}

services:
 influxdb:
  image: tutum/influxdb:0.9
  restart: always
  environment:
    - PRE_CREATE_DB=cadvisor
  ports:
    - "8083:8083"
    - "8086:8086"
  volumes:
    - ./data/influxdb:/data

 cadvisor:
  image: google/cadvisor
  links:
    - influxdb:influxsrv
  command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086
  restart: always
  ports:
    - "8080:8080"
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:rw
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro

 grafana:
  user: "104"
  image: grafana/grafana
  user: "104"
  restart: always
  links:
    - influxdb:influxsrv
  ports:
    - "3000:3000"
  volumes:
    - grafana_data:/var/lib/grafana
  environment:
    - HTTP_USER=admin
    - HTTP_PASS=admin
    - INFLUXDB_HOST=influxsrv
    - INFLUXDB_PORT=8086
    - INFLUXDB_NAME=cadvisor
    - INFLUXDB_USER=root
    - INFLUXDB_PASS=root


#检查
dokcer-compose config -q 

#运行
dokcer-compose up

浏览器访问http://192.168.116.126:808/
(信息收集)
在这里插入图片描述
http://192.168.116.126:8083/

  • 数据存储
    在这里插入图片描述
    http://192.168.116.126:3000/
  • 数据展示
    在这里插入图片描述
  • 既然要展示肯定要先添加数据源
    设置-Datasoure选择数据库,选择InfluxDB

在这里插入图片描述
在这里插入图片描述

  • 创建一个新的面板
    点击+ 然后点击dashboard

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值