首页 > 其他分享 >Docker第四章:Dockerfile、微服务、网络连接、compose容器编排、容器监控

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

时间:2023-02-12 23:55:25浏览次数:34  
标签:容器 compose network jar 镜像 Docker docker

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<[email protected]>

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 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:一个开源的数据监控分析可视化平台,支持多数据源配置

标签:容器,compose,network,jar,镜像,Docker,docker
From: https://www.cnblogs.com/tianshu/p/17093572.html

相关文章

  • MAC 安装docker,下载镜像并压缩转移到LINUX服务器
    MAC安装docker前提-已经安装homebrew(如果未安装,可以打开终端,输入以下命令安装Homebrew)/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/i......
  • Docker的数据管理
    一、管理docker容器中数据管理Docker容器中数据主要有两种方式:数据卷(DataVolumes)和数据卷容器(DataVolumesContainers)。1、数据卷数据卷是一个供容器使用的特......
  • Solon2 开发之容器,五、Bean 扫描的三种方式
    1、启动时扫描packageorg.example.demo;publicclassDemoApp{publicstaticvoidmain(String[]args){////DemoApp.clas的作用,是提供一个......
  • Solon2 开发之容器,六、提取 Bean 的函数进行定制开发
    为什么需要提取Bean的函数?绝不是闲得淡疼。比如:控制器的@Mapping;再比如:Xxl-Job的@XxlJob。这些都是要提取Bean的函数并定制加工的。1、比如提取@XxlJob注解的函数,并注册......
  • Solon2 开发之容器,七、切面与函数环绕拦截
    想要环绕拦截一个Bean的函数。需要三个前置条件:通过注解做为“切点”,进行拦截(不能无缘无故给拦了吧?费性能)Bean的method是被代理的在Bean被扫描之前,完成环绕拦截......
  • Solon2 开发之容器,八、动态代理的本质
    在Java里动态代理,主要分:接口动态代理和类动态代理。因为它的代理类都是动态创建的,所以名字里会带上“动态”。官网的有些地方叫“代理”,也有些地方叫“动态代理”。都......
  • WPF学习笔记(窗体和常用容器的使用)
    WPF学习笔记(窗体和常用容器的使用)新手学习之路;望大佬们指点迷津目录WPF学习笔记(窗体和常用容器的使用)窗体(Window)常用属性:圆角无边框窗体设置及效果展示Grid基本属......
  • Docker-compose
    一、Docker-compose简介Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务......
  • Solon2 开发之容器,三、注入或手动获取 Bean
    1、如何注入Bean?先了解一下Bean生命周期的简化版:运行构建函数尝试字段注入(有时同步注入,没时订阅注入。不会有相互依赖而卡住的问题)@Init函数(是在容器初始化完成后才......
  • Solon2 开发之容器,四、注入依赖与初始化
    Solon强调有克制的注入+手动控制结合的模式。好处是,代码用料少、启动快。Bean的关键生命节点:节点说明1.Constructor(构造方法)不支持参数注入2.@In......