docker004镜像和仓库(代码片段)

resn resn     2023-04-15     435

关键词:

 

Docker 004 镜像和仓库

docker 镜像是用来启动容器的构建基石。

docker 镜像是什么

我们先来看一张图:

技术图片

如上图所示, docker镜像采用了分层构建机制:

  • 第一层:最底层是一个引导文件系统 bootfs,类似于 Linux 的引导文件系统,用户几乎不会接触到这一层。容器启动完成后会被卸载,以节省内存空间
  • 第二层:第二层是rootfs,表现为根文件系统,他是可以是一种或多种操作系统,如 ubuntu、centos 等。在传统模式中,系统启动时,内核挂载 rootfs 时,会首先挂载为只读模式,完成完整性自检后再重新挂载为读写模式;docker 中,rootfs 永远以只读方式挂载,之后利用“联合加载”技术在其上挂载其他镜像,最上层为一个可读写的文件系统。
  • 第三层:这个文件系统用来加载 Emacs,
  • 第四层:这个文件系统用来加载 Nginx
  • 第五层:可读写的容器

注意: docker 将这样的文件系统成为镜像,一个镜像可以放在另一个镜像的顶部,位于下面的镜像成为父镜像,最底层的镜像被成为基础镜像。

联合加载指一次同时加载多个文件系统,但在外面来看只能看到一个文件系统,各层文件系统叠加在一起,最终的文件系统会包含所有底层的文件和目录。

docker 会在镜像的最顶层加载一个可读写文件系统,我们在 docker 中运行的程序就是在这一层执行的。docker 第一次启动一个容器时,初始的读写层是空的,文件系统发生的变化都会应用到这一层,比如修改A文件,A 文件首先会从读写层的只读层复制到读写层,A 文件的只读版本依旧存在,但已被读写层的 A 文件副本所隐藏。这种机制被称为写时复制

 

列出镜像

# 列出镜像
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              ccc6e87d482b        5 days ago          64.2MB
.....

从以上命令的结果可以看出,列出的镜像来自于一个名为 ubuntu 的镜像仓库,前面我们在执行 docker run时,同时进行了镜像下载,前面的例子里我们使用我的就是 ubuntu 镜像。

镜像保存在仓库,而镜像仓库保存在 Registry 中,默认的 Registry 有 docker 公司运营,即docker hub: https://hub.docker.com/_/registry/。镜像仓库类似于 GitLab 中的代码仓库,它包括镜像、层以及关于镜像的元数据。

每个镜像仓库都可以存放很多镜像,例如,Ubuntu 仓库就包含了20.04、19.10、19.04、18.04、16.04 等多个版本的镜像。

为了区分同一个仓库中的不同镜像,docker 提供了tag 标签功能,每个镜像列出时都带一个标签,如 18.04。通过在仓库名后加一个冒号和 tag 可以指定仓库中的某一镜像。

# 搜索镜像
$ docker search ubuntu
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   10399               [OK]
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   385                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   239                                     [OK]
......

# 拉取指定版本的镜像,不指定版本时默认拉取最新版本
$ docker pull ubuntu
$ docker pull ubuntu:18.04   #18.04 称为 tag 标签



# 查看镜像
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              18.04               ccc6e87d482b        5 days ago          64.2MB
ubuntu              latest              ccc6e87d482b        5 days ago          64.2MB
hello-world         latest              fce289e99eb9        12 months ago       1.84kB

我们还可以看到,tag 为 18.04 和 latest 和镜像 ID 都是ccc6e87d482b,这是因为一个镜像可以有多个tag。

在构建容器时指定标签是个好习惯,这样可以准确的指定容器的来源,也方便我们的管理。

 

Docker Hub 中有两种类型的仓库,

  • 用户仓库:有 docker 用户创建,命名由用户名仓库名两部分来组成,形如:用户名/仓库名:nuagebec/ubuntu
  • 顶层仓库:由 docker公司和选定的能提供优质基础镜像的厂商的人来管理,命名中只有仓库名,如 ubuntu 仓库。用户可基于此类镜像构建自己的镜像,同时,顶层仓库也代表厂商和docker 公司的一种承诺,即顶层仓库中的镜像是架构良好,安全且最新的。

 

拉取镜像

使用 docker run命令从镜像启动一个容器时,如果本地没有改镜像,则会从 docker hub 下载该镜像,如未指定 tag,则会下载 latest 标签的镜像。

还有一个可以拉取镜像的命令是 docker pull。该命令只是下载镜像,但不执行。

# 拉取 fedora:31
$ docker pull fedora:31
31: Pulling from library/fedora
d318c91bf2a8: Pull complete
Digest: sha256:d4f7df6b691d61af6cee7328f82f1d8afdef63bc38f58516858ae3045083924a
Status: Downloaded newer image for fedora:31
docker.io/library/fedora:31

# 拉取 fedora:30
$ docker pull fedora:30

# 查看所有fedora镜像
$ docker images fedora
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
fedora              31                  f0858ad3febd        2 months ago        194MB
fedora              30                  89d6d6a7d521        2 months ago        248M

# 查看指定版本的fedora 镜像
$ docker images fedora:31
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
fedora              31                  f0858ad3febd        2 months ago        194MB

 

 

查找镜像

通过docker search 命令可以查找docker hub 上所有的公共可用镜像。

# 查找 nginx 镜像
docker search nginx
NAME                              DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                             Official build of Nginx.                        12528               [OK]
jwilder/nginx-proxy               Automated Nginx reverse proxy for docker con…   1724                                    [OK]
richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable of…   753                                     [OK]
............

以上命令在 docker hub 上查找了所有带 nginx 的镜像,命令返回的信息如下:

  • NAME:仓库名称
  • DESCRIPTION:描述信息
  • STARS:评级,数字越大越受欢迎
  • OFFICIAL:是否官方提供
  • AUTOMATED: 是否为自动构建

 

docker本地仓库和私有仓库(代码片段)

docker本地仓库和私有仓库一、docker本地仓库1.首先下载registry镜像2.在daemon.json文件中添加私有镜像仓库地址3.运行registry容器docker容器重启策略4.为镜像打标签5.上传到私有仓库6.列出私有仓库的所有镜像7.列出私有仓库的centos镜像... 查看详情

docker(4)搭建私有镜像仓库(代码片段)

【Docker】(4)搭建私有镜像仓库说明1、这里是通过阿里云,搭建Docker私有镜像仓库。2、这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能一、搭建过程首先进入阿里云创建镜像仓库:https://dev.aliyun.... 查看详情

微服务架构师-docker私有镜像仓库的配置和使用(代码片段)

文章目录docker私有化仓库介绍私有仓库介绍私有镜像仓库有哪些有优点?实验环境规划使用registry搭建docker私有仓库初始化实验环境-安装docker开启包转发功能和修改内核参数配置xuegod64为docker私有仓库服务端配置xuegod63上的doc... 查看详情

docker镜像的创建和私有仓库的创建(代码片段)

一、docker镜像的创建方法1、基于已有镜像创建2、基于本地模板创建3、基于dockerfile创建4、搭建私有仓库及其使用方法一、docker镜像的创建方法docker镜像是除了docker的核心技术之外,也是应用发布的标准格式。一个完整的docker镜... 查看详情

docker仓库管理镜像--公共仓库dockerhub和私人仓库registry和harbor(代码片段)

镜像仓库管理DockerHUb仓库管理什么是DockerHUb​DockerHub是Docker公司维护的公共Registry。用户可以将自己的镜像保存到DockerHub免费的repository中,如果不希望别人访问自己的镜像,也可以购买私有repository。账号注册和登陆Docker客户端... 查看详情

02.dockerfile构建镜像和docker仓库(代码片段)

原文:02.DockerFile构建镜像和Docker仓库1|0为什么用DockerFileDockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。说dockerfile之前我们先说一下dockercommit1|1利用commit理解镜像构成注意:dockercommit... 查看详情

docker通过仓库共享镜像(代码片段)

...镜像本地仓库在本地建一个仓库,可以上传和下载做好的docker镜像。用git下载源码后修改配置文件config.yml,把storage_path部分改成Docker镜像仓库的存放地点:$gitclonehttps://github.com/dotcloud/docker-registry.git$cddocker-registry$cpconfig_sample.ymlc... 查看详情

docker学习笔记-仓库(代码片段)

Docker仓库是镜像存储、分发、部署的关键,制作好应用程序镜像后上传到仓库,使用Dockerdaemon从仓库拉取后运行,我们可以使用官方共有仓库dockerhub或者搭建私有仓库DockerHub包含众多镜像,无需登录就可以搜索和使用注册DockerHub... 查看详情

docker镜像创建私有仓库搭建和数据管理(代码片段)

Docker镜像的创建方法Docker镜像除了是Docker的核心技术之外也是应用发布的标准格式。一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常... 查看详情

centos7构建docker私有镜像仓库(代码片段)

...库来完成。镜像仓库分为公有仓库和私有仓库两种,例如DockerHub就属于公有仓库,公有仓库的优点是可以直接使用,无须自己维护。但考虑到访问效率和镜像安全等方面的原因,企业可构建自己内部的私有仓库,供内部员工上传... 查看详情

docker容器介绍(代码片段)

Docker容器介绍docker三个基本概念镜像(Image)容器(Container)仓库(Repository)解释来自w3cschoolDocker镜像Docker镜像就是一个只读的模板。例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或用户需要的其它... 查看详情

docker镜像仓库harbor安装与配置(代码片段)

Harbor简介:Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的DockerRegistry... 查看详情

在docker中创建私有仓库(代码片段)

仓库简介随着创建的镜像日益增多,就需要有一个保存镜像的地方,这就是仓库。目前有两种仓库:公共仓库和私有仓库。最方便的就是使用公共仓库上传和下载镜像,下载公共仓库中的镜像不需要注册,但上传镜像到公共仓库... 查看详情

05-docker仓库(代码片段)

访问Docker仓库仓库(Repository)是集中存放镜像的地方,又分共有仓库和私有仓库。注册服务器和仓库有所区别,注册服务器是存放仓库的具体服务器,一个注册服务器可以有多个仓库,而每个仓库下可以有多个镜像,仓库可以... 查看详情

011.docker仓库管理(代码片段)

一 Docker仓库介绍docker仓库,即registry,实现了镜像的管理、分发,同时还包括用户的认证。dockerregistry仓库是一个无状态的、高可靠的服务器应用程序,用来存储docker镜像。docker.io为docker官方的仓库,默认所有的pull均是从官方仓... 查看详情

docker基础:镜像仓库相关命令(代码片段)

...库登出镜像仓库拉取镜像上传镜像查找镜像镜像仓库相关dockerlogin:登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库DockerHub;dockerlogout:登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docke... 查看详情

docker第四篇docker仓库管理(代码片段)

...有不同的标签(tag)二、仓库管理1、注册账号https://hub.docker.com/#在此页面注册账号,需要用户名,邮箱,密码(注:需要FQ才能注册,注册通过邮箱激活后可以通过网页登 查看详情

docker基础:镜像(代码片段)

...像删除镜像创建镜像导出和导入镜像上传镜像总结镜像是Docker的三大核心概念之一。Docker运行容器前需要本地存在对应的镜像,如果本地没有对应的镜像,Docker会尝试从默认的镜像仓库下载。当然用户也可以通过配置,使用自定... 查看详情