Docker核心组件
1. Docker架构
Docker使用客户端 - 服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
2. Docker核心要素
2.1 客户端
2.2 Docker Daemon 即 Docker 引擎
2.3 Image 镜像
2.4 Container 容器
2.5 Repository 仓库 (参照Docker Hub)
其中在使用过程中,我们要理解的核心要素为 镜像、容器和仓库。
镜像(Image)与容器(Container)的关系,类似于面向对象编程中类(Class)与对象(Object)的关系。
通过镜像创建容器,就如同通过类创建对象。
2.1 镜像(Image)
2.1.1 镜像的基本概念
Docker镜像就是一个只读的模板,可以用来创建Docker容器。例如,一个镜像可以包括一个完整的centos操作系统环境,里面仅安装了mysql或用户需要的其他应用程序。
(上篇文章示例中的tomcat镜像,就包含了centos操作系统环境,以及java运行环境JDK,以及tomcat,因为tomcat的运行需要JDK的支持)
Docker提供了非常简单的机制来创建镜像或更新现有的镜像,用户甚至可以直接从其他人那里下载一个做好的镜像来直接使用。
2.1.2 镜像的组成结构
镜像是由许多层的文件系统叠加构成的,最下面是一个引导文件系统的bootfs,第二层是一个root文件系统rootfs,root文件系统通常是某种操作系统,比如centos、Ubuntu,在root文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成docker中的镜像;
2.1.3 镜像的日常操作
- 下载镜像,比如下载redis镜像: docker pull redis:latest
redis是查询到的镜像名称,latest是镜像的标签tag
获得一个镜像有两种方式,一种是从官方镜像仓库下载,一种是通过dockerfile文件创建。
如果是官方镜像,我们就不必自己用dockerfile文件构建了,除非官方没有才会自己去dockerfile文件构建;
Tips: docker镜像拉取加速器
通过登录阿里云ECS后台查看加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
编辑/etc/docker下的daemon.json文件,加上如下内容
{“registry-mirrors”:[“https://你的ID.mirror.aliyuncs.com”]}
保存退出后,重启docker服务即可
- 列出已下载的镜像:
docker images 或者 docker images redis - 运行镜像
docker run -d redis 其中d表示后台运行
然后通过 ps -ef | grep redis 可以查到redis进程 - 查看容器的状态
docker ps - 删除镜像
docker rmi redis
注意是rmi,不是rm,rm是删除容器
2.2 容器
2.2.1 容器的基本概念
容器是从镜像创建的运行实例。它可以被启动、停止、删除。
每个容器都是相互隔离的、保证安全平台。
可以把它看作一个简易版的Linux环境,包括root用户给权限,进程空间、
用户空间、网络空间和运行在其中的程序。
Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建
一层可写层作为最上层。
2.2.2 容器的日常操作
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在
终止状态的容器重新启动。
-
通过镜像启动容器
docker run -d -p 6379:6379 redis -
已经停止的容器,我们可以通过docker start命令来启动
开启容器
docker start 容器ID或容器名称 -
查看运行中的容器
docker ps -
查看所有的容器
docker ps -a -
进入容器
docker exec -it (容器ID或容器名) bash -
停止容器
docker stop 容器ID或容器名 -
删除容器 (删除前先停止)
docker rm 容器ID或容器名 -
还可以使用
docker inspect 容器ID或容器名 查看容器的更多信息 -
关闭所有容器 (q表示quiet,只显示容器ID)
docker stop $(docker ps -q) -
删除全部容器 (a表示all,所有容器信息,默认只显示正在运行的)
docker rm $(docker ps -aq) -
一条命令实现关闭并删除所有容器
docker stop $(docker ps -q) & docker rm -f $(docker ps -aq)因为docker的容器实在太轻量级了,很多时候用户都是随时删除 和新创建容器。
2.3 仓库(Repository)
2.3.1 仓库的基本概念
仓库是集中存放镜像文件的场所,有时候会把仓库和仓库注册服务器
(Registry)看作同一事物,并不严格区分。实际上,仓库注册服务器上往往
存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
tag;
仓库分为公开仓库(public)和私有仓库(private)两种形式;
最大的公开仓库是 Docker Hub (https://hub.docker.com),存放了
数量庞大镜像供用户下载。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或私有
仓库。这样下次在另外一台机器上使用这个镜像的时候,只需要从仓库pull
下来即可。
注: Docker仓库的概念和Git类似,注册服务器也类似于GitHub这样的
托管服务。
2.3.2 仓库日常操作
用户可通过 docker search 命令来查找官方仓库中的镜像:
docker search rabbitmq
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级
(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建;官方的镜像说明
是官方项目组创建和维护的,automated资源允许用户验证镜像的来源和内容。
根据是否是官方镜像,可将镜像资源分为两类;
一种是类似 centos 这样的基础镜像,被称为基础或根镜像。这些基础镜像
由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为
名字;
还有一种类型,比如 tianon/centos 镜像,是由Docker的用户创建并维
护的,往往带有用户名称前缀。可以通过前缀user_name/ 来指定使用某个用户
创建的镜像。