什么是docker?
基于宿主机,对进程进行封装隔离,属于操作系统层面的虚拟化技术。因为隔离的进程独立与宿主以及其他隔离的进程,称为容器。
docker在容器的基础上,进一步封装,从文件系统、网络端口到进程隔离。
为什么用docker?
- 相比于普通虚拟机,启动速度更快
- 保证一致的运行环境
- 持续部署(创建自定义镜像,一次性创建配置)
- 更轻松的迁徙(基于宿主机隔离出环境)
- 易于扩展(分层存储)
Docker安装
centos 7安装
yum install docker
systemctl start docker
docker run hello-world(检验是否安装成功)
镜像image
镜像相当于Linux的root文件系统,包括了容器运行时所需的资源。不同于普通iso镜像的是,docker的镜像是分层存储的,上一层是下一层的基础。
命令
拉取镜像---docker pull <域名/ip>:<端口> <用户名/镜像名>:<标签>
镜像列表---docker image ls
删除镜像---docker image rm <镜像名/ID/>
自定义镜像
镜像的定制其实是定制每一层的文件、配置。dockerfile是一个文本,其内包含了一条条指令,每一个指令构建一层,指令描述的是该层如何构建。
以下是构建jdk环境的命令
docker build -t <name/tag> .
容器container
容器即是进程,与宿主机隔离,并且拥有自己的命名空间、网络配置(必须暴露端口给宿主机)等。容器与镜像的关系可以理解为实例与类的关系。每一个容器启动时,以镜像层为基础,在其上创建一个容器的存储层。存储层与容器生命周期一样,容器销毁时,存储层也消失。
命令
创建容器并启动---docker run --name <重命名> -d -p <外部端口>:<内部端口> 镜像
- 检查是否存在指定镜像,不存在就从公有仓库下载
- 利用镜像启动容器
- 分配文件系统,在镜像层上创建一个存储层
- 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中
- 从地址池配置一个IP地址给容器
- 执行用户指定的应用程序
启动容器---docker start container
关闭容器---docker stop container
进入容器---docker exec container
容器列表---docker ps (查看所有容器包括未启动-a)
删除容器---docker container rm <容器名>
仓库
docker官方提供镜像docker-registry,用于构建私有的仓库。
docker run -d -p 5000:5000 --restart always --name registry registry复制代码
启动好仓库容器后,使用tag标记镜像,并将镜像push到仓库
docker tag 【imgae】:【tag】【host】:【port】/【repository】:【tag】
docker push 【imgae】:【tag】
上传私有仓库后,查询仓库中已有镜像
curl http://【host】:【port】/v2/catalog
网络管理
- 容器与宿主机隔离,网络也是相互隔离,容器拥有自己的ip。docker inspect 【container】获取容器具体信息
- 暴露内部端口映射宿主机
- 每个容器启动时,默认的IP会有所变化,通常根据宿主机ip加上映射端口来使用