docker笔记(二):镜像、容器数据卷

四、 docker镜像

4.1 镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件 所有的应用,直接打包docker镜像就可以直接跑起来

你可以创建自己的镜像,也可以只使用其他人创建并在Docker Hub中发布的镜像。要构建自己的镜像,需要创建一个Dockerfile,使用简单的语法定义创建和运行镜像所需的步骤。Dockerfile中的每一条指令都会在图像中创建一个层。当你更改Dockerfile并重新构建镜像时,只有那些已经更改的层才会重新构建。与其他虚拟化技术相比,这是镜像如此轻量级、小巧和快速的原因之一。

4.2 分层

所有docker镜像都起始于一个检查镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层

4.3 commit镜像

如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像

docker commit #提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG(版本)]

4.4 镜像发布

发布到DockerHub或其他仓库。步骤略。

4.5 镜像私有库

  1. 下载镜像Docker Registry:docker pull registry

  2. 运行私有库Registry,相当于本地有个私有Docker hub

    docker run -d -p 5000:5000 -v /sunxiao/myregistry/:/tmp/registry --privileged=true registry
  3. 案例演示创建一个新镜像,ubuntu安装ifconfig命令

    #用ubuntu镜像启动一个ubuntu容器
    docker run -it ubuntu
    #容器启动后依次执行
    apt-get update
    apt-get install net-tools
    #commit镜像
    docker commit -m="ifconfig add" -a="sunxiao" 容器id sxubuntu:1.2
  4. curl验证私服库上有什么镜像

    curl -XGET http://127.0.0.1:5000/v2/_catalog
  5. 将新镜像sxubuntu:1.2修改符合私服规范的Tag,指定该镜像属于私有仓库。

    #语法:docker tag <原始镜像ID或名称>:<版本号> <私有仓库地址>/<镜像名称>:<版本号>
    docker tag sxubuntu:1.2 192.168.122.1:5000/sxubuntu:1.2
  6. 修改配置文件使之支持http

    #打开配置文件
    vim /etc/docker/daemon.json
    #添加配置
    "insecure-registries":["192.168.122.1:5000"]
    #如果不生效,重启docker
    systemctl restart docker
    #重启Registry
  7. push推送到私服库

    docker push 192.168.122.1:5000/sxubuntu:1.2
  8. curl验证私服库上有什么镜像2

五、 容器数据卷

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。

为了能保存数据在docker中我们使用卷。

特点:

  • 数据卷可在容器之间共享或重用数据

  • 卷中的更改可以直接实时生效

  • 数据卷中的更改不会包含在镜像的更新中

  • 数据卷的生命周期一直持续到没有容器使用它为止:停止容器后再启动依旧有效

#方式一:直接使用命令挂载   -v
docker run -it --privileged=true -v 主机目录:容器内目录 镜像名
#容器内只读
docker run -it --privileged=true -v 主机目录:容器内目录:ro 镜像名
docker run -it -v /home/test_docker:/home centos /bin/bash
  • 拓展:匿名挂载和具名挂载

#-v 容器内路径   #匿名挂载
#-v 卷名:容器内路径    #具名挂载
#-v /宿主机路径::容器内路径   #指定路径挂载
​
#例 匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有volume的情况
docker volume ls
#具名挂载:通过 -v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
#查看这个卷
docker volume inspect jumming-nginx
​
#所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
#我们通过具名挂载可以方便的找到我们的一个卷,大部分情况使用具名挂载

5.1数据卷应用

  • 数据卷继承和共享

    1. 容器1完成与宿主机的映射,以ubuntu作为容器为例

      docker run -it --privileged=true -v /mydocker/u:/tmp/u --name u1 ubuntu
    2. 容器2继承容器1规则,例

      docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
    3. 通过1、2实现了容器1、2数据共享

相关推荐

  1. Docker容器数据

    2024-04-06 21:24:02       28 阅读
  2. Docker 容器数据

    2024-04-06 21:24:02       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 21:24:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 21:24:02       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 21:24:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 21:24:02       20 阅读

热门阅读

  1. 第十四届蓝桥杯省赛大学B组(C/C++)整数删除

    2024-04-06 21:24:02       21 阅读
  2. 抖音运营技巧2

    2024-04-06 21:24:02       24 阅读
  3. MyBatis plus 详解

    2024-04-06 21:24:02       56 阅读
  4. 谈谈Python中的正则表达式及其用法。

    2024-04-06 21:24:02       22 阅读
  5. 在MacOS上安装Homebrew:初学者指南

    2024-04-06 21:24:02       28 阅读
  6. js的some函数

    2024-04-06 21:24:02       21 阅读
  7. 【面经】3月29日 美团/美团平台/后端/一面/1h

    2024-04-06 21:24:02       19 阅读
  8. tomcat 知多少

    2024-04-06 21:24:02       18 阅读