使用Docker镜像

什么是Docker镜像?

Docer的镜像是一个只读的文件系统,除了提供容器(进程)运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会改变。

获取镜像

Docker Hub上有大量的高质量的镜像可以用,从Docker镜像仓库获取镜像的命令是docker pull,其命令格式为

   docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

镜像名称的格式为:

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker
    Hub。
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 / 。对于 Docker
    Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。

运行

有了镜像之后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的 ubuntu:16.04 为
例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令。

 docker run -it --rm     ubuntu:16.04     bash

这里我们是手动的根据镜像启动容器,我们接下来看下docker run的各种参数的详解。
Docker run后的参数很多,Docker会在隔离的容器中运行进程,当运行docker run 命令时,Docker回启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新的定义,就是说,docker run可以控制一个容器运行时的行为,比如监听的端口号,它可以覆盖docker build在构建镜像时的一些默认配置。

正常的命令行为

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

这里我们先来说下OPTIONS

Detached(-d)
容器运行在后台模式?后台模式和前台模式的区别待详细。

Name(--name)
指定运行的容器名称

Network settings(--net 或 --mac-address)
默认情况下所有容器都是开启了网络接口,可以使用--net none来关闭网络接口,也可以使用 --mac-address 12:34这种方式来设置容器的MAC地址。

Clean up(--rm)
设置该命令时,每个容器在退出时,它的文件系统并不会保存下来。并且--rm和-d是不可同时使用的。

暴露端口(-p)
使用-p来使容器和主机的对应端口进行绑定,可以手动指定,也可以走默认的。

环境变量(-e)
使用-e来给容器中进程设定环境变量,甚至可以覆盖已经存在的环境变量,比如 -e "deep=purple"

COMMAND也就是CMD是可以用来覆盖默认的执行命令的。

run指令参考文章 http://dockone.io/article/152,文中还有许多其他许多参数的解释

列出镜像

想要列出已经下载了的镜像,可以使用docker image ls命令。

在镜像下载和上传的过程中镜像是保持着压缩状态的,所以这里列表出来的镜像的大小会比较大。

docker system df 命令用来查看镜像、容器、数据卷所占用的控件、

虚悬镜像

由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为none的镜像。这类无标签镜像也被成为虚悬镜像。

docker image ls -f dangling=true 用来查看虚悬镜像

删除镜像

首先,如果有在使用该镜像的容器正在运行,则需要首先停止该容器并删除该容器

//停止运行中的容器
docker stop [容器id]

//删除容器
docker rm [容器id]

//删除镜像
docker rmi [镜像id]

中间层镜像

Docker会利用中间层镜像,所以在使用了一段时间之后,可能会看到一些依赖的中间层镜像。

docker image -a 列出包括着中间层镜像在内的所有镜像

列出部分镜像

//根据仓库名列出镜像
docker image ls ubuntu
//列出特定的某个镜像
docker image ls ubuntu:16.04
//列出所有镜像的id
docker image ls -q

查看镜像详细信息

docker inspect [镜像ID]

利用commit理解镜像构成

docker commit命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,定制镜像最好还是使用Dockerfile来完成。

镜像是容器的基础,每次执行docker run的时候都会指定哪个镜像作为容器运行的基础。之前我们经常使用docker hub上的镜像,但是当这些镜像无法直接满足需求时,我们就需要定制这些镜像。

我们之前有学,镜像是多层存储的,每一层是在前一层的基础上进行的修改;而容器同样也是多层存储,是在以镜像为基础

docker run --name blackwebserver -d -p 80:80 nginx

使用NGINX镜像启动一个容器,命名为blackwebserver,并且映射了80端口,

进入容器的命令:

docker exec -it blackwebserver 

将修改了的容器保存为新的镜像

docker commit blackwebserver nginx/blackwebserver

docker commit命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

这里的commit就有点类似于git commit了,将修改好的程序commit生成我们的静态文件(项目)。然后可以将镜像push到镜像仓库中(docker push 指令)。

这里简单的介绍了下镜像的各种操作指令,当然镜像的实现原理还是需要去深究一下子的。下文再叙!

原文地址:https://www.cnblogs.com/blackgan/p/9215787.html

时间: 2024-08-30 01:54:55

使用Docker镜像的相关文章

Docker 镜像加速器

Docker 镜像加速器 我们使用Docker的第一步,应该是获取一个官方的镜像,例如mysql.wordpress,基于这些基础镜像我们可以开发自己个性化的应用.我们可以使用Docker命令行工具来下载官方镜像.但是因为网络原因,我们下载一个300M的镜像需要很长的时间,甚至下载失败.因为这个原因,阿里云容器Hub服务提供了官方的镜像站点加速官方镜像的下载速度. 使用镜像加速器 在不同的系统下面,配置加速器的方式有一些不同,所以我们介绍主要的几个操作系统的配置方法.关于加速器的地址,你只需要登

从零开始构建一个centos+jdk7+tomcat7的docker镜像文件

从零开始构建一个centos+jdk7+tomcat7的镜像文件 centos7系统下docker运行环境的搭建 准备centos基础镜像 docker pull centos 或者直接下载我准备好的镜像 docker pull registry.cn-hangzhou.aliyuncs.com/repos_zyl/centos:0.0.1 准备jdk7和tomcat7安装包 创建工作目录, mkdir -p /z/docker 准备下载jdk7的tar.gz包http://download.o

docker镜像-运行

一.docker镜像 镜像是 Docker 的三大组件之一. Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下 载(默认是 Docker Hub 公共注册服务器中的仓库). 1.获取镜像 Docker Hub 上有大量的高质量的镜像可以用, 从 Docker Registry 获取镜像的命令是 docker pull . 其命令格式为: docker pull [选项] [Docker Registry地址]<仓库名>:<标签> 具体

创建属于自己的docker镜像

docker镜像是容器的基础,当每次执行docker run时就是在对docker说现在我需要哪个镜像.如果在你的docker主机上没有这个镜像,docker会自动从一个registry上下载这个镜像(默认为docker hub) 在这一节,我们将会探讨更多的关于docker镜像的内容: 管理和使用本地镜像 创建基础镜像 使用docker images命令列出本地的docker镜像 [[email protected] ~]# docker images  REPOSITORY         

《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并完成了完整性检查之后,它才会被切换为读写模式.但是在docker里,root文件系统永远只能是只读状态,并且docker利用联合加载技术又会在root文件系统层上加载更多的只读文件系统.联合加载指的是一次同时加载多个文件系统,但是在外面看起来只能看到一个文件系统.联合加载将各层文件系统叠加到一起,这

Docker镜像文件(images)的存储结构

原文作者: Troy Howard(http://blog.thoward37.me/)原文地址:http://blog.thoward37.me/articles/where-are-docker-images-stored/ 翻译:刘斌(http://liubin.org/)本文地址:http://liubin.org/2014/03/10/about-docker-images-storage/ ? 关于本文的任何指正,请在新浪微博联系我或者在Twitter上. 如果你是刚开始接触 Doc

教你打包自己的专属docker镜像

前序 什么是docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 具体关于Docker更多的介绍请自行网上查阅 一.Docker环境的搭建 Docker基于Linux系统为基础的,所以我们先要准备一台Linux系统,这里以CentOS6.8为例 1.检查系统是否可以上网 # ping www.baidu.com 2.安装epel

Docker镜像与仓库(二)Dockerfile

Docker镜像文件与仓库(二) Docker镜像文件与仓库(二) Dockerfile指令 Dockerfile格式: 1.#Comment注释2.INSTRUCTION大写的指令名 argument参数 FROM 1.FROM <image>2.FROM <image>:<tag>3.#通过FROM指定的镜像名都必须是已经存在的镜像,这个镜像叫做基础镜像,而且必须是第一条非注释指令 MAINTAINER 1.MAINTAINER <name>2.#指定镜

玩转Docker镜像

前言 Docker 是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议.通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情 况下提供资源隔离的应用运行环境.由于众多新颖的特性以及项目本身的开放性,Docker在不到两年的时间里迅速获得诸多IT厂商的参与,其中更是包括 Google.Microsoft.VMware等业界行业领导者.同时,D

构建Docker镜像仓库的另一选择:Nexus3 - DockOne.io

我们知道,构建企业内部私有Docker镜像仓库有很多选择,比如可以采用原生的Docker Registry服务,也可以部署更加专业的工具,例如SUSE team的Portus (https://github.com/SUSE/Portus)或VMware出品的Harbor(https://github.com/vmware/harbor).我们也就曾对Harbor这样的产品做过较为详细的分析(http://mp.weixin.qq.com/s/oQoLgNgnfM8TQHnDDOOIog).然而