镜像的分层结构
- linux(rhel > oel > centos)
- linux -> kenel -> diy -> app -> system
镜像之间共享资源
原nginx镜像是1.17版本
再拉取一个nginx1.16版本,拉取很快,因为共享资源,一样的层不会再下载
当然,删除的时候也仅仅是删除nginx1.16与原nginx不一样的资源
- 公共层共享
< missing > 一般是别人不想从镜像处知道他的信息
新建数据会写道container容器里面(新的层)
如果想修改下面的文件信息,就会运用copy-on-write将下层数据copy到上层进行修改
最上面最早生效
镜像的构建
本地tar包直接打成镜像:
docker load -i xxx.tar
1.commit 打包提交镜像
docker rm -f nginx 删除容器
docker pull busybox 拉取busybox
进入busybox 创建文件
==注意:如果镜像分层没有: CMD ==
docker run -it xxxx bash
docker run it busybox
创建文件,ctrl+d退出
但是,并没有保存文件
容器也被停止
docker ps 容器停止
docker ps -a
docker start id 启动容器
docker attach id 进入容器
退出不停止容器:
ctrl + p q 后台运行
不建议将数据放在容器层,打包放到镜像,如果数据过大,会浪费大量的磁盘空间和容器空间
docker commit 56a1911377bf busybox:v1 打包提交镜像
镜像之间数据共享
正在运行的容器删除要加-f 强制删除
docker rm -f 56a1911377bf
查看
有了自己打包的镜像
docker run -it --rm busybox:v1
- 总结:在镜像中每一层都是通过commit打包提交而成
2.dockerfile构建镜像
写好Dockerfile文件
创建镜像
有审计,有安全保障
可以非常清晰的知道每一层做了什么事情
- 再创建demo:v2
demo:v2 在 demo:v1的基础上一层一层的加
共享资源
- 再创建demo:v3
这就是docker的分层
Dockerfile详解
- 注意:copy命令必须在当前路径
- ADD解压
- ENV定义变量
- EXPOSE
docker run -d nginx -P nginx nginx 随机端口
docker inspect nginx
访问32768端口
- VOLUME
挂载数据到本地
同步数据到本地
随便一方删除,另一方也会被删除
- 删除卷
docker volume ls 查看有哪些卷
docker volume prune 没用的删除,有用的保留
- WORKDIR
- RUN
执行任何shell命令
- CMD ENTRYPOINT
修改nginx发布页面
CMD:
直接输出
会被覆盖
ENTRYPOINT:
不会被覆盖
另外一种写法:
- 传参