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.镜像与容器联系

镜像: 类似于虚拟机镜像,一个只读模板

容器:通过镜像创建的实例

root给docker镜像授权 docker 镜像管理_docker

# 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 镜像怎么高效存储

引入联合文件系统,将镜像多层文件连个挂载带容器文件系统

root给docker镜像授权 docker 镜像管理_docker_02


root给docker镜像授权 docker 镜像管理_文件系统_03

  • 7.2 写时复制(cow)
  • 基础镜像是只读的,类视共享的形式让多个容器使用,如果要在容器里面修改文件怎么办?
  • 引入写时复制(cppy-on-write), 将需要修改的文件复制到自己的文件系统中进行修改
  • 在容器中修改基础镜像提供的文件不会影响到其他的容器以及后续基于该基础镜像创建的容器

root给docker镜像授权 docker 镜像管理_归档文件_04

  • 读文件:
  • 容器层-> 镜像层
  • 修改文件:
  • 容器层->镜像层
  • storage Driver: overlay2(aufs. overlay, devicemapper)
  • 按照联合文件系统的读写逻辑 性能较差 如何优化?
  • 使用sid 固态硬盘 将固态硬盘放到 docker 的工作目录下 (/var/lib/docker/)
  • 使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销.