摘要
本文部分内容来源于网络,个人收集整理,请勿传播
本文主要是为了简单介绍什么是docker、docker的基本操作而写。
本文所有资源来源于《Docker 进阶与实战》一书。
什么是docker
- 开源容器引擎 > 管理容器、镜像
- 轻量级虚拟化 > 容器技术本身
- 在一些方面,性能和物理机相近 > 因为下面两条
- 基于内核的cgroup、namespace容器技术 > 处理逻辑与内核深度融合
- 通过libcontainer管理 > 真正意义的容器引擎
- docker侧重于上层处理 >
- 对层级镜像的创新 > 提高磁盘利用率
docker容器和虚拟机的区别
- 容器和虚拟机是互补的
- 虚拟机是用来进行硬件资源划分的完美解决方案
- 容器是操作系统级别的虚拟化
- 容器可以共享资源,进程级别的隔离,轻量级
- 秒级、甚至毫秒级启动
docker核心组件
- docker 客户端
- docker daemon
- docker 容器
- docker 镜像
- docker registry (镜像仓库)
docker 客户端
- 典型的c/s架构
- 客户端、服务端在一个二进制文件中(针对linux)
- docker command、restful api
docker daemon
- 可以理解成docker-server(docker-engine)
- docker核心引擎
- 接受客户端发送的请求
docker 容器
- docker的核心内容
- 以镜像为基础,同时提供了一个标准、隔离的执行环境
- 环境一致性
- Docker容器后台运行,就必须有一个前台进程
- 容器=cgroup+namespace+rootfs+容器引擎(lxc)
- cgroup 资源控制
- namespace 访问隔离
- rootfs 文件系统隔离
- 容器引擎 生命周期控制
- 目前所有linux容器项目都包含以上组件
什么是LXC
- LXC用户态工具
- Linux Container,即内核容器技术的简称(通常指这种)
docker 在此基础上做了什么
- 跨主机部署 > 镜像
- 以应用为中心 > Dockerfile
- 自动构建 > Dockerfile,salt。。。
- 版本管理 > 类似git的tag
- 组件重用 > 镜像层级
- 共享 > registry
- 工具共享链 > …
容器技术(容器虚拟化)
- 又称为容器虚拟化
- 是一种操作系统虚拟化技术(与其他虚拟化差异比较大)
- 轻量级虚拟化技术
- linux内核支持
什么是容器技术(普遍认可的说法)
- 首先要有一个相对独立的运行环境
- 最小化其对外界的影响
- namespace(命名空间):访问隔离
- cgroup(控制组):资源控制
容器技术的发展史
docker 镜像
- 是一个还没运行起来的“运行环境”
- 轻量级、可定制的rootfs
- 层级结构,并且可以复用
- 自定义镜像(DOCKERFILE,COMMIT)
docker registry
- 镜像仓库
- 服务器级别的应用商店
docker 命令
1 | docker info |
build
1 | # 查看镜像 |
ship
1 | # 从registry搜索镜像、下载镜像 |
run
1 | # 查看容器 |
Dockerfile
- pull基础镜像
- 通过dockerfile生成新的镜像
- push新的镜像到仓库
- 从仓库pull新的镜像
- 通过run、compose进行部署
1 | # 一个简单的Dockerfile |
CMD
1 | 构建镜像后,情动容器默认执行的命令,如初始化环境,可以在run的时候被覆盖 |
ENTRYPOINT
1 | 与CMD命令有些像,但是默认不能被覆盖一般与CMD配合使用,可以配合docker run 传递参数 |
WORKDIR
1 | 可以用来切换目录,限定一些指令在目录下执行,也可以为最终的镜像设置工作目录 |
ENV
1 | 可以在镜像构建过程中设置环境变量,可以延续到以此镜像为基础的容器中,也可以用-e选项来传递环境变量 |
USER
1 | 指定启动的镜像使用的用户,默认是root |
VOLUME
1 | 指定容器启动的时候添加卷,一个卷可以存在一个或多个容器内的特定目录里面,可以实现将数据或者代码添加到镜像中而不是提交到镜像中,并且允许多个容器共享 |
ADD
1 | 用来将构建上下文中的文件或目录复制到镜像中 |
COPY
1 | COPY与ADD比较像,但是COPY不会做解压工作,只是单纯的拷贝。原路径要在构建上下文中,目标路径必须是一个绝对路径,如果目标目录不存在,会自动创建mkdir -p |
ONBUILD
1 | ONBUILD指令能为镜像添加触发器,当一个镜像被其他镜像用作基础镜像时,该镜像的触发器会被执行(如你的镜像需要从未准备好的位置添加代码,或者你需要执行特定于构建镜像的环境的构建脚本) |
docker 集群
- compose 服务集群
- machine 管理集群
- openstack
- mesos
- swarm
- k8s
- rancher
docker的三大编排工具
- compose 组装多个容器
- machine 多平台安装docker
- swarm 集群管理工具
docker-compose
- 一个应用通常是由多个组件(容器)构成的
- 定义一个应用由哪些容器组成
定义容器之间的关联
compose将yml文件解析成docker命令参数
- 调用相应的docker接口
- 是对docker命令的封装
1 | # requirements.txt |