Docker镜像阿里云的上传拉取-私服的搭建-容器

一:Docker镜像

  • 镜像:
  • 是一种轻量级的。可独立执行的软件包,他包含某个软件运行的所需所有的内容,我们把应用程序和配置依赖打包形成一个可交付的运行环境(包括代码,运行时所需要的库,环境变量和配置文件等),这个打包好的运行环境就是image镜像文件

1.1联合文件系统(UnionFS)

  • UnionFS(联合文件系统):是一种分层,轻量级并且高性能的文件,他支持对文件系统的修改为一次提交来一层层的叠加,同时可以将不同的目录挂载到同一个虚拟文件系统下。Union文件系统是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种的具体应用镜像
  • 特性:一次性同时加载多个系统文件,但从外面看来,只能加载一个文件系统,联合加载会把各层文件系统叠加,这样最终的文件系统还会包含所有底层的文件和目录

1.2Docker镜像加载原理

  • docker的文件由一层层的文件系统组成,这种顶级的文件系统UnionFS
  • bootfs主要包含bootloader和kenrel,bootloader主要是引导加载kernel,Linux刚启动会加载bootfs文件系统,在docker镜像的最底层是引导文件系统,bootfs。这一层与我们典型的Linux/Unix的系统是一样的,包含boot加载器和内核,当boot加载完完成之后整个内核就在内存中了,此时内存的使用权已经由bootfs转交给内核,此时系统会卸载boots
  • rootfs,在bootfs之上,包含的就是典型的linux系统中的/dev/proc/bin/etc等标准目录和文件,rootfs就是各种不同操作系统的发行版,比如ubuntu,centos等
    在这里插入图片描述
  • 平时我们安装ubuntu要好几个g,在docker只要72.8MB
  • 对于精简版,rootfs很小只需要包括最基本的命令,工具和程序就行了,因为底层用host的kernel,自己只需要提供rootfs就行了由此可见对于不同的linux发行版,bootfs基本上是一致的,roootfs会有所差别因此不同的发新版可以共用bootfs
  • 总结:用不到的非核心的非必要的统统不会加载,只要最核心的linux内核,vim等等命令都没有

1.3Docker的分层结构

  • 分层结构最大的一个好处就是共享资源,就是为了复用

  • 比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保留一份base镜像

  • 同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享

  • PS:docker的镜像层是只读的,只有容器层是可写的,当容器启动的时候,一个可写层被加载到镜像的顶部,这一层通常被称"容器层",“容器层之下的都是镜像层”
    在这里插入图片描述

1.4 Docker commit命令

  • 提交容器副本,使之称为一个新的镜像
  • 演示ubuntu安装vim命令
  • 1)从hub上下载ubuntu到本地并成功运行
  • 2)原始的ubuntu是不带着vim命令的
  • 3)安装vim
  • 3.1)apt-get update
  • 3.2)apt-get -y install vim
    在这里插入图片描述
  • 再开一个窗口
    在这里插入图片描述
    我们想将刚才添加的vim的ubuntu给添加到我们的镜像中
公式: docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
 例:docker commit -m="vim cmd add" -a="lxy" 51a153e11f69  lxy/ubuntu:1.5

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

1.5本地镜像发布到阿里云

在这里插入图片描述
阿里云地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 创建命名空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 创建本地仓库
    在这里插入图片描述
  • 开始推送镜像文件
    在这里插入图片描述
    1. docker login --username=你的名字 registry.cn-hangzhou.aliyuncs.com
      在这里插入图片描述
  • 2.将要推送的版本号和id设置好
  • docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lxybj/myubuntu:[镜像版本号]
    在这里插入图片描述
  • 3.进行push 操作
  • docker push registry.cn-hangzhou.aliyuncs.com/lxybj/myubuntu:[镜像版本号]
    在这里插入图片描述
  • 上传成功
    在这里插入图片描述

1.6拉取阿里云的镜像

在这里插入图片描述

 docker pull registry.cn-hangzhou.aliyuncs.com/lxybj/myubuntu:[镜像版本号]

在这里插入图片描述

  • 拉取成功
    在这里插入图片描述

1.7搭建私服仓库

  • docker pull registry

在这里插入图片描述

  • 运行私有库Registry相当于本地有个私有的Docker hub
运行命令:
mkdir  /usr/local/docker
docker run -d -p 5000:5000 -v /usr/local/docker/:/tmp/registry --privileged=true registry

大致意思:后台运行,暴露端口5000

默认情况下,仓库被创建在容器的/var/lib/registry的目录下,建议自行用容器卷映射方便联调
在这里插入图片描述

1.7.1给原生ubuntu安装ifconfig命令

测试给原生ubuntu安装ifconfig命令

# 打开buntu
docker run -it ubuntu /bin/bash
#输入ifconfig 发现没有这个命令
#更新ubuntu环境
 apt-get update
 apt-get install net-tools

在这里插入图片描述

1.7.2.将容器生成镜像文件

#再开一个窗口
公式: docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
 docker commit -m="ifconfig cmd add" -a="lxy" b447a73d7b8f  lxy/ubuntu:1.6

在这里插入图片描述

1.7.3cur验证私服库上有什么镜像

curl -XGET http://本机ip:运行私库对外暴露的端口/v2/_catalog
例:
curl -XGET http://192.168.116.126:5000/v2/_catalog
  • 里面是没有数据的
    在这里插入图片描述

1.7.3将镜像设置苏荷私服库的规范

 docker tag 镜像名字:镜像的TAG 本机ip:暴露端口/名称:版本
 例:
 docker tag lxy/ubuntu:1.6 192.168.116.126:5000/lxyububtu:1.6

在这里插入图片描述

1.7.3修改配置文件使之支持http

  • docke默认不允许http的方式推送镜像,通过配置来解决,如果不生效建议重启
  • vim /etc/docker/daemon.json
#第一个是使用阿里云加速器
#第二个是取消默认不允许http推送
#配置自己的主机ip+私库对外暴露的端口
{
  "registry-mirrors": ["https://2enjiwe3.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.116.126:5000"]
}

#重启
systemctl restart docker 
# 再次运行
docker run -d -p 5000:5000 -v /usr/local/docker/:/tmp/registry --privileged=true registry

1.7.4上传

在这里插入图片描述

  • push数据
  • docker push 192.168.116.126:5000/lxyububtu:1.6

1.7.5拉取

  • 删除上传之前的数据

在这里插入图片描述

docker pull 本机host:端口/镜像名字:版本号
例:
docker pull 192.168.116.126:5000/lxyububtu:1.6

在这里插入图片描述

  • 运行,验证,成功
    在这里插入图片描述

1.8容器卷

  • Docker挂载主机目录访问,如果出现cannot open directory…permission denid
  • 解决办法:在挂载目录后多加一个- - privileged=true参数即可
  • 如果是cenos7安全模块会比系统版本加强,不安全的会先禁止,所以目录挂载的情况会被认为不安全的行为,在seLinux里面挂载目录被禁掉了,如果要开启一般使用- - privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限
    在这里插入图片描述
  • 上面启动私有仓库的时候
  • docker run -d -p 5000:5000 -v /usr/local/docker/:/tmp/registry --privileged=true registry
  • docker后台运行registry通过-p映射出5000的端口, -v是宿主与容器的映射,就是一种数据持久化的方式
  • 有点类似于redis里面的aof和rdb文件
  • 容器卷设计的目的就是用于数据的持久化,完全独立于容器的生命周期,因此docker不会在容器的删除时,删除其挂载的数据

1.8.1宿主机和容器的数据备份

docker run -it --privileged=true -v/宿主机的绝对路径:/容器目录   镜像名
例:
 docker run -it --privileged=true -v/usr/local/ubuntu:/usr/local/ubuntu --name u1   ubuntu
作用:
将ubuntu的/usr/local/ubuntu  目录,映射到本机的/usr/local/ubuntu

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

  • 在ubuntu的文件,成功映射到了主机
    在这里插入图片描述
    在这里插入图片描述
  • 在主机创建的文件也同时会映射进ubuntu的容器中

1.8.2 查看容器是否挂载

 docker inspect 容器id
 例:
 docker inspect 8103e67e0762

在这里插入图片描述

1.8.3 容器挂掉数据是否还能同步

#将容器停止
# 在/usr/local/ubuntu下新建
touch as.txt
#此时我们的容器是停止状态,开启容器
 docker start 8103e67e0762 
#进入交互
docker exec -it   8103e67e0762  /bin/bash
cd /usr/local/ubuntu/

在这里插入图片描述

  • 发现数据存在
  • 1.主机修改容器同步
  • 2.容器修改主机同步
  • 3.容器关闭,主机同步

1.8.3 容器卷的读写规则

docker run -it --privileged=true -v/宿主机的绝对路径:/容器目录   镜像名
#默认是
docker run -it --privileged=true -v/宿主机的绝对路径:/容器目录:rw   镜像名
  • 默认是可读,可写的
  • 限制容器实例内部只能读不能写
docker run -it --privileged=true -v/宿主机的绝对路径:/容器目录:ro   镜像名
例:
 docker run -it --privileged=true -v/usr/local/ubuntu:/usr/local/ubuntu:ro --name u1    ubuntu
  • 无法创建文件,但是可以读取主机传递来的文件
    在这里插入图片描述

1.8.3 容器卷的继承

- 先关联一个ubuntu
 docker run -it --privileged=true -v/usr/local/ubuntu:/usr/local/ubuntu --name u1  ubuntu
# 查看诗句是否成功映射
ll /usr/local/ubuntu/
#与容器映射
docker run -it --privileged=true --volumes-from 父容器名字或id--name u2  ubuntu

例:
docker run -it --privileged=true --volumes-from 41c4d9ca643a  --name u2  ubuntu

  • u2可以查到u1的数据
    在这里插入图片描述
  • 在u2创建的文件在u1和主机上都会有 显示
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值