docker镜像使用
docker镜像
镜像结构和原理:
镜像也就是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
容器镜像搜索:
docker容器官网: http://hub.docker.com
搜索命令:
docker search nginx
-f stars=100 只显示点赞数超过100的
--format string 显示格式
--limit int 限制显示的结果数量
说明:
- 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
镜像加速器: 免费加速器
由于docker默认使用的是docker.io的官网镜像下载,国内的镜像源下载速度更快
阿里云:https://2ynvugig.mirror.aliyuncs.com
网易云: http://hub-mirror.c.163.com/
腾讯云: https://mirror.ccs.tencentyun.com
其他国内加速:
- http://f1361db2.m.daocloud.io
- https://registry.docker-cn.com
- http://hub-mirror.c.163.com
- https://docker.mirrors.ustc.edu.cn
配置:
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
执行结果说明:
列 | 说明 |
---|---|
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
镜像导入:
利用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