03 镜像管理

[TOC]

00X01 镜像是什么

  • 一个分层存储的文件
  • 一个软件的环境
  • 一个镜像可以创建N个容器
  • 一种标准化的交付
  • 一个不包含linux内核而又精简的linux操作系统
  • 镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>查看镜像中各层内容及大小,
  • 每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/中。
  • 在Docker中容器是基于镜像启动的
  • 镜像是启动容器的核心
  • 使用快照的COW技术,确保底层数据不丢失

00X02 搜索镜像

[[email protected] ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13237               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1809                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   775                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   113                                     
bitnami/nginx                      Bitnami nginx Docker Image                      83                                      [OK]
tiangolo/nginx-rtmp                Docker image with Nginx using the nginx-rtmp…   74                                      [OK]
alfg/nginx-rtmp                    NGINX, nginx-rtmp-module and FFmpeg from sou…   64                                      [OK]
jc21/nginx-proxy-manager           Docker container for managing Nginx proxy ho…   61                                      
nginxdemos/hello                   NGINX webserver that serves a simple page co…   49                                      [OK]
jlesage/nginx-proxy-manager        Docker container for Nginx Proxy Manager        44                                      [OK]
...

00X03 下载镜像

[[email protected] ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete 
b90c53a0b692: Pull complete 
11fa52a0fdc0: Pull complete 
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

00X02 配置加速器

由于默认镜像来源是Docker Hub

Docker Hub 是Docker公司负责维护的公共注册中心,包含大量的容器镜像

Docker工具默认从这个公共镜像库下载镜像。
地址:https://hub.docker.com/explore

国内部分地区下载会很慢

可以需要配置国内源加速

在/etc/docker/daemon.json 中添加

{"registry-mirrors": ["http://hub-mirror.c.163.com"]}

00X04 镜像与容器联系

  • Writable Container
  • Add Apache Image
  • Add Emacs Image
  • Debian Base Image
  • bootfs
  • kernel

容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。
如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率。
若想持久化这些改动,可以通过docker commit 将容器保存成一个新镜像

00X05查看本地已有镜像

[[email protected] ~]# docker images   
REPOSITORY          TAG                 IMAGE ID            CREATED     nginx        SIZE
nginx               latest              836b9965fccb        1 hours ago        109MB
centos              latest              b8dde07f62ef        6 weeks ago         202MB
busybox                latest              77469193c529        6 months ago        1.22MB

00X06 创建一个nginx容器后台启动

[[email protected] ~]# docker run -itd --name nginx nginx

创建一个docker容器默认会从宿主机挂载/resolv.conf /hostname /hosts 这三个文件:

[[email protected] ~]# docker inspect nginx|grep Path\"
        "Path": "nginx",
        "ResolvConfPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/hostname",
        "HostsPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/hosts",
        "LogPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d-json.log",

容器存储对应宿主机的位置

        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2-init/diff:/var/lib/docker/overlay2/9dde94d197f2674d5788d8fe26aa71ab9f633c4b0024328f1826d07509535ff2/diff:/var/lib/docker/overlay2/4e3f5889b74147bdfd091df113173b33ac8a3b30248f1b903d4bee51a6c835f9/diff",
                "MergedDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/merged",
                "UpperDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/diff",
                "WorkDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/work"
            },

00X07 管理镜像常用命令

OPTIONS说明
build构建镜像来自Dockerfile
histiry查看镜像历史
inspect显示一个或多个镜像详细信息
pull从镜像仓库拉取镜像
push推送一个镜像到镜像仓库
rm移除一个或多个镜像
prune移除未使用的镜像。没有被标记或被任何容器引用的
tag创建一个引用源镜像标记目的镜像
export导出容器文件系统到tar归档文件
import导入容器文件系统tar归档文件创建镜像
save保存一个或多个镜像到一个tar归档文件
load加载镜像来自tar归档或标准输入
Last modification:May 28th, 2020 at 12:49 pm
如果觉得我的文章对你有用,请随意赞赏