首页 > 网站 > 建站经验 > 正文

理解Docker(2):Docker 镜像详细介绍

2019-11-02 16:27:50
字体:
来源:转载
供稿:网友

本系列文章将介绍Docker的有关知识:

(1)Docker 安装及基本用法

(2)Docker 镜像

(3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境

(4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源

(5)Docker 网络

对于每个软件,除了它自身的代码以外,它的运行还需要有一个运行环境和依赖。不管这个软件是象往常一样运行在物理机或者虚机之中,还是运行在现在的容器之中,这些都是不变的。在传统环境中,软件在运行之前也需要经过 代码开发->运行环境准备 -> 安装软件 -> 运行软件 等环节,在容器环境中,中间的两个环节被镜像制作过程替代了。也就是说,镜像的制作也包括运行环境准备和安装软件等两个主要环节,以及一些其他环节。因此,Docker 容器镜像其实并没有什么新的理论,只是这过程有了新的方式而已。

  镜像(image)是动态的容器的静态表示(specification),包括容器所要运行的应用代码以及运行时的配置。Docker 镜像包括一个或者多个只读层( read-only layers ),因此,镜像一旦被创建就再也不能被修改了。一个运行着的Docker 容器是一个镜像的实例( instantiation )。从同一个镜像中运行的容器包含有相同的应用代码和运行时依赖。但是不像镜像是静态的,每个运行着的容器都有一个可写层( writable layer ,也成为容器层 container layer),它位于底下的若干只读层之上。运行时的所有变化,包括对数据和文件的写和更新,都会保存在这个层中。因此,从同一个镜像运行的多个容器包含了不同的容器层。

 Docker 有两种方式来创建一个容器镜像:

创建一个容器,运行若干命令,再使用 docker commit 来生成一个新的镜像。不建议使用这种方案。 创建一个 Dockerfile 然后再使用 docker build 来创建一个镜像。大多人会使用 Dockerfile 来创建镜像。

1. docker build 生成镜像

1.1 生成过程实例

 在使用 Dockerfile 创建容器之前,需要先准备一个 Dockerfile 文件,然后运行 docker build 命令来创建镜像。我们通过下面的例子来看看Docker 创建容器的过程。

 FROM ubuntu:14.04MAINTAINER sammy "sammy@sammy.com"RUN apt-get updateRUN apt-get -y install ntpEXPOSE 5555CMD ["/usr/sbin/ntpd"]

这是一个非常简单的Dockerfile,它的目的是基于 Ubuntu 14.04 基础镜像安装 ntp 从而生成一个新的镜像。看看其过程:

root@devstack:/home/sammy/ntponubuntu# docker build -t sammy_ntp2 .Sending build context to Docker daemon 2.048 kBStep 1 : FROM ubuntu:14.04 ---> 4a725d3b3b1cStep 2 : MAINTAINER sammy "sammy@sammy.com" ---> Using cache ---> c4299e3f774cStep 3 : RUN apt-get update ---> Using cache ---> 694a19d54103Step 4 : RUN apt-get -y install ntp ---> Running in 9bd153c65a76Reading package lists......Fetched 561 kB in 10s (51.1 kB/s)Selecting previously unselected package libedit2:amd64.(Reading database ... 11558 files and directories currently installed.)...Processing triggers for libc-bin (2.19-0ubuntu6.9) ...Processing triggers for ureadahead (0.100.0-16) ... ---> 9cc05cf6f48dRemoving intermediate container 9bd153c65a76Step 5 : EXPOSE 5555 ---> Running in eb4633151d98 ---> f5c96137bec9Removing intermediate container eb4633151d98Step 6 : CMD /usr/sbin/ntpd ---> Running in e81b1eae3678 ---> af678df648bcRemoving intermediate container e81b1eae3678Successfully built af678df648bc
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表