1. 联合文件系统

图片.png

2. Docker镜像加载原理

图片.png图片.png

3. 为什么Docker镜像要采用这种分层结构呢?

图片.png

4. 重点理解

Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫做“镜像层”。
图片.png

5. commit命令

docker commit命令可以提交容器副本使之成为一个新的镜像。

  1. docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]

6. 本地镜像发布到阿里云流程

图片.png

  1. # 登录
  2. docker login --username=xxy**** registry.cn-shenzhen.aliyuncs.com
  3. # 从registry中拉取镜像
  4. docker pull registry.cn-shenzhen.aliyuncs.com/myrepo/myubuntu:[镜像版本号]
  5. # 将镜像推送到registry
  6. docker login --username=xxy**** registry.cn-shenzhen.aliyuncs.com
  7. docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/myrepo/myubuntu:[镜像版本号]
  8. docker push registry.cn-shenzhen.aliyuncs.com/myrepo/myubuntu:[镜像版本号]

7. docker私有库Docker Registry

  1. # 拉取镜像
  2. docker pull registry
  3. # 运行私有库registry,相当于本地有个私有Docker hub
  4. docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/temp/registry --privileged=true rgistry
  5. # 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便宿主机联调
  6. # curl命令查看仓库有什么东西
  7. curl -XGET http://192.168.111.162:5000/v2/_catalog
  8. # 修改镜像为符合私服规范的tag
  9. docker tag 镜像:Tag Host:Port/Repository:Tag
  10. # 修改docker配置文件,取消docker不允许http推送的配置,然后重启docker使之生效
  11. vim /etc/docker/daemon.json
  12. {
  13. "insecure-registries": ["192.168.111.162:5000"]
  14. }
  15. systemctl restart docker
  16. systemctl status docker
  17. # 重启docker registry
  18. docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/temp/registry --privileged=true rgistry
  19. # 推送到镜像私服仓库
  20. docker push 192.168.111.167:5000/zzyyubuntu:1.2
  21. # 使用curl验证一下仓库中有什么
  22. # 使用docker pull拉取镜像

8. 容器数据卷

图片.png图片.png图片.png

  1. # 如何运行一个带有容器卷存储功能的容器实例
  2. docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

图片.png

  1. # 查看容器卷是否挂载成功,在出来的结果的Mounts下
  2. docker inspect 容器id
  1. # 容器卷ro和rw读写规则,默认不写就是rw
  2. docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
  3. # 限制容器内只读
  4. docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
  1. # 容器2继承容器1的卷规则
  2. docker run -it --privileged=true --volumes-from 父类 --name=u2 ubuntu
  3. docker run -it --privileged=true --volumes-from u1 --name=u2 ubuntu