本地镜像的发布&容器数据卷&Dockerfile &虚悬镜像 &docker network

本地镜像发布到阿里云

镜像云发布流程

 

镜像生成方法

  1. 容器commit提交
  2. 云服务拉取
  3. Dockerfile

容器数据卷

卷就是一个目录或者文件 存在于一个或多个容器中 由docker挂载到容器 但不属于联合文件系统 因此能够绕过union file system 提供一些用于持续存储或共享数据的特性

卷的设计目的

数据的持久化 完全独立于容器的生存周期因此docker不会在容器删除时 删除其挂载的数据卷

容器卷是什么

有点类似于redis里的rdb和aof文件 将docker容器内的数据保存进宿主机的磁盘中 运行一个带有容器卷存储功能的容器实例

容器数据卷可以干嘛

将运用与运行的环境打包成镜像 run后形成容器实例运行 但是我们对数据的要求希望是持久化的 docker容器产生的数据如果不备份那么当容器实例删除后,容器内的数据自然会删除 为了能保存数据在docker中我们使用卷

特点

  1. 数据卷可以在容器之间共享或者重用数据
  2. 卷中的更改可以直接实时生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

容器卷与主机互通互连

宿主机 容器之间映射添加容器卷

直接命令添加

  1. docker run -it --privileged=true -v /宿主机绝对路径容器内目录 镜像名(--name u ubuntu)
  2. docker修改 主机同步获得  主机修改 docker同步获得   docker容器停止 主机修改 docker容器重启看数据是否会同步成功同步

读写规则映射添加说明

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名 (默认是rw)

当然有时候的需求是只读

容器实例内部被限制 只能读取不能写

docker -run -it --privileged=true -v /宿主机绝对路径目录:容器内目录 :ro 镜像名

卷的继承和共享

容器1完成与宿主机的映射

容器中创建文件会同步更新到主机中

容器2继承容器1的卷规则

docker run -it --privileged=true --volumes-from u1(父类) --name u2 ubuntu

实现主机共享 容器数据的相互传递

父类容器u1暂停退出 子类容器会退出吗

继承规则 但仍然独立 父类暂停子类不会暂停

u1恢复 数据会有嘛? 仍然会有

 docker下常规软件的安装

tomcat(成功后,访问页面可能是404 ???

解决办法可以检查防火墙或者映射端口 删除webapps 这个目录 将webapps.dist 改为webapps就可以)

mysql

redis

软件跑在容器引擎上

总体步骤

搜索镜像docker search imagename 

拉取镜像

查看镜像

启动镜像服务端口映射

停止容器

移除容器

Dockerfile

  1. 是什么用来构建docker镜像的文本文件 是用一条条构建镜像的指令和参数构成的脚本

本镜像需要一次添加功能的需求

独立于docker 直接构建一个新的镜像功能更强大

构建三部曲

编写Dockerfile文件----->docker bulid构建镜像----->docker run 镜像运行容器实例

 

  1. Dockerfile的构建过程
  1. Dockerfile基础知识

保留字====关键字 必须为大写 且至少跟随一个参数

 

docker执行Dockerfile大致流程:

 

dockerfile(开发)是原材料                      docker镜像(交付)是软件的交付品 

docker容器(部署运维)是软件镜像的运行态

 

Dockerfile:定义了进程所需要的一切东西 包括执行代码或者是文件,环境变量,依赖包,运行时环境等

docker镜像:使用dockerfile定义一个文件之后 dokcer build会产生一个docker镜像 当运行docker镜像时就会真正的提供服务

docker容器 是直接提供服务的

Dockerfile保留字指令

 

虚悬镜像

在创建或者删除的时候 出现错误 导致 仓库名和标签名都是<none>的镜像

查看虚悬镜像命令:docker image ls -f dangling=true

虚悬镜像:本身就是一个错误的镜像并且还会占用空间,没有任何价值,查到虚悬镜像就可以删除掉  ======>     docker image prune

1.编写Dockerfile 文件

2.构建镜像docker build  -t imagename:tag .

3.运行微服务一般后台运行docker run -d -p port imageid

docker的机制一般是运行失败后若需要关闭防火墙:

关闭后需要重启一下docker systemctl restart docker

网页测试主机IP➕对应端口 

docker网络network

docker 不启动默认网络的状况:ens33   lo  virbr0三种网络

docker启动网络的状况  增加了名为docker0的虚拟网桥

 

查看docker网络模式命令

docker network ls查看网络(安装完docker后会默认创建三大网络模式

主要使用的网络模式是 bridge

 

1.docker network 相关命令

prune:删除所有无效或者不再用的网络

创建一个网络默认是网桥模式

 

2.docker network 能干些什么

1.可以做  容器之间的互联和通信以及端口的映射

2.容器IP变动容器重启导致容器IP变动 可以调用服务名可以通过服务名直接进行网络通信并且不会受到影响可以不用写死IP 当然 也有些特殊的会用特定地址的IP供特定服务使用 服务名IP 类似于键值对 可以直接调用key就OK

docker网络管理和容器调用之间的规划

  1. 网络模式

bridge每一个容器都会被分配  host容器的网卡IP等都共用于宿主机

 

四种模式:

 

  1. 容器实例内默认网络IP的生产规则

(因为底层网络会变动docker容器内部的IP是有可能发生改变的 所以我们需要通过网络服务规划好自己的服务

bridge创建后默认为桥接

docker 服务会默认创建一个docker0网桥  (上边有一个docker0内部接口

桥接网络名为docker0  内核层连通了其他的物理或者虚拟网卡 将所有容器和本地主机都放到同一个物理网络   docker默认指定了docker0接口的IP和子网掩码  主机和容器之间可以通过网桥相互通信

EG:

查看bridge网络的详细信息并通过grep获取名称项

 

ifconfig |grep docker

 

docker使用Linux桥接 在宿主机虚拟一个docker容器网桥(docker0) docker启动一个容器会根据docker网桥的网段分配给容器一个IP地址 称为container-IP同时docker网桥是每个容器的默认网关 因为在同一宿主机内的容器都接入同一个网桥 这样的话 容器就能够通过容器的container-IP进行通信

docker run的时候 没有指定network的话默认使用网桥模式是bridge 在宿主机ifconfig 就可以看到docker0和自己的create的网络

整个宿主机的网桥模式都是docker0 就是类似于一个交换机有一堆接口每个接口叫veth 在本地主机和容器内分别创建一个虚拟接口 并且让他们连通这样一对接口叫做veth pair)

每个容器实例内部也有一块网卡 每个接口叫eth0

docker0上边的每个veth匹配某个容器实例内部的eth0 两两配对 一一匹配

将宿主机上的所有容器 都连接到这个内部网络上 两个容器处在同一个网络下 会从这个网关下给拿到分配的IP 此时的两个容器网络互通

host是什么

直接使用宿主机的IP地址和外界进行通信 不需要额外进行nat转换

容器不会获得一个独立的network namespace 而是和宿主机共用一个network namespace  容器不会虚拟出自己的网卡而是使用宿主机的IP和端口 不会有自己的网关啥的

 

none禁用网络功能 只有lo标识就是 127.0.0.1 表示本地回环

none模式下 并不会为docker容器进行任何网络配置 也就是说  docker容器没有网卡 IP,路由等信息 只有一个lo 需要我们自己为docker 容器添加网卡配置IP等

(container)

新建的容器和一个已经存在的容器共享一个网络IP配置而不与宿主机进行共享 新创建的容器 不会创建自己的网卡 配置自己的IP 而是和一个指定的容器共享自己的IP端口范围等 同样两个容器除了网络方面 其他的入文件系统 进程列表等还是隔离的

!!!注意只共享网络

 

目录

镜像云发布流程:

容器数据卷:

Dockerfile

虚悬镜像

docker网络(network)

查看docker网络模式命令:

2.docker network 能干些什么?

网络模式

(bridge)创建后默认为桥接

(host)是什么?

(none)禁用网络功能 只有lo标识:就是 127.0.0.1 表示本地回环

(container)

自定义网络:


  1. 没有使用自定义网络之前:

将网络的IP地址定义好 可以ping通 但是容器只要变化 内部的IP也会变这个时候ping服务名也是ping不通的

 

(不能将IP写死 只能用服务名去ping 所以我们要将服务名写死,就可以ping通)

自定义网络本身就维护好了主机名和IP的关系 IP和域名都能通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王盐盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值