docker镜像使用

docker镜像

镜像结构和原理:

image
镜像也就是vm中的模板,容器就是运行的虚拟机,容器在最顶层,也就是可写的,下面有N层,每一层都是基于前一层的基础构建的,叫镜像
如:

  • 最底层是统一的由官方提供的空镜像(scratch)
  • 上一层是基于空镜像构建的系统镜像(centos/ubuntu官方镜像)
  • 再上一层是基于系统镜像层做出的个性修改(安装jdk、vim、ps等)
  • 再上一层是根据个性修改后构建的应用层的镜像(mysql、nginx等),容器就是用应用层的镜像启动的

镜像含里面是一层层的文件系统,叫做Union-FS(联合文件系统),它可以将几层目录挂载到一起,形成一个虚拟文件系统,虚拟文件系统的目录结构就像普通linux的目录结构一样,镜像通过这些文件再加上宿主机的内核共同提供了一个linux的虚拟环境,每一层文件系统叫做一层layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able)

Linux文件系统由 bootfs 和 rootfs 两部分组成:

bootfs(boot file system)

  • 主要包含bootloader和kernel,bootloader主要用于引导加载kernel,Linux刚启动时会加载bootfs文件系统,当boot加载完成后,kernel被加载到内存中后接管系统的控制权,bootfs会被 umount 掉

rootfs (root file system)

  • 包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件,不同的linux发行版(如ubuntu和CentOS)主要在rootfs这一层会有所区别

一般的镜像通常都比较小,镜像直接调用宿主机的内核,镜像中只提供rootfs,也就是只需要包括最基本的命令、配置文件和程序库等相关文件就可以了,省去了bootfs,节约了空间

镜像结构查看:

docker pull alpine 		默认从官网下载镜像
docker image history alpine		查看镜像历史分层
docker inspect alpine

image

容器镜像搜索:

docker容器官网: http://hub.docker.com

搜索命令:

docker search nginx
	-f stars=100		只显示点赞数超过100的
	--format string		显示格式
	--limit int		限制显示的结果数量

image

说明:

  • OFFICIAL: 官方
  • AUTOMATED: 使用第三方docker服务来帮助编译镜像,可以在互联网上面直接拉取到镜像,减少了繁琐的编译过程
apline linux补充说明:

轻型linux,很小的系统,但命令齐全。一般镜像只有5M大小

官方仓库: https://github.com/alpinelinux
官方镜像: https://hub.docker.com/_/alpine/

安装软件包命令:

apk --help
apk update		更新源
apk add vim		安装软件		
apk del openssh openntp vim		删除软件
apk info nginx 
apk manifest nginx		列出nginx安装的文件
修改系统镜像源为国内镜像:
vi /etc/apk/repositories
http://mirrors.aliyun.com/alpine/v3.8/main/
http://mirrors.aliyun.com/alpine/v3.8/community/

下载(拉取)镜像:

docker pull [OPTIONS] name[:tag|@DIGEST]
	-a 		下载所有镜像
	--disable-content-trust
	--platform string
	-q		静默模式

说明:

  • NAME:是镜像名, 仓库服务器:端口/项目名称/镜像名称
  • :TAG: 即版本号,如果不指定:TAG,则下载最新版镜像

镜像存放路径: /var/lib/docker/overlay2/镜像ID
image

镜像加速器: 免费加速器

由于docker默认使用的是docker.io的官网镜像下载,国内的镜像源下载速度更快

阿里云:https://2ynvugig.mirror.aliyuncs.com
网易云: http://hub-mirror.c.163.com/
腾讯云: https://mirror.ccs.tencentyun.com
其他国内加速:

配置:

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://2ynvugig.mirror.aliyuncs.com,
	"http://f1361db2.m.daocloud.io",
	"https://registry.docker-cn.com",
	"http://hub-mirror.c.163.com",
	"https://docker.mirrors.ustc.edu.cn"]
}
EOF

查看本地镜像:

docker images [OPTIONS] [REPOSITORY[:TAG]]
docker image ls [OPTIONS] [REPOSITORY[:TAG]]
选项:
	-q			只显示镜像ID
	-a			显示所有
	--digests 		
	--no-trunc		显示完整的镜像ID
	-f 			过滤显示
	--format

执行结果说明:

image

说明
REPOSITORY 镜像所属的仓库名称
TAG 镜像版本号(标识符),默认为latest
IMAGE ID 镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED 镜像在仓库中被创建时间
SIZE 镜像的大小

Repository仓库说明:

  • 由某特定的docker镜像的所有迭代版本组成的镜像仓库
  • 一个Registry中可以存在多个Repository
  • Repository可分为“顶层仓库”和“用户仓库”
  • Repository用户仓库名称一般格式为“用户名/仓库名”
  • 每个Repository仓库可以包含多个Tag(标签),每个标签对应一个镜像

镜像导出:

利用docker save命令可以将从本地镜像导出为一个打包 tar文件,然后复制到其他服务器进行导入使用

docker save [OPTIONS] IMAGE [IMAGE...]
选项: 
	-o 		输出文件成指定格式
例:
docker save alpine > a1.tgz
docker save alpine -o a2.tgz

docker save alpine nginx > tset.tgz

image

镜像导入:

利用docker load命令可以将镜像导出的压缩文件再导入

docker load [OPTIONS]
	-i 	读取tar文件
	-q	静默模式

删除镜像:

docker rmi 命令可以删除本地镜像,rm是删除容器

docker rmi [OPTIONS] IMAGE [IMAGE...]
docker image rm [OPTIONS] IMAGE [IMAGE...]
选项:
	-f 		强制删除镜像

镜像打标签:

docker tag 可以给镜像打标签,类似于起别名,一般配合仓库使用

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
说明:
	TARGET_IMAGE[:TAG]	目标仓库主机FQDN或IP[:端口]/项目名(或用户名)/image名字:版本
例:
docker tag nginx:latest nginx:v1.1
docker tag alpine:latest a1:v1

image

posted @ 2022-02-23 15:31  suyanhj  阅读(146)  评论(0)    收藏  举报