Docker包括三个核心要素:镜像(Image)容器(Container)仓库(Repository)
Docker不是容器,它是管理容器的引擎
镜像
Docker镜像就是一个只读的模板,可以用来创建Docker容器。
例如:一个镜像可以包含一个完整的Ubuntu操作系统环境,里面仅安装了tomcat或者用户需要的其他应用程序。
Docker提供了一个非常简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
镜像的组成结构
镜像是由许多文件系统叠加构成的,最下面是一个引导文件系统bootfs,第二层是一个root文件系统rootfs,root文件系统通常是某种操作系统,比如centos、Ubuntu,在root文件系统之上又有很多层文件系统,这些文件系统叠加在一起,构成docker中的镜像。(镜像是只读的,容器是可以读写的)
镜像的日常操作
1.下载镜像
docker pull redis:3.2.12
如果有官方镜像,就不必用Dockerfile文件构建了,除非官方没有才会自己去Dockerfile文件构建
2.列出已经下载的镜像
docker images
或者
docker images redis
3.运行镜像
docker run -d tomcat
从客户机上访问容器,需要有端口映射,docker容器默认采用桥接模式与宿主机通信,需要将宿主机的ip端口映射到容器的ip端口上。
docker run -d -p 8080:8080 tomcat
然后通过
ps -ef |gerp tomcat
查到tomcat进程
4.查看容器镜像的状态
docker ps
先查看得到容器id,如ec6e73e83323 ,bash意为进入命令行
docker exec -it ec6e73e83323 bash
which redis-server
删除镜像
docker stop ec6e73e83323
docker images
docker rmi docker.io/redis
容器
容器是从镜像创建的运行实例。它可以被启动、停止、删除。每个容器都是相互隔离的、保证安全平台。可以把它看做一个简易版的Linux环境,包括root用户权限、进程空间、用户空间、网络空间和运行在其中的应用程序。
Docker利用容器来运行应用,镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
容器的日常操作
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一种是将终止状态的容器重新启动。
通过镜像启动容器:docker run -d redis
查看运行中的容器:docker ps
查看所有的容器:docker ps -a
停止容器:docker stop 容器id或容器名称
已经停止的容器,可以使用docker start
来启动
开启容器:docker start 容器id或容器名称
删除容器:docker rm 容器id或容器名称
删除容器时,容器必须是停止状态,否则会报错
进入容器:docker exec -it 容器id或容器名称 bash
查看容器更多信息 docker inspect 容器id或容器名称
停用全部运行中的容器 docker stop ${docker ps -q}
删除全部容器 docker rm ${docker ps -aq}
一条命令实现停用并删除容器docker stop ${docker ps -q} & docker rm -f ${docker ps -aq}
仓库
仓库是集中存放镜像文件的场所,有时候会把仓库和仓库注册服务器(Registry)看做同一事务,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag);
仓库分为公开仓库(Public)和私有仓库(Private)两种形式
最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载;
当然,用户也可以在本地网络创建一个私有仓库;
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像的时候,只需要从仓库上pull下来即可;
仓库的日常操作
用户通过docker search
命令来查找官方仓库中的镜像
docker search tomcat
可以看到返回了很多包含关键字的镜像,其中包括镜像名字、描述、星级(受欢迎程度)、是否官方创建、是否自动创建;官方的镜像说明是官方项目组创建和维护的,automated资源允许使用用户验证镜像的来源和内容。
根据是否官方提供,可将镜像资源分为两类:
一种是基础或根镜像:由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。
另一种是用户创建并维护的镜像:往往带有用户名称前缀。可以通过前缀user name/来指定使用某个用户提供的镜像。
如:使用docker pull
命令将它下载到本地
docker pull bitnami/redis
网友评论