特别声明:

  博文主要是学习过程中的知识整理,以便之后的查阅回顾。部分内容来源于网络(如有摘录未标注请指出)。内容如有差错,也欢迎指正!

=============系列文章=============

1. Docker学习(一): 基本概念

2. Docker学习(二): 镜像的使用与构建

3. Docker学习(三): Dockerfile指令介绍

4. Docker学习(四): 操作容器

=================================

获取镜像

  获取镜像命令: docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

    Docker Registry地址:格式一般是<域名/IP>[:端口号], 默认是Docker Hub

    仓库名:<用户名>/<软件名>,Docker Hub默认用户名为library

    例:docker pull ubuntu:14.04,从Docker Hub获取镜像,即library/ubuntu:14.04

  运行镜像命令:docker run [选项] <仓库名:标签 或 镜像ID> [COMMAND]

    例:docker run -it --rm ubuntu:14.04 bash

      -it:-i 交互式操作,-t 终端,即交互式终端。

      --rm:容器退出后随之将其删除,避免空间浪费;一般情况需要docker rm手动删除容器

      bash:命令,bash为获取交互式Shell

    exit:退出容器,返回宿主机

  列出镜像命令:docker images

    需要注意docker images列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于Docker镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于Docker使用Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小很多。

    虚悬镜像:对于既没有仓库名,也没有标签,均为<none>的镜像称为虚悬镜像(dangling image),产生的原因的是同仓库名和标签的镜像由于镜像更新被转移到了新的镜像身上。

    显示虚悬镜像命令:docker images -f dangling=true

    删除虚悬镜像命令:docker rmi $(docker images -f dangling=true)

    显示中间层镜像命令:docker images -a

    列出部分镜像命令:

      a. 根据仓库名:docker images ubuntu

      b. 过滤器参数:docker images -f since=mongo:3.2 (列出mongo:3.2之后建立的镜像)

      c. 过滤器-label: docker images -f label=com.example.version=0.1

    列出特定格式的镜像:

      只列出镜像的ID:docker images -q

      Go的模板语法:docker images --format "{{.ID}}: {{.Repository}}"

构建镜像

  一、commit(将容器的存储层保存下来成为镜像,原有镜像基础上加上存储层)

    命令:docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

      例:docker commit --author "konrad" --message "update msg" webserver nginx:v2

    查看提交历史命令:docker history <仓库名>[:<标签>]

  注:慎用!!!!会有大量无关内容被添加进来,会导致镜像臃肿。生成的镜像是黑箱镜像,别人不知道具体里面做了什么。

  二、Dockerfile

    镜像构建透明的,Dockerfile本身就是一个文本文件,内包含了一条条的指令;每条指令构建一层,因此每一条指令的内容,就是描述该层应该如何构建。

Dockerfile实例:  

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

  FROM:指定哪个镜像为基础,在其上进行定制。必须是第一条指令

  RUN:用来执行命令行命令的

    shell格式:RUN <命令> ,就像直接在命令行中输入的命令一样

    exec格式:RUN ["可执行文件", "参数1", "参数2"],像函数调用中的格式

  注:虽然RUN像Shell脚本一样可以执行命令,但是每条命令就是一层镜像,把每个命令都对应RUN会构建出很多层镜像,镜像会包括一些没有用的东西。Union FS是有最大层数限制的,比如AUFS,最大不得超过层。所以正确的写法如下:

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/r
edis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-component
s=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps

  使用&&将各个所需命令串联起来,仅使用一个RUN命令,所以只构建了1层。行尾\表示换行,这里在最后还进行了清理工作,清理了下载、展开的文件等。

  

  构建镜像

    一、docker build [选项] <上下文路径/URL/->

      -t:执行镜像的名称<名称>:<标签>

    上下文路径:.并非表示Dockerfile文件所在的当前路径,而是指上下文路径。因为docker build命令构建镜像,并非在本地构建,而是在服务端,也就是Docker引擎中构建的。用户指定构建的上下文的路径,docker build命令得知这个路径后,会将路径下的所有内容打包,然后上传给Docker引擎。

    二、从rootfs压缩包导入

      命令:docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]

      压缩包可以是本地文件、远程web文件,甚至标准输入中得到。压缩包将会在镜像/目录展开,并直接作为第一次提交。

    三、docker save 和 docker load

      docker save:将镜像保存为归档文件

        示例:docker save alpine | gzip > alpine-latest.tar.gz

      docker load:加载镜像

        示例:docker load -i alpine-latest.tar.gz

      从一个机器将镜像迁移到另一个机器

        docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> ‘cat | docker laod’

管理本地镜像

  删除本地镜像:docker rmi [选项] <镜像1> [<镜像2> ...]

    <镜像>:可以是镜像短ID(一般取前3位)、镜像长ID、镜像名或者镜像摘要

    Untagged:表示取消镜像的标签

    Deleted:真正的删除镜像动作

  也可配合docker images命令来删除指定的镜像

镜像实现基本原理 

  Union FS用途:一方面可以实现不借助LVM、RAID将多个disk挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD正式基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些些操作。Docker在AUFS上构建的容器也是利用了类似的原理。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

参考:《docker_practice》

Docker学习(二): 镜像的使用与构建的更多相关文章

  1. Docker学习笔记(2):使用Dockerfile构建镜像

    Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本.每条指令都必须为大写字母且后面要跟随至少一个参数,每条指令都会创建一个新的镜像层,并对镜像进行提交. Docker ...

  2. 4.docker学习之镜像

    镜像 我们知道,我们想在Windows操作系统上跑Linux,需要安装一个虚拟机程序,然后下载一个Linux镜像,在该虚拟机程序中创建一个虚拟机,并使用该镜像安装对应的Linux操作系统,安装好之后, ...

  3. Docker 学习之镜像导入导出及推送阿里云服务器(三)

    在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像 ...

  4. docker学习二

    B站视频地址 3.docker的基本操作 3.1 安装docker 1.下载关于Docker的依赖环境 想安装Docker,需要先将依赖的环境全部下载下来,就像Maven依赖JDK一样 yum -y ...

  5. 【docker学习二】CentOS7.5+Docker 镜像(容器)的使用

    承接上篇:https://mp.csdn.net/postedit/82744127 上文介绍了容器与镜像的基本操作,这里总结下容器的使用. 先在官网找到一个镜像: https://hub.docke ...

  6. Docker学习以及镜像制作流程

    一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  7. docker学习(二)

    1 镜像 docker使用联合加载技术,一次同时加载多个文件系统,在外面只能看到一个文件系统 docker使用写时复制,每个只读镜像层都是只读的,也永远不会发生变化,建立一个新容器,会构建一个镜像栈, ...

  8. Docker学习之镜像操作

    使用Docker镜像 以下都是Docker镜像的一系列重要名操作,包括获取.查看.搜索.删除.创建.存出或载入.上传等.可使用docker image help命令查看帮助. 1.获取镜像(pull) ...

  9. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

随机推荐

  1. ryu 下发流表配置

    资料链接:http://ryu.readthedocs.io/en/latest/app/ofctl_rest.html 运行ryu进程: ryu-manager --ofp-tcp-listen-p ...

  2. java学习笔记—Servlet技术(11)

    如果大家要开发一个动态的网站,那么就必须要学习一种动态的网页开发技术.那么在SUN提供的JavaEE中主要包含两种开发动态网页的技术:Servlet和JSP技术. Servlet技术简介 Servle ...

  3. 工作中常用Linux命令

    建立软链接  ln -s      例:ln -s b a 解释:把文件夹a和文件夹b关联起来,访问文件夹a,实际访问的是问价夹b 删除软连接  rm -rf a  直接删掉a文件夹跟a和b的软连接. ...

  4. 根据IP获取IP定位

    http://ip.taobao.com/service/getIpInfo.php?ip=27.17.60.152 {,"}} 不确定是否有次数限制

  5. (四)SSO之CAS框架单点登录,自定义验证登录方式

    应需求的变化,在登录cas的时候,默认根据用户名和密码进行验证,如果加上用户名,密码和一个系统标识进行验证呢?该如何做呢? 我们知道cas默认的登录界面中,输入的用户名和密码,再配置一下deploye ...

  6. 关于找不到stdafx.h头文件问题(pass)

    代码: #include "stdafx.h" #include "stdlib.h" char* getcharBuffer() { return " ...

  7. Java多线程——不变性与安全发布

    1.不变性 某个对象在被创建后其状态就不能被修改,那么这个对象就称为不可变对象,不可变对象一定是线程安全的.不可变对象很简单.他们只有一种状态,并且该状态由构造函数来控制. 当满足以下条件时,对象才是 ...

  8. Flowportal-BPM——环境配置

    环境配置: 一.控制面板→程序和功能→打开或不关闭Window功能→选择选项 二.控制面板→管理工具→Internet信息服务(IIS)管理器→左侧第一个→ISAPI和CGI限制→全部选为[允许] 三 ...

  9. mysql 与sqlser group by

    mysql select * ,count(1)  from simccbillm18 group by MonthNum; SqlSer select  col1,col2 from table g ...

  10. 【Alpha】Phylab 发布说明

    Phylab Alpha阶段发布说明 一.发布地址 Phylab 二.新功能 1. 控制台 由于往届项目控制台并未发布,因此我们在完善后将这部分放在新功能部分.目前使用控制台需要向开发者申请. 1.1 ...