Docker容器技术–基础篇02
Docker容器数据卷
什么是数据卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性
容器与宿主机是隔离状态,在容器删除时其内部的所有数据都会删除,如果想要将容器内的数据导出到宿主机上,使用复制命令可以做到,但会非常麻烦。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
数据卷的特点
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接实时生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
数据卷的使用
- 直接命令添加
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名 -v:挂载数据卷 --privileged=true:扩大容器的权限,以解决挂载目录没有权限的问题,使用该参数后,容器内的root拥有真正的root权限
- 读写规则映射添加说明
- 默认为读写:rw
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
- 只读:ro
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
- 卷的继承和共享
- 首先容器1完成和宿主机的映射
docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
- 然后容器2继承容器1的卷规则
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
本地镜像发布
Docker支持将本地镜像发布到公有库或私有库,常见的公有库有阿里云等,私有库用于使用公有库不方便、涉及机密信息的场景。
本地镜像发布到阿里云
- 首先通过commit命令或者Dockerfile方法创建新的镜像
docker commit [options] 容器名 [REPOSITORY:[:TAG]]
- 将本地镜像推送到阿里云
- 选择控制台,进入容器镜像服务
- 选择个人实例
- 命名空间
- 仓库名称
- 进入管理界面获得脚本
- 根据以上脚本将镜像推送到阿里云
- 将阿里云上的镜像下载到本地
docker pull registry.cn-hangzhou.aliyuncs.com/xxx/myubuntu:1.1
本地镜像发布到私有库
有些情况下,使用Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,因此需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库
- 下载镜像Docker Registry
docker pull registry
- 运行私有库
docker run -d -p 5000:5000 -v /dockerregistry/myregistry/:/tmp/registry --privileged=true registry 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调
- 验证私有库上有哪些镜像
curl -XGET http://192.168.1.3:5000/v2/_catalog
- 修改配置文件以支持http
docker默认不允许http方式推送镜像,因此我们通过配置选项来取消该限制,修改后可重启dockervim命令新增如下内容:vim /etc/docker/daemon.json { "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"], "insecure-registries": ["192.168.111.162:5000"] } 注意:两个配置中间有个逗号!!!
- 将镜像推送到私有库
docker push 192.168.1.3:5000/ubuntu:1.2
- 再次验证私有库上有哪些镜像
curl -XGET http://192.168.1.3:5000/v2/_catalog
- pull到本地运行
docker pull 192.168.1.3:5000/ubuntu:1.2