关键词:
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仓库管理什么是DockerHUbDockerHub是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会尝试从默认的镜像仓库下载。当然用户也可以通过配置,使用自定... 查看详情