Docker第四章:Dockerfile、微服务、网络连接、compose容器编排、容器监控

Dockerfile

是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本、

 

执行流程

1:docker从基础镜像运行一个容器

2:执行一条指令并对容器作出修改

3:执行类似docker commit的操作提交一个新的镜像层

4:docker再基于刚提交的镜像运行一个新容器

5:执行dockerfile中的下一条指令直到所有指令都执行完成

 

保留字简介

FROM:基础镜像,当前镜像是基于哪个镜像的,指定一个已存在的镜像作为base,第一行必须是FROM

 

MAINTAINER:镜像维护者的姓名和邮箱

 

RUN:docker build时运行

shell格式——等同于在终端操作的shell命令,如RUN yum -y insatll vim

exec格式——RUN ["./test.php", "dev", "offline"]等价于RUN ./test.php dev offine

 

EXPOSE:当前容器对外暴露的端口

WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录

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

 

ENV:用来在构建镜像过程中设置环境变量,例如下

ENV MY_PATH /usr/mytest——定义

WORKDIR $MY_PATH——即WORKDIR /usr/mytest

 

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

COPY:类似ADD,拷贝文件和目录到镜像中 

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

 

CMD:docker run时运行,指定容器启动后要干的事情,语法与RUN相似,分shell与exec

注意点:Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

例图中57800e5b1cbf为tomcat镜像,被run后的/bin/bash参数所覆盖,因此导致服务启动失败

 

ENTRYPOINT:与CMD类似,但是ENTRYPOINT不会被docker run之后的命令覆盖,而且这些命令参数会被当作参数传给ENTRYPOINT指令指定的程序

 

dockerfile例子学习——配一个vim+ifconfig+jdk对应环境

1:docker pull docker pull centos:7.6.1810

2:下一个jdk版本——jdk-8u351-linux-x64.tar.gz

3:新建dockerfile文件

FROM centos:7.6.1810
MAINTAINER zyt<zyt@126.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-8u351-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
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

4:执行docker build -t centosjava8:1.5 .

5:docker run -it 镜像id——运行容器实例进行验证

  

Docker部署微服务

1:通过IDEA新建一个普通微服务模块——具体流程参考相应流程,内部对外端口设置为6060,将maven package后的包放到docker服务器中

 

2:新建Dockerfile

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER zzyy
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为zzyy_docker.jar
ADD helloworld-0.0.1-SNAPSHOT.jar zzyy_docker.jar
# 运行jar包
RUN bash -c 'touch /zzyy_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6060,

3:docker build -t zzyy_docker:1.6 .

4:docker run -p 6060:6060 ac285be59dde

5:登录对应IP:6060/对应路由

 

docker网络

Docker服务默认会创建一个docker0网桥(其中有一个docker0内部接口),该桥接网络的名称为docker0。它在内核层连通了其它的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker默认指定了docker0接口的IP和子网掩码,让主机和容器之间可以通过网桥相互通信。

 

docker network ls

 

bridge模式:使用--network bridge指定,默认使用docker0

 

host模式:使用--network host指定

 

container模式:使用--network container:NAME或者容器ID指定

 

none模式:使用--network none指定

 

docker自定义网络

1:docker network create zyt_network——新开一个终端,建一个network

2:docker run -d -p 8081:8080 --network zyt_network --name tomcat81 billygoo/tomcat8-jdk8;docker run -d -p 8082:8080 --network zyt_network --name tomcat82 billygoo/tomcat8-jdk8

3:docker exec -it tomcat81 bash;docker exec -it tomcat82 bash

4:在tomcat81与tomcat82中输入ip addr,获得以下两图

5:在tomcat1中ping 172.19.0.2与ping tomcat2都成功;反之在tomcat2中ping tomcat1也成功

 

Docker-Compose

是Docker官方的开源项目,负责实现对Docker容器集群的快速编排,新版本的Docker会自带Docker-Compose

 

配置常用字段

 

常用命令

 

Portainer(轻量级监控)

一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境

 

CIG容器重量级监控(CAdvisor+InfluxDB+Granfana)

CAdvisor:一个容器资源监控工具,包括容器的内存,CPU,网络IO,磁盘IO等监控,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟数据,而且只是针对单物理机

InfluxDB:时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor数据

Granfana:一个开源的数据监控分析可视化平台,支持多数据源配置

posted @ 2023-02-12 23:49  天叔  阅读(173)  评论(0编辑  收藏  举报