分层结构最大的一个好处就是共享资源,就是为了复用
比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保留一份base镜像
同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享
PS:docker的镜像层是只读的,只有容器层是可写的,当容器启动的时候,一个可写层被加载到镜像的顶部,这一层通常被称"容器层",“容器层之下的都是镜像层”
公式: docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
例:docker commit -m="vim cmd add" -a="lxy" 51a153e11f69 lxy/ubuntu:1.5
docker pull registry.cn-hangzhou.aliyuncs.com/lxybj/myubuntu:[镜像版本号]
运行命令:
mkdir /usr/local/docker
docker run -d -p 5000:5000 -v /usr/local/docker/:/tmp/registry --privileged=true registry
大致意思:后台运行,暴露端口5000
默认情况下,仓库被创建在容器的/var/lib/registry的目录下,建议自行用容器卷映射方便联调
测试给原生ubuntu安装ifconfig命令
# 打开buntu
docker run -it ubuntu /bin/bash
#输入ifconfig 发现没有这个命令
#更新ubuntu环境
apt-get update
apt-get install net-tools
#再开一个窗口
公式: docker commit -m="提交的描述信息" -a="作者" 容器id 要创建的目标镜像名:[标签名]
docker commit -m="ifconfig cmd add" -a="lxy" b447a73d7b8f lxy/ubuntu:1.6
curl -XGET http://本机ip:运行私库对外暴露的端口/v2/_catalog
例:
curl -XGET http://192.168.116.126:5000/v2/_catalog
docker tag 镜像名字:镜像的TAG 本机ip:暴露端口/名称:版本
例:
docker tag lxy/ubuntu:1.6 192.168.116.126:5000/lxyububtu:1.6
#第一个是使用阿里云加速器
#第二个是取消默认不允许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
docker pull 本机host:端口/镜像名字:版本号
例:
docker pull 192.168.116.126:5000/lxyububtu:1.6
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
docker inspect 容器id
例:
docker inspect 8103e67e0762
#将容器停止
# 在/usr/local/ubuntu下新建
touch as.txt
#此时我们的容器是停止状态,开启容器
docker start 8103e67e0762
#进入交互
docker exec -it 8103e67e0762 /bin/bash
cd /usr/local/ubuntu/
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
- 先关联一个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