什么是Docker
Docker 是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在本地编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。
使用Docker好处
简化配置
虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个Docker的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度。
代码流水线管理
代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中坚环境. 而每一个中间环境都有自己微小的差别, Docker给应用提供了一个从开发到上线均一致的环境, 让代码的流水线变得简单不少.
提升开发效率
开发者可以贴近生产环境,并可以快速搭建开发环境。Docker可以轻易的让几十个服务在Docker中跑起来。
隔离应用
将一个整体式的应用拆分成低耦合的单个服务(微服务架构)
Docker基本概念
镜像(Image)
Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像是一个静态的概念,不包含任何动态数据,其内容在构建之后也不会被改变。
容器(Container)
Docker的镜像是用于生成容器的模板,镜像分层的,镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象,对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。
仓库(Repository)
用来存放和分发镜像的服务,Docker Hub就是Docker提供用于存储和分布镜像的官方Docker Registry,也是默认的Registry,其网址为https://hub.docker.com。
Docker基本命令
镜像常用命令
搜索镜像
1 | docker search java |
再上图的结果中共有5列,分别代表以下含义
- NAME:镜像仓库名称
- DESCRIPTION:镜像仓库描述
- STARS:镜像仓库收藏数,跟GitHub的stars一样一样的
- OFFICAL:表示是否为官方仓库,该列标记为【OK】的镜像均由各软件的官方项目组创建和维护。
- AUTOMATED:表示是否自动构建的镜像仓库
下载镜像
1 | docker pull java |
执行该命令后,Docker会从Docker Hub中的java仓库下载最新版本的java镜像
列出镜像
1 | docker images |
列出已下载的镜像
上图的结果共有5列,分别代表以下含义
- REPOSITORY:镜像所属仓库名称
- TAG:镜像标签,latest表示最新的
- IMAGE ID: 镜像ID,表示镜像唯一标识
- CREATED:镜像创建时间
- SIZE:镜像大小
删除本地镜像
使用docker rmi命令即可删除指定镜像
容器常用命令
新建并启动容器
1 | dokcer run 镜像名 |
常见选项
- d:表示后台运行
- P:随机端口映射
- p:指定端口映射,有四种格式
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
列出容器
1 | docker ps |
上图的结果共有7列,分别代表以下含义
- CONTAINER_ID:表示容器ID
- IMAGE:表示镜像名称
- COMMAND:表示启动容器时运行的命令
- CREATED:表示容器的创建时间
- STATUS:表示容器运行状态,Up为运行中,Exited为停止
- PORTS:表示容器对外的端口号
- NAMES:表示容器名称
停止容器
1 | docker stop ContainerId |
强制停止容器
1 | docker kill ContainerId |
启动已停止的容器
1 | docker start ContainerId |
重启容器
1 | docker restart |
删除容器
1 | docker rm Container |
小知识:该命令只能移除已停止的容器,如果需要移除正在运行的容器,可以使用-f参数