Docker核心

Docker镜像

1.概述

  • 镜像是轻量级、可执行的独立软件包
  • 打包软件运行环境与基于运行环境开发的软件
  • 包含运行某个软件所需要的所有内容(代码+运行时的依赖+库+环境变量+配置文件)

2.联合文件系统UnionFS

  • 支持文件系统的修改作为一次提交来层层叠加,同时可将不同目录挂载到统一虚拟文件系统下
  • 文件系统是Docker镜像的基础,基于基础镜像(没有父镜像)可通过分层来继承

3.镜像加载原理

  • 镜像由一层层文件系统组成
    在这里插入图片描述

4.分层理解

  • pull镜像时发现是一层一层在下载
    在这里插入图片描述
  • 通过docker image inspect redis:latest查看
    在这里插入图片描述
  • Docker镜像都始于一个基础镜像层,修改或增加内容时,会在当前镜像层之上创建新的镜像层
    在这里插入图片描述
  • 在添加额外镜像层的同时,镜像始终保持当前所有镜像层的组合
    在这里插入图片描述
  • pull的镜像层不能改变,容器启动时加载新的可写层到镜像顶部成容器层
    在这里插入图片描述

5.发布镜像命令

  • docker commit
docker commit -m="描述信息" -a="作者" 容器ID 目标镜像名:[版本]

数据卷容器

1.引入

  • docker将数据和环境打包成镜像
  • 但产生的数据存哪里呢?
  • 若数据存于容器中,但容器容易被删除,造成数据丢失
  • 提出新需求数据持久化,此时就出现卷!
  • 卷可理解为docker产生的数据自动同步到本地,就是目录挂载,将容器目录挂载到Linux上
  • 卷是容器的持久化和同步操作!容器间也可以数据共享

2.使用

  • 直接用命令挂载
    在这里插入图片描述
  • DockerFile挂载,下面介绍

3.优点

  • 挂载后修改本地,容器会自动同步

4.练习mysql数据卷

  • 搜索mysql镜像
    在这里插入图片描述
  • 拉取mysql的镜像
    在这里插入图片描述
  • 查看mysql镜像是否下载好
    在这里插入图片描述
  • 利用镜像创建mysql的容器
    在这里插入图片描述
  • 从本地测试连接
    在这里插入图片描述
  • 删除容器后,本地数据任然存在

5.具名和匿名挂载

在这里插入图片描述

  • 区分
    在这里插入图片描述
  • 扩展
    在这里插入图片描述

6.实现容器间数据同步

在这里插入图片描述

  • 启动docker01
    在这里插入图片描述
  • 启动docker02
    在这里插入图片描述
  • 在docker01中创建文件
    在这里插入图片描述
  • 在docker02中查看
    在这里插入图片描述
  • docker03同样可以继承父容器实现数据共享
  • 删除docker01后,文件任然存在
    在这里插入图片描述

DockerFile

1.概述

  • DockerFile用来构建Docker镜像的文件的命令参数脚本
  • 每个指令都必须大写
  • 从上到下的执行顺序
  • 每个命令都会创建提交一个新的镜像层
  • #表示注解

2.命令

在这里插入图片描述

3.实战

  • 编写DockerFile文件
    在这里插入图片描述
  • 运行DockerFile文件构建镜像
    在这里插入图片描述
  • 测试运行

4.了解其他镜像

在这里插入图片描述

发布镜像

1.发布到DockerHub

  • 注册账号 https://hub.docker.com/
  • 登录docker
    在这里插入图片描述
  • 提交镜像
    在这里插入图片描述

2.发布到阿里云

  • 登录阿里云,找到容器镜像服务在这里插入图片描述
  • 创建命名空间
    在这里插入图片描述
  • 创建容器镜像
    在这里插入图片描述
  • 阿里有操作指南
    在这里插入图片描述

流程总结

在这里插入图片描述

Docker网络

1.Docker0理解

  • 主机 ip addr
    在这里插入图片描述
  • docker ip addr
    在这里插入图片描述
  • 再次 ip addr
    在这里插入图片描述
  • 再启动一个容器
    在这里插入图片描述
  • ping两个容器
    在这里插入图片描述
  • 总结网络模型
    在这里插入图片描述
  • 测试
    在这里插入图片描述
  • docker0不支持自定义互连

2.link

  • 直接通过容器名无法ping
    在这里插入图片描述
  • link后可以解决
    在这里插入图片描述
  • 但是反过来不行
    在这里插入图片描述
  • 看容器hosts文件配置
    在这里插入图片描述
  • 此方式太笨,不支持双向绑定

3.网络模式

  • bridge:桥接(默认,推荐)
  • none:不匹配网络
  • host:与宿主机共享网络
  • container:容器内网络互连(局限大)
  • 桥接往下看

桥接模式bridge

1.概述

  • 启动docker时(不另外配置)自动创建默认bridge网络,新建的容器都会自动连接这个网络

2.作用

  • 隔离各个容器,使每个容器的端口号都是隔离的,防止容器与宿主机,容器与容器间发生端口占用的情况
  • 桥接网络用于同一主机上容器间相互通信(连接到同一网桥的容器可以相互通信)

3.常用命令

  • docker network ls:查看所有网络
  • docker network create -d bridge 网络名:创建bridge网络
  • docker network inspect 网络名:查看网络详情
  • docker network remove 网络名:删除网络

4.两个容器通过网桥互连

  • 查看镜像
    在这里插入图片描述
  • 创建两个mysql容器
docker run -p 3308:3306 --name ycmysql8 -e MYSQL_ROOT_PASSWORD=a -d mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
-----------------------------------------------------------
docker run -p 3310:3306 --name testmysql -e MYSQL_ROOT_PASSWORD=a -d mysql:8 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  • 查看容器是否启动,未启动先启动
    在这里插入图片描述
  • 创建网桥
docker network create -d bridge  ycnetwork
  • 查看网桥是否创建
    在这里插入图片描述
  • 容器与网桥建立连接
docker network connect ycnetwork ycmysql8
docker network connect ycnetwork testmysql
  • 查看网络详情,发现两容器连接到同一网络下
    在这里插入图片描述
  • 进入容器,远程登录ycmysql8 ,查看ycmysql8中创建的库,可看到则成功
docker exec -it testmysql /bin/bash
mysql -h 172.20.0.3  -uroot -pa
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值