Copy on Write(写时复制)
Docker镜像实际上一个文件系统,但只有顶层可以读写。
Dockerfile是软件的原材料,Docker镜像是软件的交付品,而Docker容器则可以认为是软件的运行态。
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
1.查看一类镜像
$ docker image ubuntu
2.查看一个镜像的详细信息
$ docker inspect ubuntu100
3.Docker镜像的制作方法:
1)使用Commit命令 (不推荐)
2) 使用DockerFile
4.使用Commit制作镜像
$ docker run -i -t ubuntu:lastest /bin/bash
$ apt-get update
$ apt-get install apache2
$ docker commit [container] [newcontainername]
5.使用DockerFile制作镜像
1)创建static_web文件,创建文件Dockerfile,内容如下:
# Version: 0.0.1
FROM ubuntu:14.04
MAINTAINER edison "xiangxingyong@qq.com"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hello,edison'
>/usr/share/nginx/html/index.html
EXPOSE 80
橙色部分全部使用大写字母。
2)Docker执行Dockerfile文件的流程如下:
- Docker从基础镜像运行一个容器。
- 执行一条指令,对容器做出修改。
- 执行类似Docker Commit的操作,提交一个新的镜像层。
- Docker再基于刚提交的镜像运行一个新容器。
- 执行Dockerfile中的下一条指令,直到所有指令都执行完毕。
3)Docker build命令执行上下文。
$ docker build -t="docker/static_web" .
4)从新镜像启动容器
$ docker run -d -p 80 --name static_web docker/static_web nginx -g "daemon off;"
-d选项表示以分离(detached)的方式在后台运行。
nginx -g "daemon off;"是在容器中执行的命令,启动nginx来作为Web服务器。
-p 用来控制Docker在运行时应该公开那些网络端口给外部宿主机。
可以指定外部宿主机的具体端口号来映射容器公开的端口。例如:-p 10000:80
如果不指定外部宿主机的具体端口,Docker会选择49000~49900之间的随机端口。
5)查看Images的历史信息
$ docker history docker/static_web