Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,由dotCloud公司发起,此公司后更名为Docker Inc.Docker项目已加入Linux基金会,并遵循Apache2.0协议,代码托管在Github:Docker源码地址nginx
各大操做系统现都支持Docker,而且最新的Linux发行版RedHat、CentOS、Ubuntu中均已默认带有Docker软件包.git
Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即经过对应用的封 装( Packaging)、分发( Distribution)、部署( Deployment)、运行( Runtime)生命周期进行管 理,达到应用组件级别的“ 一次封装 ,处处运行” 。 这里的应用组件, 既能够 是一个 Web 应 用、一个编译环境,也能够是一套数据库平台服务,甚至是一个操做系统或集群。github
基于 Linux 平 台上的多项开源技术, Docker 提供了高效、敏捷和轻量级的容器方案,并 支持部署到本地环境和多种主流云平台 。 能够说 , Docker首次为应用 的开发 、运行和部署提 供了“一站式”的实用解决方案。web
早期Docker代码实现是基于LXC(Linux Containers,即Linux容器),自0.9版本开始,Docker开发了libcontainer项目做为更普遍的容器驱动实现.docker
简单地讲,读者能够将 Docker 容器理解为一种轻量级的沙盒( sandbox)。 每一个容器内 运行着一个应用,不一样的容器相互隔离,容器之间也能够经过网络互相通讯。 容器的建立和 中止十分快速,几乎跟建立和终止原生应用 -致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机 。 不少时候,甚至直接把容器看成应用自己也没有任何 问题。shell
Docker 运行基本命令和模式:数据库
Docker Engine:ubuntu
Docker architecture:浏览器
虚拟化 (virtualization)技术是一个通用的概念,在不一样领域有不一样的理解。 在计算领 域,通常指的是计算虚拟化 (computingvirtualization),或一般说的服务器虚拟化。 维基百科 上的定义以下:安全
“在计 算机技 术中,虚拟化 是 一种资 源管理技术,是将 计 算机 的各类实 体资 源,如服务器 、 网络、 内存及存储等,予以抽 象、转换后呈现出来,打破实体 结 构间的不可切割的障碍,使用户能够用比本来的纽态更好的方式来应用这些资源 。”
可见,虚拟化的核心是对资源的抽象,目标每每是为了在同一个主机上同时运行多个系
统或应用,从而提升系统资源的利用率,而且带来下降成本、方便管理和容错容灾等好处 。
Docker 和常见的虚拟机方式的不一样之处:
用户能够访问 Docker 官网的 Get Docker Docker 官网页面,查看获取 Docker 的方式,以及 Docker 支持的平台类型目前 Docker 支持 Docker 引 擎、 Docker Hub、 Docker Cloud 等多种服务 。
Linux安装
$sudo apt-get update $sudo apt-get install docker-ce docker-ce-cli containerd.io
Mac安装
$brew cask install docker
或者:
手动下载安装 :Docker Mac传送门
运行:
安装完成后启动Docker服务,而后尝试运行以下命名:
$docker run -d -p 80:80 --name webserver_test nginx # 而后在浏览器访问:http://127.0.0.1 看看效果,一个nginx服务器已经搭建完成了,是否是很香
镜像是Docker三大核心概念中最重要的,是建立 Docker容器的基础。本质上是一个文件,经过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来建立和更新现有的镜像,用户甚至能够从网上下载一个已经作好的应用镜像,并直接使用.
Docker 运行容器前须要本地存在对应的镜像, 若是镜像不存在, Docker 会尝试先从默 认镜像仓库下载(默认使用 Docker Hub 公共注册服务器中的仓库), 用户也能够经过配置, 使用自定义的镜像仓库。
$docker pull NAME [:TAG] $docker pull ubuntu:18.04 命令至关于 docker pull registry.hub.docker.com/ubuntu:18.04 若是从非官方的仓库下载,则须要在仓库名称前指定完整的仓库地址 NAME:镜像仓库名称 TAG:镜像标签,若是不指定默认为latest,即会下载仓库中最新版本的镜像
注意:
通常来讲,镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变动而变化,内容是不稳定的。所以,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使 用默认的latest 标记的镜像。
$docker images 或者 $docker image ls # 参数 > --digests=true|false: 列出镜像的数字摘要值,默认为否; > -f, --filter=[] : 过滤列出的镜像, 如dangling=true 只显示没有被使用的 镜像;也可指定带有特定标注的镜像等; > --format="TEMPLATE" : 控制输出格式,如: .ID表明ID信息,.Repository 表明仓库信息等; > -q, --quiet=true|false: 仅输出ID信息, 默认为否 更多子命令选项还能够经过man docker-images来查看
显示如图:
为了方便在后续工做中使用特定镜像,还可使用docker tag
命令来为本地镜像任 意添加新的标签。 例如,添加一个新的myubuntu: latest镜像标签:
$docker tag ubuntu:latest myubuntu:latest
使用 docker inspect
命令能够获取该镜像的详细信息,包括制做者、适应架构、各层的数字摘要等:
$docker inspect ubuntu:18.04 # 上面代码返回的是一个JSON格式的消息,若是咱们只要其中一项内容时,可使用 -f 来指定,例如,获取镜像的ContainerConfig: $docker inspect -f {{".ContainerConfig"}} ubuntu:18.04
history
命令查看镜像历史history
子命令,该命令将列出各层的建立信息。$ docker search nginx 参数: -f, --filter filter: 过滤输出内容 --format string: 格式化输出内容 --limit int: 显示个数,默认25 --no-trunc: 不截断输出结果 $ docker search --filter=is-official=true nginx
使用 docker rmi
或 docker image rm
命令能够删除镜像, 命令格式为 docker<br/>rmi IMAGE [IMAGE ... ]
, 其中 IMAGE 能够为标签或 ID。
$docker rmi myubuntu:latest 参数: -f, -force: 强制删除镜像, 即便有容器依赖它; -no-prune: 不要清理未带标签的父镜像。 注意: 当同 一 个镜像拥有多个标签的时候,docker rmi 命令只是删除了该镜像多个标签中的指定 标签而巳, 并不影响镜像文件 # 删除全部镜像 $docker rmi $(docker ps -a) # 慎用啊!!!!
使用Docker一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使 用的镜像, 能够经过docker image prune
命令来进行清理。
建立镜像的方法主要有三种:
Dockerfile是一个文本格式的配置文件,用户可使用Dockerfile来快速建立自定义的镜像。由一行行命令语句组成,而且支持以#开头的注释行。通常而言,Dockerfile主体内容分为四部分:
未完待续......