docker学习笔记- docker 镜像管理
1.镜像是什么
- 一个分层存储的文件
- 一个软件环境
- 一个镜像可以创建N个容器
- 一种标准化的交付
- 一个不包含Linux 而又精简的Linux操作系统
2.镜像从哪里来?
- 镜像仓库 (docker hub)
3.创建一个Nginx容器
# 不指定版本号将使用最新版 latest
docker run -d -p 8080:80 nginx
# docker 查看镜像
docker ps
# docker 查看log
docker logs <镜像id>
4.镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://r6relysg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5.镜像与容器联系
镜像: 类似于虚拟机镜像,一个只读模板
容器:通过镜像创建的实例
# docker 存储位置
/var/lib/docker
# 查看容器详细信息
docker inspect <容器id>
6.管理镜像的命令
6.1查看所有的指令
# 查看所有的指令
docker COMMAND --help
6.2 常用的指令
指令 | 描述 |
docker images | 列出镜像 |
docker build | 构建镜像来自Dockerfile |
docker history | 查看镜像历史 |
docker inspect | 显示一个或多个镜像的详细信息 |
docker pull | 从镜像仓库拉取镜像 |
docker push | 推送一个镜像到镜像仓库 |
docker image rm | 移除一个或多个镜像 -f 强制删除 |
docker prune | 移除没有被标记或者没有被任何容器引用的镜像 |
docker tag | 创建一个引用源镜像标记的目标镜像 |
docker container export | 导出容器文件系统到tar 归档文件 |
docker import | 导入容器文件系统tar 归档文件创建镜像 |
docker save 镜像:版本 > xxx.tar | 保存一个或者多个镜像都一个tar归档文件 |
docker load < xxx.tar | 加载镜像来自tar 归档或者标准输入 |
docker rm | 删除容器 -f 强制删除 |
7.联合文件系统(UFS)
7.1 镜像怎么高效存储
引入联合文件系统,将镜像多层文件连个挂载带容器文件系统
- 7.2 写时复制(cow)
- 基础镜像是只读的,类视共享的形式让多个容器使用,如果要在容器里面修改文件怎么办?
- 引入写时复制(cppy-on-write), 将需要修改的文件复制到自己的文件系统中进行修改
- 在容器中修改基础镜像提供的文件不会影响到其他的容器以及后续基于该基础镜像创建的容器
- 读文件:
- 容器层-> 镜像层
- 修改文件:
- 容器层->镜像层
- storage Driver: overlay2(aufs. overlay, devicemapper)
- 按照联合文件系统的读写逻辑 性能较差 如何优化?
- 使用sid 固态硬盘 将固态硬盘放到 docker 的工作目录下 (/var/lib/docker/)
- 使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销.