docker介绍

一,docker vs 虚拟机

虚拟机是在一台物理机器上,利用虚拟化技术,虚拟出来多个操作系统,每个操作系统之间是隔离的。Docker是开源的应用容器引擎,依然需要先在电脑上安装操作系统,然后安装Docker容器的管理器才可以。虚拟机是在硬件级别进行虚拟化,而Docker是在操作系统的层面虚拟化;虚拟机是通过模拟硬件搭建操作系统, Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

形象地说,虚拟机相当于一栋楼包含多套房,一套房一户人家,共享地基,共享花园,独立卫生间,厨房和宽带。

docker像一套房被隔成多个小隔间(胶囊式公寓),每个胶囊住一位租户,共享地基,共享花园,独立卫生间,厨房和宽带。

docker介绍

docker在操作系统层面虚拟化,多了一层容器管理器

docker介绍

由于docker的容器设定更轻巧,导致和虚拟机的性能等方面很多不同

二,docker原理

一种os虚拟化技术
一个开源的应用容器引擎
一次打包,到处运行

Docker的应用场景

    Web 应用的自动化打包和发布。

    自动化测试和持续集成、发布。

    在服务型环境中部署和调整数据库或其他的后台应用。

    从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。


Docker中一些概念:

宿主机host
运行docker所在的物理机,是docker运行的系统环境
镜像image
相当于一个程序模板,通过这个模板可以生成很多相似的容器
容器container
docker运行的最小单位对象,通过镜像实例化出来的一个可运行对象
仓库register
用于存储管理镜像的仓库,类似git管理代码的仓库,可以管理多版本的镜像

docker介绍

一句话总结就是从仓库中拉取镜像,利用镜像生成容器

镜像的组成:

1. rootfs(容器根文件系统)
系统上看起来像操作系统的标准根目录(/)。例如/usr,/var等目录
2.Json文件(容器配置)
用来指定如何运行rootfs。例如,在容器启动时,rootfs运行的命令或入口点;为容器设置的环境变量;容器的工作目录和其他设置

Docker打包了rootfs和JSON文件来创建基本镜像。这样就可以在rootfs上安装其他内容,创建新的JSON文件,并使用更新的JSON文件来解决原始镜像与新镜像之间的差异。这样就创建一个分层的镜像。

镜像分层

Docker 支持通过扩展现有镜像,创建新的镜像。Aufs是Another Union File System的缩写,支持将多个目录挂载到同一个虚拟目录下。已构建的镜像会设置成只读模式,read-write写操作是在read-only上的一种增量操作,固不影响read-only层。这样可以做到共享资源和资源容备。

docker介绍

镜像(Image)就是一堆只读层(read-only layer)的统一视角

docker介绍

容器(container)的定义和镜像(image)一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

docker介绍

三,理解docker命令

docker run

docker run :创建一个新的容器并运行一个命令
语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run --name mynginx -d nginx:latest
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker build

docker build 命令用于使用 Dockerfile 创建镜像。
语法:docker build [OPTIONS] PATH | URL | -

docker commit

docker commit :从容器创建一个新的镜像。
语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker save

docker save : 将指定镜像保存成 tar 归档文件。
语法:docker save [OPTIONS] IMAGE [IMAGE...]
例:docker save ubuntu:load>/root/ubuntu.tar

四,dockerfile

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。Dockerfile用来创建一个自定义的image, 包含了用户指定的软件依赖等。
docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
如docker build -f /path/to/a/Dockerfile


一些重点参数
•ENV
指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。格式为 ENV TZ ”Asia/Shanghai“
RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像,RUN命令用于创建镜像(在
之前commit的层之上形成新的层)
• WORKDIR
WORKDIR命令用于设置CMD指明的命令的运行目录。格式为 WORKDIR /path/to/workdir
FROM
基础镜像可以为任意镜像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。
FROM命令必须是Dockerfile的首个命令。如果同一个DockerFile创建多个镜像时,可使用多个FROM指令(每个镜像
一次)
• EXPOSE
指定在docker允许时指定的端口进行转发
• VOLUME
VOLUME命令用于让你的容器访问宿主机上的目录。格式为 VOLUME [“/data”]
• COPY
COPY 将文件从路径 <src复制添加到容器内部路径 <dest>。 COPY <src> <dest>
• ADD
ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源
是一个URL,那该URL的内容将被下载并复制到容器中。如果文件是可识别的压缩格式,则docker会帮忙解压缩。
• CMD
每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行
• ENTRYPOIN
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。 每个 Dockerfile 中只能有一个
ENTRYPOINT,当指定多个时,只有最后一个起效。