Docker入门与应用系列(二)镜像管理
1.1 什么是镜像
简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
1.2 镜像从哪里来
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
https://hub.docker.com/explore
默认是国外的源,下载会慢,可以国内的源提供下载速度:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://04be47cf.m.daocloud.io
1.3 镜像工作的原理
当我们启动一个新的容器时,Docker会加载只读镜像,并在其之上添加一个读写层,并将镜像中的目录复制一份到/var/lib/docker/aufs/mnt/容器ID为目录下,我们可以使用chroot进入此目录。如果运行中的容器修改一个已经存在的文件,那么会将该文件从下面的只读层复制到读写层,只读层的这个文件就会覆盖,但还存在,这就实现了文件系统隔离,当删除容器后,读写层的数据将会删除,只读镜像不变。
1.4 镜像文件存储结构
docker相关文件存放在:/var/lib/docker目录下
/var/lib/docker/aufs/diff # 每层与其父层之间的文件差异
/var/lib/docker/aufs/layers/ # 每层一个文件,记录其父层一直到根层之间的ID
/var/lib/docker/aufs/mnt # 联合挂载点,从只读层复制到最上层可读写层的文件系统数据
在建立镜像时,每次写操作,都被视作一种增量操作,即在原有的数据层上添加一个新层;所以一个镜像会有若干个层组成。
每次commit提交就会对产生一个ID,就相当于在上一层有加了一层,可以通过这个ID对镜像回滚
1.5 查看镜像
docker images
[bigberg@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest f2a91732366c 3 months ago 1.85kB
选项说明:
REPOSTITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSTITORY:TAG 来定义不同的镜像。
1.6 搜索镜像
语法:
docker search [OPTIONS] TERM
选项说明:
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。
[bigberg@localhost ~]$ docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 4051 [OK]
ansible/centos7-ansible Ansible on Centos7 105 [OK]
jdeathe/centos-ssh CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_… 91 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 45 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 38 [OK]
tutum/centos Simple CentOS docker image with SSH access 36
gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glust… 22 [OK]
centos/python-35-centos7 Platform for building and running Python 3.5… 18
openshift/base-centos7 A Centos7 derived base image for Source-To-I… 17
kinogmt/centos-ssh CentOS with SSH 17 [OK]
openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use w… 10
centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relational … 7
openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6
pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag names… 3
darksheer/centos Base Centos Image -- Updated hourly 3 [OK]
openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x ima… 3
openshift/wildfly-101-centos7 A Centos7 based WildFly v10.1 image for use … 3
pivotaldata/centos Base centos, freshened up a little with a Do… 1
miko2u/centos6 CentOS6 日本語環境 1 [OK]
pivotaldata/centos-mingw Using the mingw toolchain to cross-compile t… 1
openshift/php-55-centos7 DEPRECATED: A Centos7 based PHP v5.5 image f… 1
blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK]
jameseckersall/sonarr-centos Sonarr on CentOS 7 0 [OK]
pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated wi… 0
smartentry/centos centos with smartentry 0 [OK]
1.7 下载镜像
1.7.1 解决镜像下载慢的问题
我们可以使用 Docker 镜像加速器来解决这个问题,加速器就是镜像、代理的概念。国内有不少机构提供了免费的加速器以方便大家使用,这里列出一些常用的加速器服务:
- Docker 官方的中国镜像加速器:从2017年6月9日起,Docker 官方提供了在中国的加速器,以解决墙的问题。不用注册,直接使用加速器地址:
https://registry.docker-cn.com
即可。 - 中国科技大学的镜像加速器:中科大的加速器不用注册,直接使用地址
https://docker.mirrors.ustc.edu.cn/
配置加速器即可。进一步的信息可以访问:http://mirrors.ustc.edu.cn/help/dockerhub.html?highlight=docker - 阿里云加速器:注册阿里云开发账户(免费的)后,访问这个链接就可以看到加速器地址: https://cr.console.aliyun.com/#/accelerator
- DaoCloud 加速器:注册
DaoCloud
账户(支持微信登录),然后访问: https://www.daocloud.io/mirror#accelerator-doc
Ubuntu 16.04
和 CentOS 7
这类系统都已经开始使用 systemd
进行系统初始化管理了,对于使用 systemd
的系统,应该通过编辑服务配置文件 docker.service
来进行加速器的配置。
sudo vim /etc/systemd/system/multi-user.target.wants/docker.service #在文件中找到 ExecStart= 这一行,并且在其行尾添加上所需的配置。假设我们的加速器地址为 https://registry.docker-cn.com,那么可以这样配置 ExecStart=/usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com sudo systemctl daemon-reload
sudo systemctl restart docker # 确认配置
sudo ps -ef | grep dockerd
[bigberg@localhost ~]$ ps -ef | grep docker
root 4273 1 1 10:04 ? 00:00:08 /usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com
1.7.2 获取镜像
[bigberg@localhost ~]$ docker pull centos:7
7: Pulling from library/centos
af4b0a2388c6: Pull complete
Digest: sha256:2671f7a3eea36ce43609e9fe7435ade83094291055f1c96d9d1d1d7c0b986a5d
Status: Downloaded newer image for centos:7
1.8 查看镜像
[bigberg@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e548f1a579cf 3 days ago 109MB
centos 7 ff426288ea90 6 weeks ago 207MB
hello-world latest f2a91732366c 3 months ago 1.85kB
1.9 导出镜像
[bigberg@localhost ~]$ docker save -o centos.tar.gz centos [bigberg@localhost ~]$ docker save nginx > nginx.tar.gz [bigberg@localhost ~]$ docker image save hello-world > hello.tar.gz [bigberg@localhost ~]$ ll
total 320480
-rw------- 1 bigberg bigberg 215760384 Feb 24 10:38 centos.tar.gz
-rw-rw-r-- 1 bigberg bigberg 12800 Feb 24 10:40 hello.tar.gz
-rw-rw-r-- 1 bigberg bigberg 112393728 Feb 24 10:39 nginx.tar.gz
1.10 导入镜像
[root@linux-node1 ~]#docker load --input centos.tar.gz
#使用input导入
[root@linux-node1 ~]# docker load < nginx.tar.gz #使用重定向导入
[root@linux-node1 ~]# docker load < /opt/centos.tar.gz #导入本地镜像到docker镜像库
1.11 删除镜像
# docker rmi TMAGE ID
[bigberg@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e548f1a579cf 3 days ago 109MB
centos 7 ff426288ea90 6 weeks ago 207MB
hello-world latest f2a91732366c 3 months ago 1.85kB
[bigberg@localhost ~]$ docker rmi f2a91732366c
Untagged: hello-world:latest
Untagged: hello-world@sha256:66ef312bbac49c39a89aa9bcc3cb4f3c9e7de3788c944158df3ee0176d32b751
Deleted: sha256:f2a91732366c0332ccd7afd2a5c4ff2b9af81f549370f7a19acd460f87686bc7
Deleted: sha256:f999ae22f308fea973e5a25b57699b5daf6b0f1150ac2a5c2ea9d7fecee50fdf
[bigberg@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e548f1a579cf 3 days ago 109MB
centos 7 ff426288ea90 6 weeks ago 207MB
1.12 显示某个镜像的历史
可以看到镜像的每一次
-H :以可读的格式打印镜像大小和日期,默认为true;
--no-trunc :显示完整的提交记录;
-q :仅列出提交记录ID。
[bigberg@localhost ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest e548f1a579cf 3 days ago 109MB
centos 7 ff426288ea90 6 weeks ago 207MB
[bigberg@localhost ~]$ docker -H nginx
^C
[bigberg@localhost ~]$ docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
e548f1a579cf 3 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 3 days ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
<missing> 3 days ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 3 days ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 22B
<missing> 3 days ago /bin/sh -c set -x && apt-get update && apt… 53.4MB
<missing> 3 days ago /bin/sh -c #(nop) ENV NJS_VERSION=1.13.9.0.… 0B
<missing> 3 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.13.9-… 0B
<missing> 6 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 9 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 9 days ago /bin/sh -c #(nop) ADD file:27ffb1ef53bfa3b9f… 55.3MB
Docker入门与应用系列(二)镜像管理的更多相关文章
- Wireshark入门与进阶系列(二)
摘自http://blog.csdn.net/howeverpf/article/details/40743705 Wireshark入门与进阶系列(二) “君子生非异也,善假于物也”---荀子 本文 ...
- Docker入门与应用系列(四)数据卷管理
一.介绍 Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(译者注:镜像栈顶部)添加一个读写层.如果运行中的容器修改了现有的一个已经存 ...
- Docker入门与应用系列(七)Docker图形界面管理之DockerUI
1.dockeruiDockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理.1.1 下载镜像 docker pull abh1nav/dockerui ...
- Docker入门与应用系列(八)Docker图形界面管理之Shipyard
Shipyard基于Docker API实现的容器图形管理系统,支持container.images.engine.cluster等功能,可满足我们基本的容器部署需求可堆栈的Docker管理基于Doc ...
- Docker入门与应用系列(一)介绍和部署
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- Docker入门与应用系列(一)介绍与部署
Docker介绍 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...
- 《Visual C++ 2010入门教程》系列二:安装、配置和首次使用VS2010
作者:董波 日期:2010.6.15 写在前面 在我还在上学的时候,我选择了C++,最初我用VC6作为我的IDE,我看过很多本C++的教材,有的适合我,有的不适合我,其中有一本叫<Visual ...
- Docker私有仓库 Registry中的镜像管理
这里主要介绍Registry v2的版本 查看Registry仓库中现有的镜像: # curl -XGET http://10.0.30.6:5000/v2/_catalog# curl -XGET ...
- Docker系统四:Dcoker的镜像管理
1. Dcoker镜像初识 $ docker images -a //查看当前所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE cptactionhank/atlas ...
随机推荐
- spring boot之配置跨域
在启动类中配置 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override p ...
- TeamWork#2,Week 2,We are sixsix!
We are sixsix! (从左至右依次是:郝倩.张志浩.高雅智[高哥].牛强.张明培育.彭林江.王卓) 郝倩,来自120617班,我们组7个成员中唯一一个6行政班以外的成员.为了达成组队条件,彭 ...
- Scrum Meeting 10.23
Scrum Meeting No.3 今天所完成的任务仍然停留在学习基础知识上.说实话,由于缺少安卓开发.web开发的经验,我们只能一步步摸索着来. 成员 已完成任务 下一阶段任务 徐越 阅读网上的博 ...
- No.1011_第八次团队会议
罗老师和Bigman助教: 一直以来没看博客页面,我们的博客负责人不是没写博客,而是不小心把博客发到草稿上了.. 请您再次看一下我们的博客,并批评指正! 今天大家的情绪依旧很低落,离第一轮迭代完成距离 ...
- react+webpack+wepack-dev-server的环境中ant design图标离线的方法
1.首先说说我老姜对官方提供的demo的理解, 在理解的过程也学到了不少知识. 上图(图0)展示的官网demo的目录结构,node_modules是自己用node下载的, iconfont中是自己的离 ...
- DPDK flow_classify 源码阅读
代码部分 /* SPDX-License-Identifier: BSD-3-Clause * Copyright(c) 2017 Intel Corporation */ #include < ...
- loadrunner汉化【运行时设置】菜单选项截图
来自为知笔记(Wiz)
- yiled(),wait(),sleep()方法区别
yiled():让步 wait():等待 sleep():休眠 yiled是让步,会使当前线程由运行状态进入到就绪状态,让其他优先级高线程先执行,但是如果是同一优先级的线程,那么谁先执行就不确定了.它 ...
- DBGridEH序号的自动生成
序号的自动生成1.定义变量 private maxno:integer; public bmodified:boolean;2.写函数 function max(c ...
- 如何从 GitHub 上下载单个文件夹?
比如别人把一些资料传到 GitHub 上做分类归档,我怎么才能下载单一分类文件夹? 点击 Raw ,如果是不能预览的文件就会自动下载,如果是文件或者代码什么的,会在浏览器中显示,但可以复制浏览器中链接 ...