1、镜像来源与容器的管理

镜像分为两种:

一种是系统基本都镜像(这种一般用作基础镜像)

另外一种是服务级别的镜像(下载下来就能启动一种容器服务)

系统镜像下载

去这里下载:https://download.openvz.org/template/precreated/

cat centos-6-x86-64-minimal.tar.gz |docker import-centos:6.0##创建镜像

cat centos-7-x86_64-minimal.tar.gz docker import centos:7.0

cat ubuntu-16.04-x86 64.tar.gz docker import-ubuntu:16.04


服务级别镜像

docker pull nginx:1.15

docker history nignx:1.15

2、镜像与容器之间的联系

第七节  镜像、容器、仓库的关系_centos

容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,

会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。如果容器

删除了,最上面的读写层也就删除了,改动也就丢失了。


所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制(引用)

过来的操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率。

第七节  镜像、容器、仓库的关系_centos_02

镜像层只读层,容器层可读写上层开辟容器

若想持久化这些改动,可以通过docker commit将容器保存成一个新的镜像。

3、镜像仓库

在docker中,仓库是集中存放镜像的地方,是一个集中的存储、分发镜像的服务;
每个仓库可以包含多个标签,每个标签对应一个镜像。通常,一个仓库会包含同一个
软件不同版本的镜像,而标签就常用于对应该软件的各个版本。

我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。
如果不给出标签,将以latest作为默认标签。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Pool等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库,比如registry本地仓库、vmware harbor[常用私有仓库]

当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库
这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了

注:Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务

阿里云镜像仓库

https://cr.console.aliyun.com/cn-hangzhou/instance/repositories

Docker仓库

$ sudo docker login --username=lycshnr2022 registry.cn-hangzhou.aliyuncs.com



4、部署一个registry 本地仓库

docker仓库主要用于存放docker镜像,docker仓库分为公有仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下:

节省网络带宽,针对每个镜像不用去docker官网仓库下载;

下载docker镜像从本地私有仓库中下载;

组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;

可以基于GIT或者SVN、Jenkins更新本地docker私有仓库镜像版本。


官方提供docker registry来构建本地私有仓库,目前最新版本为v2,registry v2使用go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。

#下载registry镜像
docker pull registry
#查看镜像信息
docker history registry:latest

运行起来
docker run -d -p 5000:5000 --restart-always --name registry registry:latest
【说明】
docker run运行起来
-d  表示后台运行
-p  表示端口
5000:5000  表示宿主机端口:容器端口
--restart-always  表示容器随docker自启动
name  表示容器的名字
-------------------------------------------------------------------
【设置docker开机自启动,并设置容器自动重启】
docker run -d --restart=always --name 设置容器名 使用的镜像
(上面命令  --name后面两个参数根据实际情况自行修改)
如果创建时未指定--restart=always,可通过update命令设置
docker update --restart=always 容器ID(或者容器名)
(容器ID或者容器名根据实际情况修改)