镜像


CentOS安装 Docker

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
本文介绍 Docker CE 的安装使用。
移除旧的版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息(相当于在  /etc/yum.repos.d/下 生成xxx.repo文件):
sudo yum-config-manager --add-repo http:// mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
更新 yum 缓存:
sudo yum makecache fast
安装 Docker-ce:
sudo yum -y install docker-ce
启动 Docker 后台服务
sudo systemctl start docker
测试运行 hello-world
[root@runoob ~]# docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
 
 
一、镜像
 
顶层镜像  -- 中间层镜像(被顶层镜像所依赖)  -- 虚悬镜像
docker 运行容器前需要本地存在对应的镜像,如果镜像不存在,docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),也可以通过配置,使用自定义的镜像仓库。
 
获取镜像:
docker  pull  NAME[:TAG]
 
NAME 是镜像仓库名称(用来区分镜像,),仓库名是两段式名称 ,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。
TAG 是镜像标签(表示版本信息)。如果不显示指定TAG,则默认会选择latest标签,下载仓库中最新版本的镜像。
严格的讲,镜像的仓库名称中还应该添加 仓库地址( <域名/IP>[:端口号])作为前缀,只是默认使用的是官方 Docker Hub 服务,该前缀可以忽略。
如,docker  pull  registry.hub.docker.com/ubuntu:18.04命令,即从默认的注册服务器中的ubuntu仓库来下载标记为18.04的镜像。
如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址。如,docker  pull   hub.c.163.com/public/ubuntu:18.04
需要使用 镜像代理服务 来加速Docker镜像获取过程,可以在Docker服务启动配置中增加 --registry-mirror=proxy_URL 来指定镜像代理服务地址。--registry-mirror=http://hub-mirror.c.163.com
http://141e5461.m.daocloud.io
{
    "registry-mirrors": [
        " https://reg-mirror.qiniu.com",
        " http://hub-mirror.c.163.com"
    ]
}
镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。 下载过程中给出了每一层的 ID 的前 12 位。并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。
当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。
docker image ls 显示的是镜像下载到本地后,展开的大小,准确说,是展开后的各层所占空间的总和,而 Docker Hub 中显示的体积是压缩后的体积。
查看镜像、容器、数据卷所占用的空间:
 
生成容器:
 
docker  tag 命令添加的标签实际上起到了类似链接的作用。
 
docker  inspect  命令获取镜像的详细信息。
获取其中的一项
列出各层的创建信息
 
镜像列表:
 
搜寻镜像:
docker  search   xxxx
 
删除镜像:
容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。 如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。
删除行为分为 Untagged  和 Deleted。 镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。所以并非所有的 docker image rm 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。
docker  rmi  或  docker  image  rm  命令
如果有容器依赖,则正确的做法是先删除依赖该镜像的所有容器,再删除镜像
1、使用镜像名删除 ,<仓库名>:<标签>
2、使用镜像ID删除
3、搭配命令行删除
如,删除所有在 mongo:3.2 之前的镜像:
$ docker image rm $(docker image ls -q -f before=mongo:3.2)
 
清理镜像:
清理一些临时的镜像文件,以及一些没有被使用的镜像(包括虚悬镜像)。
docker  images  prune 命令
 
创建镜像:
1、基于已有的容器创建(慎用,适合帮助理解镜像分层存储的概念)
背景:修改了容器的文件也就是改动了容器的存储层,可用docker diff 命令查看具体的改动。docker commit 命令,可以将容器的存储层保存下来成为镜像。
换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。
缺点:除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用 docker commit 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到。这会让镜像更加臃肿。
 
docker commit  [OPTIONS]  CONTAINER  [REPOSITORY[:TAG]],
不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfile 来完成。
OPTIONS:
-a : 作者
-c : 提交的时候执行Dockerfile指令
-m : 提交消息
-p : 提交时暂停容器运行
CONTAINER :
容器名 或 容器ID
 
2、基于本地模板导入
格式:docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]
压缩包可以是本地文件、远程 Web 文件,甚至是从标准输入中得到。压缩包将会在镜像 / 目录展开,并直接作为镜像第一层提交。
 
3、基于Dockerfile创建(最常见)
背景:镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
Union FS 是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。
镜像是多层存储,每一层的东西并不会在下一层被删除,会一直跟随着镜像。因此镜像构建时,一定要确保每一层只添加真正需要添加的东西,任何无关的东西都应该清理掉。
 
写一个简答的Dockerfile 文件 , 涉及到了两条指令,FROM 和 RUN
FROM:指定基础镜像( 必备)
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。
FROM 是必备的指令,并且必须是第一条指令。
除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。
FROM scratch
...
如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。
RUN: 执行命令( 最常用的指令之一)
 
其格式有两种:
1、shell 格式: RUN <命令>,就像直接在命令行中输入的命令一样。
2、 exec 格式: RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式。
 
docker build [选项] <上下文路径/URL/->
--target=阶段名 -t 指定生成镜像名
docker build  命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。
 
上下文的概念。当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎(注意看上图第二行)。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。 写一个 .dockerignore 用于剔除不需要作为上下文传递给 Docker 引擎的。
 
导出和载入镜像( 现在已经不推荐):
1、存出镜像
docker   save命令  将镜像保存为归档文件。支持 -o string 参数,导出到指定的文件中。
2、载入镜像
docker   load命令。支持 -i string 参数,从指定文件中读入镜像内容。
 
上传镜像:
docker  [image]  push NAME[:TAG]上传镜像到仓库(需要登录),默认为Docker Hub仓库。
 
 
 
 

转载于:https://www.cnblogs.com/cshaptx4869/p/10947695.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值